欢迎来到天天文库
浏览记录
ID:37640189
大小:169.76 KB
页数:8页
时间:2019-05-27
《STM32中断优先级与相关使用概念》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、STM32中断优先级相关概念与使用笔记一、基本概念1.ARMcortex_m3内核支持256个中断(16个内核+240外部)和可编程256级中断优先级的设置,与其相关的中断控制和中断优先级控制寄存器(NVIC、SYSTICK等)也都属于cortex_m3内核的部分。STM32采用了cortex_m3内核,所以这部分仍旧保留使用,但STM32并没有使用cortex_m3内核全部的东西(如内存保护单元MPU等),因此它的NVIC是cortex_m3内核的NVIC的子集。2.STM32目前支持的中断共为84个(16个内核+68个外部),和16级可编程中断优先级的设置(仅使用中断优先级设置8bit中的
2、高4位,见后面解释)。《参考最新101xx-107xxSTM32Referencemanual,RM0008》。3.以下主要对“外部中断通道”进行说明。对于cortex_m3内核所支持的240个外部中断,我在这里使用了“中断通道”这个概念,因为尽管每个中断对应一个外围设备,但该外围设备通常具备若干个可以引起中断的中断源或中断事件。而该设备的所有的中断都只能通过该指定的“中断通道”向内核申请中断。因此,下面关于中断优先级的概念都是针对“中断通道”的。当该中断通道的优先级确定后,也就确定了该外围设备的中断优先级,并且该设备所能产生的所有类型的中断,都享有相同的通道中断优先级。至于该设备本身产生的多
3、个中断的执行顺序,则取决于用户的中断服务程序。4.STM32可以支持的68个外部中断通道,已经固定的分配给相应的外部设备。每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但在STM32中只使用4位,高4位有效),每4个通道的8位中断优先级控制字(PRI_n)构成一个32位的优先级寄存器(PriorityRegister)。68个通道的优先级控制字至少构成17个32位的优先级寄存器,它们是NVIC寄存器中的一个重要部分。5.对于这4bit的中断优先级控制位还必须分成2组看:从高位开始,前面是定义抢先式优先级的位,后面用于定义子优先级。4bit的分组组合可以有以下几种形式:编号分配情况
4、70:4无抢先式优先级,16个子优先级61:32个抢先式优先级,8个子优先级52:24个抢先式优先级,4个子优先级43:18个抢先式优先级,2个子优先级3/2/1/04:016个抢先式优先级,无子优先级6.在一个系统中,通常只使用上面5种分配情况的一种,具体采用哪一种,需要在初始化时写入到一个32位寄存器AIRC(ApplicationInterruptandResetControlRegister)的第[10:8]这3个位中。这3个bit位有专门的称呼:PRIGROUP(具体写操作后面介绍)。比如你将0x05(即上表中的编号)写到AIRC的[10:8]中,那么也就规定了你的系统中只有4个抢先
5、式优先级,相同的抢先式优先级下还可以有4个不同级别的子优先级。7.AIRC中PRIGROUP的值规定了设置和确定每个外部中断通道优先级的格式。例如,在上面将0x05写入了AIRC中PRIGROUP,也就规定了当前系统中只能有4个抢先式优先级,相同的抢先式优先级下还可以有4个不同级别的子优先级,他们分别为:位[7:6]位[5:4]位[3:0]000号抢先优先级000号子优先级无效011号抢先优先级011号子优先级无效102号抢先优先级102号子优先级无效113号抢先优先级113号子优先级无效8.如果在你的系统中使用了TIME2(中断通道28)和EXTI0(中断通道6)两个中断,而TIME2中断必
6、须优先响应,而且当系统在执行EXIT0中断服务时也必须打断(抢先、嵌套),就必须设置TIME2的抢先优先级比EXTI0的抢先优先级要高(数目小)。假定EXTI0为2号抢先优先级,那么TIME2就必须设置成0或1号抢先优先级。这些工作需要在AIRC中的PRIGROUP设置完成,确定了整个系统所具有的优先级个数后,再分别对每个中断通道(设备)进行设置。9.具体优先级的确定和嵌套规则。ARMcortex_m3(STM32)规定a/只能高抢先优先级的中断可以打断低抢先优先级的中断服务,构成中断嵌套。b/当2(n)个相同抢先优先级的中断出现,它们之间不能构成中断嵌套,但STM32首先响应子优先级高的中断
7、。c/当2(n)个相同抢先优先级和相同子优先级的中断出现,STM32首先响应中断通道所对应的中断向量地址低的那个中断(见ROM0008,表52)。具体一点:0号抢先优先级的中断,可以打断任何中断抢先优先级为非0号的中断;1号抢先优先级的中断,可以打断任何中断抢先优先级为2、3、4号的中断;……;构成中断嵌套。如果两个中断的抢先优先级相同,谁先出现,就先响应谁,不构成嵌套。如果一起出现(或挂在那里等
此文档下载收益归作者所有