I am integrating app_timer with no softdevice..
Code compiles and runs correctly at the begining but it only executes the timeout_handler function once after the app_timer_start() is run.
Already tried creating the timer with APP_TIMER_MODE_REPEAT and APP_TIMER_MODE_SINGLE_SHOT. (on the second case call app_timer_start() from timeout_handler().
I think that maybe something is being missed , but cannot find what.
Here is the code.
#include <stdbool.h>
#include <stdint.h>
#include "nrf.h"
#include "nordic_common.h"
#include "boards.h"
#include "nrf_log.h"
#include "nrf_log_ctrl.h"
#include "nrf_log_default_backends.h"
#include "app_timer.h"
#include "nrf_drv_clock.h"
/* ------ timer ------*/
#define ANALOG_READ_INTERVAL APP_TIMER_TICKS(2000)
APP_TIMER_DEF(my_timer_id);
static void lfclk_request(void)
{
uint32_t err_code = nrf_drv_clock_init();
APP_ERROR_CHECK(err_code);
nrf_drv_clock_lfclk_request(NULL);
}
static void timeout_handler(void * p_context){
ret_code_t err_code;
NRF_LOG_INFO("[tmr] execute");
err_code = app_timer_start(my_timer_id,APP_TIMER_TICKS(2000), NULL);
APP_ERROR_CHECK(err_code);
NRF_LOG_FLUSH();
}
static void timers_init(){
ret_code_t err_code = app_timer_init();
APP_ERROR_CHECK(err_code);
err_code = app_timer_create(&my_timer_id, APP_TIMER_MODE_SINGLE_SHOT , timeout_handler);
APP_ERROR_CHECK(err_code);
}
/* ----- logs -----*/
static void logs_init(void){
uint32_t err_code = NRF_LOG_INIT(NULL);
APP_ERROR_CHECK(err_code);
NRF_LOG_DEFAULT_BACKENDS_INIT();
}
/**
* @brief Function for application main entry.
*/
int main(void)
{
ret_code_t err_code;
lfclk_request();
logs_init();
timers_init();
NRF_LOG_INFO("APP_TEMPLATE");
NRF_LOG_FLUSH();
err_code = app_timer_start(my_timer_id, APP_TIMER_TICKS(2000), NULL);
APP_ERROR_CHECK(err_code);
while (true)
{
// Do nothing.
}
}