void MY_NVIC_Init(u8 NVIC_PreemptionPriority, u8 NVIC_SubPriority, u8 NVIC_Channe
u8 NVIC_Group)
{
u32 temp;
MY_NVIC_PriorityGroupConfig(NVIC_Group);//设置分组
temp=NVIC_PreemptionPriority<<(4-NVIC_Group); //(4-NVIC_Group) 组0 左移4位 0位抢占 ,组1 左移3位 1位抢占,组2 左移2位 2位抢占,组3 左移1位 3位抢占,组4 左移0位,4位抢占
temp|=NVIC_SubPriority&(0x0f>>NVIC_Group);//(0x0f>>NVIC_Group)限定位 组0 1111 4位响应,组1 0111 3位响应 , 组2 0011 2位响应, 组3 0001 1位响应, 组4 0000,0位响应
temp&=0xf;//取低四位
//使能中断位(要清除的话,相反操作就 OK)
if(NVIC_Channel<32)NVIC->ISER[0]|=1<<NVIC_Channel;// ISER[0]的 bit0~bit31 分别对应中断 0~31
else NVIC->ISER[1]|=1<<(NVIC_Channel-32); //ISER[1]的 bit0~27 对应中断 32~59
NVIC->IP[NVIC_Channel]|=temp<<4;//设置响应优先级和抢断优先级
} |