When I test the timer example with nrf52832 DK, it so nice to 4 minutes.
uint32_t time_ms = 240000;
But when I set the time interval over 5 minutes, then the event handler run more rapidly.
So, what should I do for long time period?
When I test the timer example with nrf52832 DK, it so nice to 4 minutes.
uint32_t time_ms = 240000;
But when I set the time interval over 5 minutes, then the event handler run more rapidly.
So, what should I do for long time period?
Hi JW,
By default, the timer runs at 16 MHz and the maximum bit width of the timer is 32-bit. This corresponds to a maximum timer value of:
(2^32)-1 = 4294967295
The reason why you see event handler more rapidly with 5 minutes, is that nrf_drv_timer_ms_to_ticks
use the configured frequency and the time_ms
parameter to generate the number of ticks, and return this in a 32 bit variable:
5*60*16000000 = 4800000000
This overflows the 32 bit variable, giving you a tick count of 505032705 = ~31.5 seconds.
You need to change the frequency of the timer to make it run run slower. This is done by changing the timer configuration:
timer_cfg.frequency = NRF_TIMER_FREQ_8MHz;
You can set it to any of the frequencies documented here.
Best regards,
Jørgen
Well, but when I set the time interval 5 minutes with time_ms = 300000
after change frequency to 8MHz, the event handler also run every 30 seconds.
Well, but when I set the time interval 5 minutes with time_ms = 300000
after change frequency to 8MHz, the event handler also run every 30 seconds.