driver: timer: fix accumulated counter increment
The current value of the counter must not be added to the accumulator. It will be added when calling z_timer_cycle_get_32. Signed-off-by: Julien D'Ascenzio <julien.dascenzio@paratronic.fr>
This commit is contained in:
parent
b0081d1f38
commit
3894c6ee50
1 changed files with 5 additions and 16 deletions
|
@ -47,32 +47,21 @@ static void lptim_irq_handler(struct device *unused)
|
|||
|
||||
k_spinlock_key_t key = k_spin_lock(&lock);
|
||||
|
||||
/* LPTIM1 CNT register is already reset after one autoreload */
|
||||
volatile u32_t lp_time = LL_LPTIM_GetCounter(LPTIM1);
|
||||
|
||||
/* It should be noted that to read reliably the content
|
||||
* of the LPTIM_CNT register, two successive read accesses
|
||||
* must be performed and compared
|
||||
*/
|
||||
|
||||
while (lp_time != LL_LPTIM_GetCounter(LPTIM1)) {
|
||||
lp_time = LL_LPTIM_GetCounter(LPTIM1);
|
||||
}
|
||||
lp_time += LL_LPTIM_GetAutoReload(LPTIM1) + 1;
|
||||
|
||||
/* do not change ARR yet, z_clock_announce will do */
|
||||
LL_LPTIM_ClearFLAG_ARRM(LPTIM1);
|
||||
|
||||
/* increase the total nb of lptim count
|
||||
/* increase the total nb of autoreload count
|
||||
* used in the z_timer_cycle_get_32() function.
|
||||
* Reading the CNT register gives a reliable value
|
||||
*/
|
||||
accumulated_lptim_cnt += lp_time;
|
||||
u32_t autoreload = LL_LPTIM_GetAutoReload(LPTIM1) + 1;
|
||||
|
||||
accumulated_lptim_cnt += autoreload;
|
||||
|
||||
k_spin_unlock(&lock, key);
|
||||
|
||||
/* announce the elapsed time in ms (count register is 16bit) */
|
||||
u32_t dticks = (lp_time
|
||||
u32_t dticks = (autoreload
|
||||
* CONFIG_SYS_CLOCK_TICKS_PER_SEC)
|
||||
/ LPTIM_CLOCK;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue