This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

GPIO Interrupt Low Accuracy Mode not Working

Ok I am using GPIO interrupt and want absolute power saving but when I set the GPIO_INTERRUPT_HIGH_ACCURACY to true it works fine but when I set GPIO_INTERRUPT_HIGH_ACCURACY to false (low accuracy with power saving) the I receive only one interrupt and then my LED stays on (like no other interrupt was detected)

What could be the possible issues in low accuracy mode?

#define GPIO_INTERRUPT_HIGH_ACCURACY true

static void gpio_init(void)
{
    ret_code_t err_code;

    err_code = nrf_drv_gpiote_init();
    APP_ERROR_CHECK(err_code);

    nrf_drv_gpiote_out_config_t out_config = GPIOTE_CONFIG_OUT_SIMPLE(false);

//    err_code = nrf_drv_gpiote_out_init(PIN_OUT, &out_config);
//    APP_ERROR_CHECK(err_code);

    err_code = nrf_drv_gpiote_out_init(PIN_LED, &out_config);
    APP_ERROR_CHECK(err_code);

    err_code = nrf_drv_gpiote_out_init(PIN_BUZZER, &out_config);
    APP_ERROR_CHECK(err_code);



    nrf_drv_gpiote_in_config_t in_1_config = GPIOTE_CONFIG_IN_SENSE_LOTOHI(GPIO_INTERRUPT_HIGH_ACCURACY); // previous: GPIOTE_CONFIG_IN_SENSE_TOGGLE(true);
    in_1_config.pull = NRF_GPIO_PIN_PULLDOWN;

    err_code = nrf_drv_gpiote_in_init(PIN_INT_1, &in_1_config, int_1_pin_handler); //Creating Interrupt Handler
    APP_ERROR_CHECK(err_code);

    nrf_drv_gpiote_in_event_enable(PIN_INT_1, true);  //Enabling Interrupt for Pin
}

Related