Current consumption during k_cpu_idle() after GPIO interrupt does not take the same value. Why does this happen? Any idea? Thank you for reading this post in advance.
<Environment>
- DK v0.8.5(SB43 cut)
- modem firmware v1.0.0
- nrf; v1.0.0
- current measurement tool: multimeter
I configure GPIO11 as interrupt pin. I connect it to GND and disconnect again and again by jumper wire. After I connect it back to GND, the DK sometimes continuously consumes 25 uA and in another time 150 uA.
CONFIG_TRUSTED_EXECUTION_NONSECURE=y CONFIG_GPIO=y CONFIG_SERIAL=n # CONFIG_SERIAL=n in spm program CONFIG_LOG=n CONFIG_AT_HOST_LIBRARY=n CONFIG_REBOOT=y
#include <zephyr.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <gpio.h>
#include <device.h>
#define GPIO_IN_INT GPIO_IN_PIN11_Pos
struct device *gpio_controller;
struct gpio_callback gpio_cb;
bool is_interrupted;
void gpio_test_interrupt(struct device *gpio, struct gpio_callback *cb, u32_t pins) {
is_interrupted = true;
}
u8_t init_gpio_interrupt() {
int8_t ret;
ret = gpio_pin_configure(gpio_controller, GPIO_IN_INT, (GPIO_DIR_IN | GPIO_INT | GPIO_INT_EDGE | GPIO_INT_ACTIVE_HIGH));
if (ret) {
return -1;
}
gpio_init_callback(&gpio_cb, gpio_test_interrupt, BIT(GPIO_IN_INT));
ret = gpio_add_callback(gpio_controller, &gpio_cb);
if (ret){
return -1;
}
ret = gpio_pin_enable_callback(gpio_controller, GPIO_IN_INT);
if (ret){
return -1;
}
return 0;
}
void main(void)
{
gpio_controller = device_get_binding("GPIO_0");
if (!gpio_controller) {
sys_reboot();
}
if (init_gpio_interrupt() != 0) {
sys_reboot();
}
while (1) {
k_cpu_idle();
}
}