用ARM内核函数来配置中断优先级的方法在之前的文章有提及过
本篇文章主要说明NVIC的相关寄存器作用,文章末尾也会总结内核函数配置中断优先级的方法
结合以下文章食用更佳[doge]
NVIC控制的中断优先级分组是应用程序中断及复位控制寄存器(AIRCR)的[10:8]位段控制
通过该位段就可以设置不同的优先级分组
据优先级分组函数可见,底层还是配置该寄存器的位值
本文核心内容:
每个中断都有一个对应的优先级寄存器,每个优先级寄存器占用8位,在STM32中仅使用了高4位。
当用上文的ARICR寄存器[10:8]位段设置好分组后,每个优先级寄存器会根据分组,将优先级寄存器的位分为高低两个位段,分别是抢占优先级和响应优先级。
我们配置的抢占优先级值和响应优先级值就会写在其对应的位段上。
根据NVIC_SetPriority函数跳转可见
底层就是配置8位的优先级寄存器
优先级配置方法
1.NVIC管里中断源优先级分组设置
void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)----------core-cm4 1435
设置总的优先级分组寄存器 --- 所有中断源优先级设置寄存器都会以此分组配置
此函数只需要设置一次,一般放在main函数
2.计算优先级编码
uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)------core-cm4 1592
设置具体的抢占优先级和响应优先级别值,参数1是分组值,参数2是抢占优先级值,参数3是响应优先级值
3.确定具体中断源
void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)-------------core-cm4 1550
将计算出来的优先级编码值,与具体某个中断源联系起来
4.使能NVIC响应通道
void NVIC_EnableIRQ(IRQn_Type IRQn) -------------core-cm4 1467
NVIC模块响应片上外设中断源的开关