kk810226 发表于 2025-2-11 19:20

H32F460进中断的问题

本帖最后由 kk810226 于 2025-2-13 18:57 编辑

使用TMRO的CH-A做100us的时钟中断。使用的同步时钟,中断号使用的INT006,初始化程序采用的小华的范例中的程序。
现在碰到的问题是,仿真的时候大概有70%的机会进不了中断。
通过仿真器看NVIC,也没看到其他中断被挂起或者响应。
进不了中断的后面也就进不了中断了。猜测可能是初始化程序这里的问题。
但是在观察可以进中断和不可以中断时候的TMR0的配置寄存器,NVIC的寄存器,还有INTC的寄存器都没看到差异。。

后面发现通过修改DDL_DelayMS(1U)的延时时间会影响成功的概率。
中间几经波折,最终还是定在了初始的1ms时间,连续跑了10多次都没有出现问题。
但是今天突然又不行了。。
所以想知道这个地方的延时是为了什么的?手册中只是提到了采用异步时钟的时候需要延时。
为什么它会影响中断?或者是其他方面的原因,有没有哪位大佬碰到或知道的。
程序如下:


wubangmi 发表于 2025-2-12 10:01

管它同步还是异步,初始化的时候都加上延时,另外这个延时的时候不能被其他中断打断,不然也可能会出现你描述的这种情况。
所以我个人建议按照下面这个方式操作:
__disable_irq();
DDL_DelayMS(1U);                           
__enable_irq();

kk810226 发表于 2025-2-13 18:51

wubangmi 发表于 2025-2-12 10:01
管它同步还是异步,初始化的时候都加上延时,另外这个延时的时候不能被其他中断打断,不然也可能会出现你描 ...

试了下,还是不行。。。
还有就是测试只打开TMR0中断,还是同样的问题,有没有可能是板子(硬件)的问题?

wubangmi 发表于 2025-2-14 09:28

拿例程按照你的要求改了下,没什么问题。主频是默认的8M,只加了打印log。
删除了例程里的其他配置,只剩下TMR0的中断和打印log

具体tmr0的配置请看图

kk810226 发表于 2025-2-14 17:36

本帖最后由 kk810226 于 2025-2-14 17:40 编辑

wubangmi 发表于 2025-2-14 09:28
拿例程按照你的要求改了下,没什么问题。主频是默认的8M,只加了打印log。
删除了例程里的其他配置,只剩下 ...首先感谢您的回复。还抽空做了验证{:smile:}
现在关键它不是不能触发,刚测试了下:在1ms延时那里设了个中断,启动10次,其中有5次可以正常响应中断;
不设中断直接跑,启动10次,10次都不行。
我的主频是200MHz,TMR0的时钟PCLK1是100MHz。

地瓜patch 发表于 2025-2-28 22:13

开中断,中断函数中设短点
页: [1]
查看完整版本: H32F460进中断的问题