下冰雹 · 2021年03月03日

Cortex-M3/M4内核处理器一次中断事件可能产生两次中断问题

平台:LPC1788
中断源:外部中断1(红外接收)
现象:红外解码失败。

正常情况下一次红外遥控按键应该产生16次外部中断。诊断代码却显示执行了32次外部中断服务函数,也就是说一次中断事件,产生了两次中断。以下将这种问题简称为中断执行异常问题。

期间排除掉红外遥控硬件电路、软件配置、红外遥控头输出波形、CPU勘误等可能性。

最后看到Keil官网知识库中一篇文章ARM: Cortex-M3/M4 Interrupts Happening Twice?,才确定问题所在。

这篇文章给出了以下信息:

1.所有Cortex-M3/M4内核处理器都有可能出现中断执行异常问题,无论是NXP还是ST…
2.有问题的CPU的所有中断都可能出现中断执行异常问题,无论是外部中断还是定时器中断…

哪些设备可能会出现中断执行异常:

1.Cortex-M3/M4设计中增加了外部系统级写缓冲区,并且
2.清除中断标志代码位于中断服务程序的最后
这是因为清除中断代码后立即退出中断,但由于外部系统级写缓冲区的存在,中断标志在退出中断后还没能清掉,导致再次触发中断。这意味着处理器指令执行速度越快,越容易出现这种问题。

所以解决办法就是确保中断清除掉再从中断服务程序中退出。可选的解决办法有:

清除中断代码稍微放前面一些(不一定彻底解决问题)
增加判断中断标志是否清除的代码

推荐阅读

LwIP BUG之TCP连接丢失
详解RS-485上下拉电阻的选择

作者:zhzht19861011
首发博客:https://blog.csdn.net/zhzht19861011/article/details/112862342
关注FreeRTOS从基础到高级专栏,即时收取FreeRTOS系列文章。
推荐阅读
关注数
3239
内容数
54
介绍FreeRTOS的基本功能,移植与使用。主要介绍FreeRTOS的裁剪、任务、内存管理、队列、信号量、任务通知等基本组成,看完可以会用FreeRTOS,高级篇会深入介绍FreeRTOS的实现细节、方法、技巧。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息