CH579 清除TMR2中断标志位失效

条件:在使用CH579 的BLE Peripheral例程时,增加了TMR2作1s周期定时器,并触发周期结束中断。

现象:进入TMR2中断后,无论是直接调用函数还是直接写寄存器,TMR2中断标志位都无法清除,就导致不断进入TMR2中断

变更:即使不初始化BLE,也不行

请各位大佬帮忙看一下要怎么解决这个问题,谢谢!!!


TMR2初始化代码如下

    void TMR2_Timer1s(void)

    {

    TMR2_TimerInit(1000000/32);/* 1s定时*/

    

    /* 使能计数溢出中断 */

    TMR2_ClearITFlag( TMR0_3_IT_CYC_END );

    TMR2_ITCfg(ENABLE, TMR0_3_IT_CYC_END);

    NVIC_EnableIRQ(TMR2_IRQn);

    }


寄存器如下:

image.png

纯TMR例子,参考CH579EVT的TMR例子。

具体路径如下:./EVT/EXAM/TMR/


也试过TMR定时器例程,还是不行

具体表现为:不能清除中断标志位,调试时进入中断的计数器值随机

测试过程如下:

image.png


其他先不说,

TMR2_TimerInit(1000000/32); 

在官方sdk的默认 工程里, CH579 ble的默认主频是跑在32Mhz, TMR2_TimerInit 实际上是是对计数器的 结束值进行赋值,,你赋值是

1000000/32 = 31250 ,

32e6/31250 = 1024hz,你定时是1/1024Hz = 0.0009765625s


你确定是不能清除中断,还是中断太频繁了

这样才是1s 的定时:

TMR2_TimerInit(32e6);


谢谢tech46

确实是我自己的计数器配置错误,导致频繁进入中断,而不是不能清除中断标志位,非常感谢


只有登录才能回复,可以选择微信账号登录