这个函数是怎么完成优先级设置的?

NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);
关于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 */
}
**************************************************************************************************************

慕妹3146593
浏览 145回答 2
2回答

烙印99

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NVIC_InitStructure.NVIC_IRQChannel&nbsp;=&nbsp;EXTI3_IRQChannel;&nbsp;&nbsp;&nbsp;//通道&nbsp;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority&nbsp;=&nbsp;0;//优先级设置0&nbsp;或者1&nbsp;NVIC_InitStructure.NVIC_IRQChannelSubPriority&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;//优先级设置&nbsp;NVIC_InitStructure.NVIC_IRQChannelCmd&nbsp;=&nbsp;ENABLE;&nbsp;NVIC_Init(&NVIC_InitStructure);&nbsp;、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、NVIC_PriorityGroup_0:则只看NVIC_IRQChannelSubPriority&nbsp;的值NVIC_PriorityGroup_1:NVIC_PriorityGroup_2:NVIC_PriorityGroup_3:NVIC_PriorityGroup_4:则只看NVIC_IRQChannelPreemptionPriority&nbsp;的值

慕尼黑8549860

正如你所见,systick计时器是Cortex-M3的内核外设,它的中断号小于0,所以它的优先级寄存器在SHP。其他的外部外设的中断号大于等于0,所以它的优先级寄存器在IP
打开App,查看更多内容
随时随地看视频慕课网APP