Sam131208 发表于 2024-12-30 10:40

GD32L233 lptimer失效问题

本帖最后由 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));
}

stormwind123 发表于 2025-1-25 15:10

可能是硬件连接问题

elephant00 发表于 2025-1-25 15:30

检查软件库版本是不是最新的

laocuo1142 发表于 2025-1-25 16:00

检查外部时钟源的连接和信号质量。

jcky001 发表于 2025-1-25 16:31

如果GD32L233处于低功耗模式,请检查低功耗模式的配置是否正确。

cr315 发表于 2025-1-25 17:23

检查初始化代码

flycamelaaa 发表于 2025-1-25 19:00

时钟配置可能有错误吧

两只袜子 发表于 2025-1-25 19:30

中断优先级和中断使能是否已经正确配置。

classroom 发表于 2025-1-25 20:00

检查LPTIMER的预分频器、计数器模式、输出模式等参数配置是否正确。

梅花香自123 发表于 2025-2-28 16:12

这种情况的发生可能与定时器计时和寄存器更新机制相关。
页: [1]
查看完整版本: GD32L233 lptimer失效问题