| 本帖最后由 Sam131208 于 2024-12-30 11:14 编辑 
 lptimer用作时间同步,比较寄存器(LPTIMER_CMPV)用来定时触发,自动重载寄存器(LPTIMER_CAR)固定为0xFFFFFFFF,LPTIMER_CAR 和LPTIMER_CMPV 影子寄存器禁止使能。
 当lptimer在计时中,插入一个新的定时器,更新LPTIMER_CMPV 失败,中断丢失:
 1).   定时器已经设定在0x78000触发比较中断。
 2).   (假设)定时器在计时到0x76000时, 更新比较定时器到0x76020.
 3).   定时器中断丢失,停止debug, 查看比较定时器设定为0x78000,没有被更新为0x76020,而且也没有在0x78000处触发中断(定时器计数器已经远远大于它)。
 
 比较寄存器更新操作指令:
 
 
 static void timer_clock_set_timeout(int32_t ticks, bool idle){
    
    do{
        last_count_read = LPTIMER_CNT(LPTIMERN);
    }while(last_count_read != LPTIMER_CNT(LPTIMERN));
    LPTIMER_CMPV(LPTIMERN) = (uint32_t)(last_count_read + CLAMP(ticks, LPTIM_GUARD_VALUE, 0x7FFFFFFF));
}
 |