目录
? ?NVIC中断优先级管理
1.NVIC中断优先级分组
2.中断优先级分组函数
3.中断参数初始化函数
4.中断优先级设置步骤
? ?NVIC中断优先级管理
1.NVIC中断优先级分组
中断抢占优先级&响应优先级区别:
(1)高抢可打断进行中的低抢;
(2)同抢占优先级,高响不能打断低响;
(3)同抢占优先级,高响优先执行;
(4)同抢占,响应优先级,先发生的先执行。
2.中断优先级分组函数
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
{
assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
SCB->AIRCR=AIRCR_VECTKEY_MASK|NVIC_PriorityGroup;
}
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
3.中断参数初始化函数
typedef struct
{
uint8_t NVIC_IRQChannel;设置中断通道
uint8_t NVIC_IRQChannelPreemptionPriority;设置响应优先级
uint8_t NVIC_IRQChannelSubPriority;//设置抢占优先级
FunctionalState NVIC_IRQChannelCmd;//使能
}NVIC_InitTypeDef;
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口1中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级为1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;//子优先级位2
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABlE;//IRQ通道使能
NVIC_Init(&NVIC_InitStructure);//根据上面指定的参数初始化NVIC寄存器
4.中断优先级设置步骤
(1)先设置中断优先级分组(整个系统执行过程中,只设置一次中断分组);
(2)针对每个中断,设置对应的抢占优先级与响应优先级;
(3)如需挂起/解挂,查看中断当前激活状态,分别调用相关函数即可。
|