还有1个问题,如果分组方式NVIC_PriorityGroup定了,例如设定NVIC_PriorityGroup_2,那么SystemHandlerPriority和外部中断的可以设定的抢占优先级都是0-3吧(NVIC_PriorityGroup_2这种分组方式对二者都生效)?
下面是万利扳子的lcd demo中的, 这里的优先级排序应该是 TIM2_IRQChannel > SystemHandler_SysTick > EXTI3_IRQChannel > EXTI4_IRQChannel 吧?
/* Configure the Priority Group to 2 bits */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/* enabling interrupt */ NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
/* Enable the EXTI3 Interrupt on PD.3 */ NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
/* Enable the EXTI4 Interrupt on PD.4 */ NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
/* Configure the SysTick handler priority */ NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 2, 0);
|