
STM32 ARM 嵌入式 NVIC_SetPriority (IRQn_Type IRQn, uint32_t priority)是怎么完成优先级设置的? 50
这个函数是怎么完成优先级设置的?
关于SHP[11]是怎么完成优先级设置的?
SysTick_IRQn=-1;
__NVIC_PRIO_BITS=4;
***************************************************************************************************************
static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
{
if(IRQn < 0) {
SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M3 System Interrupts */
else {
NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */
}
************************************************************************************************************** 展开
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel; //通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//优先级设置0 或者1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //优先级设置
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
NVIC_PriorityGroup_0:则只看NVIC_IRQChannelSubPriority 的值
NVIC_PriorityGroup_1:
NVIC_PriorityGroup_2:
NVIC_PriorityGroup_3:
NVIC_PriorityGroup_4:则只看NVIC_IRQChannelPreemptionPriority 的值