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

Restartig app_timer does not work with nRF52832 and SDK12.0.0

I am having an app_timer (nRF52832 / SDK12.0.0) that's interval must be changed during its lifetime. I am using following code to change the interval:

app_timer_stop(m_timer_id);
uint32_t interval = APP_TIMER_TICKS(interval_ms, APP_TIMER_PRESCALER);
app_timer_start(m_timer_id, interval, NULL);

So far so good, but what really happens is that I end up having a delay of a minute or so, before timer starts to fire interrupts again. This happens only when I change the interval. My target interval is from 10 to 100 ms.

Could there be a bug somewhere in the app_timer library code? With SDK8.0.0 and nRF51822 I did not have similar problem. My code is exactly the same.

Parents Reply
  • The default prescaler of the time is 0. So it will generate ticks with 16MHz tick. For 100ms with prescaler 0, you need to put 16MHz/10 = 0x186A00 in CC register. This is a 24 bit value.

    Please check your nrf_drv_timer_config_t variable to see what .bitfield variable of it is initalized to. My guess is that it is initialized to TIMER_DEFAULT_CONFIG_BIT_WIDTH which is set to 0 = 16 bit. So instead of writing 0x 186A00, it writes only 0x6A00 = 1.69ms.

    Solution is to change the TIMER_DEFAULT_CONFIG_BIT_WIDTH to 2 which is 24bit in timer register.

    If this works, please accept the answer.

Children
No Data
Related