NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 这个懂,是两个优先组的优先级配置,2bit,代表每个组有2位,则优先级由0~3
下面就不明白了!既然PreemptionPriority和SubPriority代表两个不同优先级的组(PreemptionPriority高于SubPriority),那么这个配置中TIM3_IRQ在一个组里面优先级是0,另一个里面优先级是1,怎么是这样???还有例程中两个组全填0,也有全填1的,按理说这个中断仅在PreemptionPriority中填0就是最高了啊(忽略硬件优先级)为啥还要在SubPriority里填个1?
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
我不懂的就是: 1.同一个中断在两个组里都配置了优先级有意义么? 2.假设PreemptionPriority组有一个低级中断服务程序在运行,当来了一个本组的高级中断是否可以打断它?同理SubPriority的高级中断能否打断本身的低级中断,PreemptionPriority组是否可以打断SubPriority的中断? |
|