Cortex-M3/M4内核处理器一次中断事件可能产生两次中断问题
- 平台:LPC1788
- 中断源:外部中断1(红外接收)
- 现象:红外解码失败。
正常情况下一次红外遥控按键应该产生16次外部中断。诊断代码却显示执行了32次外部中断服务函数,也就是说一次中断事件,产生了两次中断。以下将这种问题简称为中断执行异常问题。
期间排除掉红外遥控硬件电路、软件配置、红外遥控头输出波形、CPU勘误等可能性。
最后看到Keil官网知识库中一篇文章ARM: Cortex-M3/M4 Interrupts Happening Twice?,才确定问题所在。
这篇文章给出了以下信息:
- 所有Cortex-M3/M4内核处理器都有可能出现中断执行异常问题,无论是NXP还是ST…
- 有问题的CPU的所有中断都可能出现中断执行异常问题,无论是外部中断还是定时器中断…
哪些设备可能会出现中断执行异常:
- 设备厂商在 Cortex-M3/M4 设计中增加了额外的外部系统级写缓冲区(为了性能),并且
- 清除中断标志代码位于中断服务程序的最后。
这是因为清除中断代码后立即退出中断,但由于外部系统级写缓冲区的存在,中断标志在退出中断后还没能清掉,导致再次触发中断。这意味着处理器指令执行速度越快,越容易出现这种问题。
在退出中断前使用 DSB
指令或者 __dsb(0)
函数会强制等待直到内部写缓冲区清空,但如果恰好有一个额外的系统级写缓冲区,则该指令无法测试其状态。所以在退出中断前增加 DSB
指令并不能可靠解决本问题,要想彻底解决,只需在退出中断前执行一次额外的内存写操作。
任何类型的内存写入都可以实现,一些额外的内存写操作例子:
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 */
}
- 一些无害的操作:
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内核处理器一次中断事件可能产生两次中断问题相关推荐
- cortex m3/m4处理器的复位设计
cortex m3/m4处理器在复位层面总体上可以划分为core和debug logic两部分.core部分包括处理器内核(core)以及NVIC,BUS Matrix,MPU的非debug部分.de ...
- ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 有啥区别
ARM架构.ARM7.ARM9.STM32.Cortex M3 M4.51.AVR之间有什么区别和联系? ARM架构:由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~AR ...
- ARM 架构 ARM7 ARM9 STM32 Cortex M3 M4 51 AVR 有啥区别
ARM架构.ARM7.ARM9.STM32.Cortex M3 M4.51.AVR之间有什么区别和联系? ARM架构:由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~AR ...
- ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 之间有什么区别和联系?
本文转自嵌入式资讯精选公众号,特别鸣谢, 编者按:初学习ARM单片机的同学们可能会对ARM的架构定义并不是很明确,形形色色的名词背后到底代表什么含义呢?请听听这位嵌入式工程师的经验总结. ARM架构: ...
- Cortex M3/M4 学习摘要(二)
########################################## 处理器类型 使用RICS 3级流水选,且拥有哈佛架构 4GB寻址空间 加载存储架构 ############### ...
- Cortex M3/M4 学习摘要(一)
##################################################### 微控制器和处理器: 在一个基本的微处理器中,处理器只占了很小一部分,一般被内存.时钟发生器 ...
- Cortex‐M3的Faults异常究竟是什么?
关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 有许多朋友在学习,或者开发STM32时都遇到过HardFault_Handler的情 ...
- Cortex、ARMv8、arm架构、ARM指令集、soc?Cortex A8、A9都是ARMv7a 架构;Cortex M3、M4是ARMv7m架构;前者是处理器(内核)后者是指令集的架构(架构)
架构组成元素的指令集状态或者语法thumb指令集与arm指令集的区别例如thumb指令集是什么_thumb指令集与arm指令集的区别以及thumb-2的关系在下一文中介绍,本文暂时不讨论 有粉丝问我到 ...
- Cortex M3内核架构
CortexM3内核架构 宗旨:技术的学习是有限的,分享的精神是无限的. 1.ARMCortex-M3处理器 Cortex-M3处理器内核是单片机的中央处理单元( CPU). 完整的基于CM3的MCU ...
- Cortex M3 Bit-banding简介
http://blog.csdn.net/shevsten/article/details/7676397 Cortex M3 Bit-banding简介 分类: ARM MCU2012-06-19 ...
最新文章
- Java Web学习总结(11)JDBC
- [BZOJ1984] 月下“毛景树”
- 这40个linux命令,提高工作效率
- 产业为主谋定共享运行-农业大健康·万祥军:特色化小镇时代
- 信息系统项目管理师-论文写作基本介绍笔记
- Spring Security并发会话控制示例教程–如何限制Java JEE Web应用程序中的用户会话数...
- Timeline的Animation Track详解
- script标签async和defer的区别及作用
- [CentOS7]安装tomcat并开启自启动
- 从零基础入门Tensorflow2.0 ----六、27 卷积神经网络
- 计算机在线考试报名系统软件,全国计算机软考报名官网
- 合并两个有序表(C语言)
- MySQL必知必会——语句总结
- 华硕重装后进入bios_华硕笔记本重装系统时新bios无法设置u盘启动怎么办
- centos 设置为北京时间
- 关于中断、异常、软中断、硬中断的概念解释
- 【渝粤题库】陕西师范大学300010 中国史学史
- 作为PM,要知道的四类产品文档
- 互联网广告学——程序化购买
- 神了!用Python预测世界杯决赛,发现准确率还挺高!
热门文章
- FMEA失效模式和影响分析
- 最新服务器处理器天梯,服务器cpu天梯图2020 至强处理器天梯排名
- Chrome插件--》油猴的使用
- lamp一键安装包+linux,linux下的lanmp/lamp/lnmp一键安装包
- 用于空间搜索的四叉树
- 中国教育和科研计算机网 吉林省,吉林大学—41核心节点—热烈庆祝中国教育和科研计算机网CERNET建设20周年—中国教育和科研计算机网CERNET...
- 插值法(三次样条插值)
- 软件开发人员的能力模型
- QLabel(一) 内容换行
- 基础摄影测量学_光束区域网平差法列加密区内第一次迭代的全部原始误差方程式