很多朋友对中断的一些知识还是不了解,今天就写点关于Cortex-M3处理器中断相关,以及FreeRTOS中断优先级配置的内容。
从Cortex-M到Cortex-A认识ARM处理器,了解一下关于ARM处理器的种类。
本文主要结合Cortex-M3下面STM32F1系列处理器为例来讲述中断控制相关内容。而Cortex-M其它系列,或者说STM32其它系列关于中断的内容类似。
Cortex-M3只是STM32F1的一个内核。反过来说STM32F1是在Cortex-M3基础上增加了一些外设(如:USART、AD等)的芯片。
2
STM32中断控制
NVIC:Nested Vectored Interrupt Controller,即嵌套向量中断控制器。
STM32中NVIC我们比较熟悉,编程的时候使用中断都会对NVIC进行配置。
而STM32F1中的NVIC是属于Cortex-M3中的一部分,而不是STM32增加的外设。
NVIC向量中断控制器是Cortex‐M3不可分离的一部分,它与 CM3 内核的逻辑紧密耦合,有一部分甚至水乳交融在一起。
所以,NVIC相关的寄存器位于Cortex-M手册中。讲述STM32的中断控制,还得从Cortex-M3的NVIC讲起,
1.中断输入向量表
Cortex-M3的NVIC支持1至240个中断输入,比如STM32中xxxIRQs,也就是中断向量表,具体的数值由芯片厂商在设计芯片时决定。
比如STM32F1的中断和异常向量表:
2.中断和异常区别
很多初学的朋友不知道什么是中断?什么是异常?甚至有人直接把中断和异常笼统称为“中断”。
中断和异常其实有差异,也有关联,我们常说的中断其实是包含了异常。异常可以理解为MCU,或者程序处于了某种异常状态。
这么区分吧,看上面向量表,上部分有灰色背景的为异常,下部分白色的为中断。
异常属于Cortex‐M3内核的一部分,而中断属于MCU(STM32)的一部分(由厂家决定)。
所以:
1.站在Cortex‐M3内核角度,像STM32中USART这类中断,属于外部中断。
2.站在STM32角度,EXTI外部引脚中断才属于中断。
3.优先级
对于Cortex-M3来说,每个外部中断都有一个对应的优先级寄存器。
每个寄存器占用8位,但是允许最少只使用最高3位,在STM32F1中使用了高4位。(也就是我们可以分16个优先级)
优先级可以被分为高低两个位段,分别是抢占优先级和亚(响应)优先级。
提示:
1.STM32中断优先级数值越小,优先级越大。
2.优先级分组:Cortex-M3,M4具有分组功能,即存在抢占优先级和响应优先级,如下图:
而有的内核就没有,如Cortex-M0就没有。
3.参考资料
可以参看《Cortex-M3权威指南》
STM32的内核编程手册:
http://www.st.com/stonline/products/literature/pm/15491.pdf
3
FreeRTOS中断优先级配置
本节内容讲述一下FreeRTOS最大中断优先级配置问题,也就是FreeRTOSConfig.h配置文件中的:
configMAX_SYSCALL_INTERRUPT_PRIORITY
你们知道配置数值的含义吗?
这里就需要结合NVIC相关的内容来理解。
上面说了,在STM32中,使用了NVIC优先级的高4位,而我们配置时需要对高4位进行配置(低4位未使用)。
看上图,明白了吗,上面这个数值就是95,但代表的优先级为5。
这个配置数值的含义,大概意思是:你代码中使用的中断(比如USART1_IRQn)优先级需要大于5才可行。
如下面配置,优先级为2就不行(当然,有分组的还牵涉到分组问题)。
上一篇:stm32f407 adc的dma中断方式
下一篇:STM32F4+FreeRTOS+FreeRTosTcpIp移植教程
推荐阅读
史海拾趣
作为一家有社会责任感的企业,睿赫公司始终关注环境保护和可持续发展。公司在产品研发和生产过程中,积极采用环保材料和绿色生产工艺,减少对环境的影响。同时,公司还积极参与公益事业,为社会做出了积极的贡献。
在可持续发展方面,睿赫公司致力于推动电子行业的绿色化和智能化发展。公司不断加强技术研发和创新,推出了一系列符合环保要求和高性能要求的产品,为电子行业的可持续发展做出了积极的贡献。
随着全球化进程的加速和国际贸易的不断发展,Hendon Semiconductors积极实施全球化战略,不断拓展国际市场。公司加强与国际客户的合作与交流,了解他们的需求和期望,并根据市场变化调整产品结构和市场策略。同时,Hendon Semiconductors还积极参与国际展会和技术交流活动,展示其最新的技术和产品成果,提升品牌知名度和影响力。通过一系列有效的市场拓展措施和全球化战略的实施,Hendon Semiconductors在国际市场上取得了显著的成绩和突破。
在市场竞争日益激烈的环境下,功得公司意识到仅仅依靠创新是不够的,还需要有高品质的产品来赢得客户的信任。因此,公司开始注重产品质量管理,建立了完善的质量控制体系。功得公司严格把控原材料采购、生产工艺和成品检验等环节,确保每一件产品都符合高标准的质量要求。这种对品质的执着追求,使得功得公司的产品在市场上赢得了良好的口碑,品牌知名度也逐渐提升。
为了进一步提升公司的知名度和影响力,淩志比高开始注重品牌建设和市场推广。公司积极参与行业展会、举办产品发布会等活动,与客户和合作伙伴建立了紧密的联系。同时,淩志比高还通过广告宣传、社交媒体营销等方式,提升了品牌知名度和美誉度。
大家帮我看看我的HIVE 注册表哪里有设置不对,调用注册表编辑器修改键值后不能永久保存! FAT文件系统加载成功,能看到NAND FLASH盘符(FriendlyARM),但是调用注册表编辑器修改的注册表信息,系统重启后就没了。看网上都是说,启动要用的以及文件系统放到BOOT.hv里面,其它的存于SYSTEM.HV中就可以的。而且我WINCE中的HIVE组件也加了的 ...… 查看全部问答∨ |
大家好,我使用函数ExtTextOut 输出文字,但是由于我的程序有一个全屏的背景图,所以加载图片后文字被遮挡住了。 我大概知道可能是透明、背景色之类的问题,但是改了参数效果依然不对,麻烦大家给指点下,最好能有个例子详细些,多谢啦… 查看全部问答∨ |
WINCE6.0 中断处理OEMInterruptHandler--KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR,...) 最近在看WINCE中断处理,有一事不明,希望大家讨论一下: 问题1:当物理中断发生后首先会被调用的函数是不是OEMInterruptHandler? 问题2:OEMInterruptHandler函数作用是根据物理中断号(IRQ)返回对应的系统中断号(SYSINTR_XXX),既然这个函数 ...… 查看全部问答∨ |
|
我的平台式wince5.0+pxa270,在初始化网卡芯片过程中,读完0x3300的标志后,读ID#,结果每次读不对,大部分时候是0,有时候是其他的错误如15等。都不知道什么原因,网卡相关管脚配置应该都是对的,有谁遇到过吗… 查看全部问答∨ |
ADS1.2 调用strtoul(str,NULL,0,NULL),地址0的内容会被更改 strtoul的定义: unsigned long strtoul(const char *str, char **endptr, int requestedbase, int *ret) 可见ADS1.2会把NULL指针指向地址0,但是地址0放着复位向量,怎么样才能不改变0地址的内容呢?(当然在调用的时候可以不用NULL,而定义一个 ...… 查看全部问答∨ |
2440开发板,WINCE5.0系统, 启动系统后插入优盘或USB HUB 或鼠标都可以正常识别,当先插入优盘或USB HUB 再通电启动系统也可以识别,问题是先插入USB HUB再通电启动系统后,USB HUB无法识别,必需要再插拔一下才行,请问 怎么解决这个问题!… 查看全部问答∨ |
我用MPLAB V7.52 連接ICD2時,報錯,錯誤代碼是 Connecting to MPLAB ICD 2 ...Connected ICD0133: Firmware does not support command (0x7). ICD0082: Failed MPLAB ICD 2 operation MPLAB ICD 2 Ready 請問該怎麼弄,上一次用還是好好的呀 ...… 查看全部问答∨ |