STM32中断优先级分组

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

你可能感兴趣的:(STM32中断优先级分组)