Hi there,
I am a using a nRF52/SDK 13 to communicate to an external board which uses AT commands, I would like to save some battery during the time I perform my AT command and Wait for a response from a UART interruption.
for example: using nrf_dela_ms(); which use CPU cycles to generate the delay
Sending_AT_Command1 nrf_delay_ms(2000); //waiting for response during a UART RX interruption Sending_AT_Command2 nrf_delay_ms(2000); //waiting for response during a UART RX interruption Sending_AT_Command3 nrf_delay_ms(2000); //waiting for response during a UART RX interruption
Instead of use nrf_delay_ms, Could I use a combination of sd_app_evt_wait + timer (app_timer_create)?
as far I know after called sd_app_evt_wait() it will put the device in a low consumption state and will wake up after an interruption event (also it won't enter in sleep mode if there are pending interruptions in the queue)
void timerhandler(void *p_context) { Global_timer_exit = 0; } void Timer_delay(uint8_t seconds, bool Timer_Exit) { ret_code_t err_code; app_timer_stop(Timer); Global_timer_exit = Timer_Exit; //global variable app_timer_start(Timer, APP_TIMER_TICKS(seconds * 1000), NULL); sd_app_evt_wait(); //enters in low consumption or sleep mode while (Global_timer_exit) // waiting for the timerhandler to exit when Timer_Exit =0 {} } int main(void) { .... //Timer configuration uint32_t err_code; err_code = app_timer_create(&Timer, APP_TIMER_MODE_SINGLE_SHOT, &timerhandler); APP_ERROR_CHECK(err_code); //Sending At commands Sending_AT_Command1 Timer_delay(5, 1); //waiting for response during a UART RX interruption Sending_AT_Command2 Timer_delay(5, 1); //waiting for response during a UART RX interruption Sending_AT_Command3 Timer_delay(5, 1); //waiting for response during a UART RX interruption for(;;) { app_sched_execute(); PowerManage(); } }
The timer above works, but my device is not entering in sleep mode, I am not sure if it is the proper way to do a friendly battery delay using a Timer