2440中断深度奇怪问题的解决

本文记录了一次关于ARM微控制器EINT18中断异常的排查经历。通过对比正常与异常情况下的EINTPEND寄存器状态,最终发现EINT8被误配置为中断模式导致的问题,并给出了具体的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对2440比较熟悉了,中断一直用EINT0,1,2,3,感觉想当好,后来又有中断需求,用了个EINT18,这个中断和前4个不一样,EINT8-EINT23是共用一个中断地址的,自己再在中断处理程序中区分,一切似乎都很正常,只是冷机启动或关机5分钟以上,再次重启首次触发中断会死机,再次重启一天都不会出问题,当时觉得小问题,等其他工作做完后,发现这个问题一直存在,虽然不影响使用,但每次冷机启动两次是相当的恶心,决定找到问题原因。

本以为很简单,但是坑爹的每次要重现问题就要关机5分钟,而且接仿真器也不会出现这个问题,用了大量printf,花了近2天,还是找不到问题所在,做梦都是在调,最后逐渐排除了硬件问题,ucos问题,堆栈问题。基本确定是中断问题。后来想到jlink命令行工具能直接读出寄存器,将相关寄存器读出,和正确的对比,终于发现EINTPEND寄存器有异常,死机时EINT8中断位有中断,而正确运行的没有中断,EINT8并没用到,和EINT18共用中断,但中断处理函数并未处理,检查IO初始化函数,果然将EINT8设置成中断了,改成输入,问题解决。

至于关机5分钟以上,我觉得可能是等电路电容放干净电,重启动会触发EINT8,否则不会触发EINT8。

还有比较奇怪的是EINT8中断是软件屏蔽的,不知道cpu启动时做了什么

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值