Hello,
I'm trying to use the APP_TIMER API to have tempo, but I've noticed a problem of accuracy when using the RTC1. I use 0 as prescaler, so the RTC1 runs at 32768Hz. But when I want a tempo of 32768 ticks (in order to have 1 second of tempo), I've got only 936ms (measured with an oscilloscope).
Here is my code :
#define APP_TIMER_PRESCALER 0
#define APP_TIMER_MAX_TIMERS 9
#define APP_TIMER_OP_QUEUE_SIZE 4
static app_timer_id_t m_uneSeconde_timer_id;
void initialisationLed(void)
{
nrf_gpio_cfg_output(21);
nrf_gpio_pin_clear(21);
}
static void forToggle_handler(void * p_context)
{
nrf_gpio_pin_toggle(21);
UNUSED_PARAMETER(p_context);
}
static void timers_init(void)
{
uint32_t err_code;
// Initialize timer module.
APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_MAX_TIMERS, APP_TIMER_OP_QUEUE_SIZE, false);
// Create timers.
err_code = app_timer_create(&m_uneSeconde_timer_id,
APP_TIMER_MODE_REPEATED,
forToggle_handler);
APP_ERROR_CHECK(err_code);
NRF_CLOCK->TASKS_LFCLKSTART = 1;
}
static void application_timers_start(void)
{
uint32_t err_code;
// Start application timers.
err_code = app_timer_start(m_uneSeconde_timer_id, 32767, NULL);
APP_ERROR_CHECK(err_code);
}
int main(void)
{
// Initialize.
timers_init();
initialisationLed();
// Start execution.
application_timers_start();
// Enter main loop.
for (;;)
{
__WFI();
}
}
Is there an erro in my code, or do I have to put about 35000 ticks to have a 1.000s tempo ?