原创 STM32中断优先级分组

2009-7-28 17:12 6142 9 11 分类: MCU/ 嵌入式

Cortex-M3的中断优先级的分组方式最多可以有有8种,因为CM3强制规定:SubPriority至少要占一个位(如果没有该强制规定,那么CM3分组方式最多有9种)。


我们知道:STM32把指定中断优先级的寄存器的MSB4位有效,共有以下5种分组方式:
第0组方式:所有4位用于响应优先级
第1组方式:最高1位用于抢占式优先级,最低3位用于响应优先级
第2组方式:最高2位用于抢占式优先级,最低2位用于响应优先级
第3组方式:最高3位用于抢占式优先级,最低1位用于响应优先级
第4组方式:所有4位用于抢占式优先级


MISC.H里面有:


#define NVIC_PriorityGroup_0         ((uint32_t)0x700) /* 0 bits for pre-emption priority
                                                          4 bits for subpriority */
#define NVIC_PriorityGroup_1         ((uint32_t)0x600) /* 1 bits for pre-emption priority
                                                          3 bits for subpriority */
#define NVIC_PriorityGroup_2         ((uint32_t)0x500) /* 2 bits for pre-emption priority
                                                          2 bits for subpriority */
#define NVIC_PriorityGroup_3         ((uint32_t)0x400) /* 3 bits for pre-emption priority
                                                          1 bits for subpriority */
#define NVIC_PriorityGroup_4         ((uint32_t)0x300) /* 4 bits for pre-emption priority
                                                          0 bits for subpriority */


 


我们发现:第4组方式是“所有4位用于抢占式优先级”,那么这是不是与"SubPriority至少要占一个位"相冲突呢?


答案:当然不冲突了!因为虽然STM32的"优先级配置寄存器"没有使用bit3、bit2、bit1、bit0,但是却允许从它们中分组(分组位置由应用程序中断及复位控制寄存器(AIRCR)的[10:8]决定)。


=========================


第0组采用的分组方式是


bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0


第1组采用的分组方式是


bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0


第2组采用的分组方式是


bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0


第3组采用的分组方式是


bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0


第4组采用的分组方式是


bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户377235 2013-8-10 10:24

哪尼

用户1547065 2009-6-27 09:43

没硬道理啊 上图啊

用户1090342 2009-5-28 11:34

我没有注意到“CM3强制规定:SubPriority至少要占一个位”。请博主指出具体出处,手册中的哪一页?
相关推荐阅读
用户187751 2009-12-02 11:47
MCS_51中断优先级与中断响应时间
...
用户187751 2009-12-01 11:45
Keil的关键字using与寄存器组的切换
...
用户187751 2009-11-29 01:15
KEIL编译器如何分配内存与keil版本差异
...
用户187751 2009-11-28 12:20
浅析C8051F040的EMI0CN寄存器与On-chip XRAM与Keil
...
用户187751 2009-11-28 12:04
在堆上分配内存[转]
[编程修养]的第8条:可能许多人对内存分配上的“栈 stack”和“堆 heap”还不是很明白。包括一些科班出身的人也不明白这两个概念。我不想过多的说这两个东西。简单的来讲,stack 上分配的内存系...
用户187751 2009-11-28 11:26
KEIL C51可重入函数及模拟栈浅析[转]
摘要:本文较详细的介绍了keilc51可再入函数和模拟堆栈的一些概念和实现原理,通过一个简单的程序来剖析keilc51在大存储模式下可重入函数的调用过程,希望能为keilc51和在51系列单片机上移植...
EE直播间
更多
我要评论
2
9
关闭 站长推荐上一条 /3 下一条