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

APP_TIMER incorrect time interval

Hi!

I have creat two timer with app_timer_init.

start the first timer trigger every 4 ms, every 125 times(approximately 0.5 sec) to start the second timer which trigger every 8 ms, so if i get count by second timer trigger, I think I can get around 60 triggers at once first timer 0.5 sec cycle, but I saw the random number around 60~65 triggers.

I print every trigger's time with second timer, there is some trigger has incorrect time interval. How to make it right?

NRF51422

SDK9

Softdevice S310 3.0.0

image description

There is my code:

static void timers_init(void)
{
    err_code = app_timer_create(&m_csc_meas_timer_id,APP_TIMER_MODE_REPEATED,
                                    (app_timer_timeout_handler_t)csc_meas_timeout_handler);
    APP_ERROR_CHECK(err_code);

	err_code = app_timer_create(&m_peak_timer_id, APP_TIMER_MODE_REPEATED,/*APP_TIMER_MODE_SINGLE_SHOT,*/
                                    (app_timer_timeout_handler_t)ready_meas_timeout_handler);
	APP_ERROR_CHECK(err_code);
}

m_csc_meas_timer_id is first timer => interval 4ms

m_peak_timer_id is second timer => calculate about 8ms

first timer =>

static void csc_meas_timeout_handler(void)
{
	countA++;

	if(countA==125)//4ms*125=500
	{
	  app_timer_stop(m_peak_timer_id);
	  REV_TIME = rtc_cnt_get() >> 5;
 	  cp_meas_count = 0;
	  tick_time=round((REV_TIME - B_time) * 0.5333);//for timer2 count 60 times

	  app_timer_start(m_peak_timer_id,	tick_time,	NULL);

	  B_time=REV_TIME;
	  countA=0;
	}
}

second timer =>

static void ready_meas_timeout_handler(void)
{

	cp_meas_count++;
TTT_cur = rtc_cnt_get();

printf("cp_meas_count[%d] rtc=%8d T:%5d ",cp_meas_count,TTT_cur, TTT_cur-TTT);

	TTT = TTT_cur;
}
Parents
  • Have you checked the tick_time that you pass to app_timer_start() in your csc_meas_timeout_handler()? It will change depending on when csc_meas_timeout_handler() is executed. I suspect that it is varying significantly, depending on other activities that requires CPU time. The application timer uses the lowest interrupt priority, so all other interrupts can possibly delay execution of the timeout handlers.

    Do you have any ANT or BLE activity? What other things are happening in your application?

Reply
  • Have you checked the tick_time that you pass to app_timer_start() in your csc_meas_timeout_handler()? It will change depending on when csc_meas_timeout_handler() is executed. I suspect that it is varying significantly, depending on other activities that requires CPU time. The application timer uses the lowest interrupt priority, so all other interrupts can possibly delay execution of the timeout handlers.

    Do you have any ANT or BLE activity? What other things are happening in your application?

Children
No Data
Related