HI All,
We are using NRF52832 for our project.
We use System OFF mode for putting NRF52832 into sleep and using multiple GPIO inputs pins (pin1, Pin2 and Pin3) for wake up purpose.
When we use multiple pins (pin1, Pin2 and Pin3), NRF52832 does not go to sleep mode itself.
If we try individual pins Pin1 OR Pin2 OR Pin3 for wake up , NRF52832 does go to sleep mode and wakes up based on Pin1 OR Pin2 OR Pin3.
Can we configure multiple pins for waking up?
Please send some example/sample code if anyone is having it.
Code:
void BOARD_InitWakeupPin(void)
{
ret_code_t err_code;
//Configure wake-up
//Input Signal 1 :Wake Up
nrf_drv_gpiote_in_config_t in_config = GPIOTE_CONFIG_IN_SENSE_HITOLO(false);
in_config.pull = NRF_GPIO_PIN_PULLUP;
err_code = nrf_drv_gpiote_in_init(INPUT_1, &in_config, NULL);
APP_ERROR_CHECK(err_code);
nrf_drv_gpiote_in_event_enable(INPUT_1, true);
//Input Signal 2 :Wake Up
nrf_drv_gpiote_in_config_t r_in_config = GPIOTE_CONFIG_IN_SENSE_HITOLO(false);
r_in_config.pull = NRF_GPIO_PIN_PULLUP;
err_code = nrf_drv_gpiote_in_init(INPUT_2, &r_in_config, NULL);
APP_ERROR_CHECK(err_code);
nrf_drv_gpiote_in_event_enable(INPUT_2, true);
//Input Signal 3 :Wake Up
nrf_drv_gpiote_in_config_t t_in_config = GPIOTE_CONFIG_IN_SENSE_HITOLO(false);
t_in_config.pull = NRF_GPIO_PIN_PULLUP;
err_code = nrf_drv_gpiote_in_init(INPUT_3, &t_in_config, NULL);
APP_ERROR_CHECK(err_code);
nrf_drv_gpiote_in_event_enable(INPUT_3, true);
}
void ChipEnterSystemOffMode(void)
{
/*Enter System-off*/
NRF_POWER->SYSTEMOFF = 1;
}
void Enter_Sleep_Mode(void)
{
nrf_drv_gpiote_in_uninit(INPUT_1);
nrf_drv_gpiote_in_event_disable(INPUT_1);
nrf_drv_gpiote_in_uninit(INPUT_2);
nrf_drv_gpiote_in_event_disable(INPUT_2);
nrf_drv_gpiote_in_uninit(INPUT_3);
nrf_drv_gpiote_in_event_disable(INPUT_3);
/*Prepare for wakeup using GPIO */
BOARD_InitWakeupPin();
/* Enter MCU Deep Sleep mode */
ChipEnterSystemOffMode();
}
void gpiote_init (void) {
nrf_drv_gpiote_in_config_t config;
config.hi_accuracy = true;
config.is_watcher = false;
config.pull = NRF_GPIO_PIN_PULLUP;
config.sense = NRF_GPIOTE_POLARITY_TOGGLE;
nrf_drv_gpiote_init();
nrf_drv_gpiote_in_init(INPUT_1, &config, gpiote_callback);
nrf_drv_gpiote_in_init(INPUT_2, &config, gpiote_callback);
nrf_drv_gpiote_in_init(INPUT_3, &config, gpiote_callback);
nrf_drv_gpiote_in_event_enable(INPUT_1, true);
nrf_drv_gpiote_in_event_enable(INPUT_2, true);
nrf_drv_gpiote_in_event_enable(INPUT_3, true);
}
main()
{
gpiote_init();
Enter_Sleep_Mode();
}