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

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

在退出中断前使用 DSB 指令或者 __dsb(0) 函数会强制等待直到内部写缓冲区清空,但如果恰好有一个额外的系统级写缓冲区,则该指令无法测试其状态。所以在退出中断前增加 DSB 指令并不能可靠解决本问题,要想彻底解决,只需在退出中断前执行一次额外的内存写操作

任何类型的内存写入都可以实现,一些额外的内存写操作例子:

  1. Timeout_counter++; 会对内存执行 读 - 修改 - 写 操作。
void Timer_IRQHandler (void)
{PortD->PTOR |= 1<<0;              /* Toggle output on port D0         */Timer->MSR |= TIMER_MASK;         /* Clear timer interrupt            */Timeout_counter++;                /* Count timeout & insure IRQ clear */
}
  1. 一些无害的操作:PortD->PTOR = PortD->PTOR; ,也会产生 读 - 修改 - 写 操作。
void Timer_IRQHandler (void)
{Timeout_counter++;                /* Increment timeout counter */PortD->PTOR |= 1<<0;              /* Toggle output on port D0  */Timer->MSR |= TIMER_MASK;         /* Clear timer interrupt     */PortD->PTOR = PortD->PTOR;        /* Insure IRQ clear          */
}

读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)

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

  1. cortex m3/m4处理器的复位设计

    cortex m3/m4处理器在复位层面总体上可以划分为core和debug logic两部分.core部分包括处理器内核(core)以及NVIC,BUS Matrix,MPU的非debug部分.de ...

  2. ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 有啥区别

    ARM架构.ARM7.ARM9.STM32.Cortex M3 M4.51.AVR之间有什么区别和联系? ARM架构:由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~AR ...

  3. ARM 架构 ARM7 ARM9 STM32 Cortex M3 M4 51 AVR 有啥区别

    ARM架构.ARM7.ARM9.STM32.Cortex M3 M4.51.AVR之间有什么区别和联系? ARM架构:由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~AR ...

  4. ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 之间有什么区别和联系?

    本文转自嵌入式资讯精选公众号,特别鸣谢, 编者按:初学习ARM单片机的同学们可能会对ARM的架构定义并不是很明确,形形色色的名词背后到底代表什么含义呢?请听听这位嵌入式工程师的经验总结. ARM架构: ...

  5. Cortex M3/M4 学习摘要(二)

    ########################################## 处理器类型 使用RICS 3级流水选,且拥有哈佛架构 4GB寻址空间 加载存储架构 ############### ...

  6. Cortex M3/M4 学习摘要(一)

    #####################################################  微控制器和处理器: 在一个基本的微处理器中,处理器只占了很小一部分,一般被内存.时钟发生器 ...

  7. Cortex‐M3的Faults异常究竟是什么?

    关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 有许多朋友在学习,或者开发STM32时都遇到过HardFault_Handler的情 ...

  8. Cortex、ARMv8、arm架构、ARM指令集、soc?Cortex A8、A9都是ARMv7a 架构;Cortex M3、M4是ARMv7m架构;前者是处理器(内核)后者是指令集的架构(架构)

    架构组成元素的指令集状态或者语法thumb指令集与arm指令集的区别例如thumb指令集是什么_thumb指令集与arm指令集的区别以及thumb-2的关系在下一文中介绍,本文暂时不讨论 有粉丝问我到 ...

  9. Cortex M3内核架构

    CortexM3内核架构 宗旨:技术的学习是有限的,分享的精神是无限的. 1.ARMCortex-M3处理器 Cortex-M3处理器内核是单片机的中央处理单元( CPU). 完整的基于CM3的MCU ...

  10. Cortex M3 Bit-banding简介

    http://blog.csdn.net/shevsten/article/details/7676397 Cortex M3 Bit-banding简介 分类: ARM MCU2012-06-19 ...

最新文章

  1. Java Web学习总结(11)JDBC
  2. [BZOJ1984] 月下“毛景树”
  3. 这40个linux命令,提高工作效率
  4. 产业为主谋定共享运行-农业大健康·万祥军:特色化小镇时代
  5. 信息系统项目管理师-论文写作基本介绍笔记
  6. Spring Security并发会话控制示例教程–如何限制Java JEE Web应用程序中的用户会话数...
  7. Timeline的Animation Track详解
  8. script标签async和defer的区别及作用
  9. [CentOS7]安装tomcat并开启自启动
  10. 从零基础入门Tensorflow2.0 ----六、27 卷积神经网络
  11. 计算机在线考试报名系统软件,全国计算机软考报名官网
  12. 合并两个有序表(C语言)
  13. MySQL必知必会——语句总结
  14. 华硕重装后进入bios_华硕笔记本重装系统时新bios无法设置u盘启动怎么办
  15. centos 设置为北京时间
  16. 关于中断、异常、软中断、硬中断的概念解释
  17. 【渝粤题库】陕西师范大学300010 中国史学史
  18. 作为PM,要知道的四类产品文档
  19. 互联网广告学——程序化购买
  20. 神了!用Python预测世界杯决赛,发现准确率还挺高!

热门文章

  1. FMEA失效模式和影响分析
  2. 最新服务器处理器天梯,服务器cpu天梯图2020 至强处理器天梯排名
  3. Chrome插件--》油猴的使用
  4. lamp一键安装包+linux,linux下的lanmp/lamp/lnmp一键安装包
  5. 用于空间搜索的四叉树
  6. 中国教育和科研计算机网 吉林省,吉林大学—41核心节点—热烈庆祝中国教育和科研计算机网CERNET建设20周年—中国教育和科研计算机网CERNET...
  7. 插值法(三次样条插值)
  8. 软件开发人员的能力模型
  9. QLabel(一) 内容换行
  10. 基础摄影测量学_光束区域网平差法列加密区内第一次迭代的全部原始误差方程式