STM32_NVIC寄存器详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32_NVIC寄存器详解
在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体:
typedef struct
{
vu32 ISER[2]; //2个32位中断使能寄存器分别对应到60个可屏蔽中断
u32 RESERVED0[30];
vu32 ICER[2]; //2个32位中断除能寄存器分别对应到60个可屏蔽中断
u32 RSERVED1[30];
vu32 ISPR[2]; //2个32位中断挂起寄存器分别对应到60个可屏蔽中断,可挂起正在执⾏的中断
u32 RESERVED2[30];
vu32 ICPR[2]; //2个32位中断解挂寄存器分别对应到60个可屏蔽中断,可解除被挂起的中断
u32 RESERVED3[30];
vu32 IABR[2]; //2个32位中断激活标志寄存器,可读取该寄存器判断当前执⾏的中断是哪个,中断执⾏完硬件清零,只读
u32 RESERVED4[62];
vu32 IPR[15]; //15个32位中断优先级分组寄存器,每个中断分配8个bit,对应到4*15=60个中断
} NVIC_TypeDef;
IPR[15]
15个32位中断优先级分组寄存器,每个中断分配8个bit,对应到4*15=60个中断。
但是并不是8个bit都被使⽤了,⽽是仅仅只⽤到了⾼四位,这样就可以得到5组16级的中断优先级。
⾼位的4个bit⼜分为抢占优先级和⼦优先级,抢占优先级在前,⼦优先级在后。
两种类型优先级占⽤的位数⼜可以通过SCB->AIRCR寄存器的bit[10:8]来配置。
数字越⼩优先级越⾼,⾼优先级的中断可以中断低优先级的中断,但是抢占优先级相同时⼦优先级⾼的⽆法中断⼦优先级低的中断。
结合实例说明⼀下:假定设置中断优先级组为2,然后设置中断28(Tim2中断)的抢占优先级为3,响应优先级为2。
中断6(外部中断0)的抢占优先级为4,响应优先级为0。
中断7(外部中断1)的抢占优先级为3,响应优先级为0。
那么这3个中断的优先级顺序为:中断7>中断28>中断6。
上⾯例⼦中的中断28和中断7都可以打断中断6的中断。
⽽中断7和中断28却不可以相互打断!。