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. 清除中断标志代码位于中断服务程序的最后

这是因为清除中断代码后立即退出中断,但由于外部系统级写缓冲区的存在,中断标志在退出中断后还没能清掉,导致再次触发中断。这意味着处理器指令执行速度越快,越容易出现这种问题。

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

  • 清除中断代码稍微放前面一些(不一定彻底)
  • 增加判断中断标志是否清除的代码
上一篇:明远智睿IMX8MMini应用领域及参数特性介绍


下一篇:物联网通信技术课程安排