Cortex-M0 LPC1114中斷優(yōu)先級怎么設(shè)置
LPC1114的中斷,由中斷控制模塊NVIC控制。一共32個中斷,每個中斷的優(yōu)先級可編程為 0~3 四種級別。級別越高對應(yīng)的優(yōu)先級越低。因此,級別0 是最高的中斷優(yōu)先級。
設(shè)置中斷優(yōu)先級的函數(shù),CMISIS已經(jīng)寫好,并嵌入到了編譯器中,例如,我們用KEIL開發(fā)的話,設(shè)置中斷優(yōu)先級的函數(shù)位于core_cm0.h文件當(dāng)中,函數(shù)如下所示:
/**briefSetInterruptPriorityThefunctionsetsthepriorityofaninterrupt.noteTheprioritycannotbesetforeverycoreinterrupt.param[in]IRQnInterruptnumber.param[in]priorityPrioritytoset.*/__STATIC_INLINEvoidNVIC_SetPriority(IRQn_TypeIRQn,uint32_tpriority){if(IRQn<0){SCB->SHP[_SHP_IDX(IRQn)]=(SCB->SHP[_SHP_IDX(IRQn)]&~(0xFF<<_BIT_SHIFT(IRQn)))|(((priority<<(8-__NVIC_PRIO_BITS))&0xFF)<<_BIT_SHIFT(IRQn));}else{NVIC->IP[_IP_IDX(IRQn)]=(NVIC->IP[_IP_IDX(IRQn)]&~(0xFF<<_BIT_SHIFT(IRQn)))|(((priority<<(8-__NVIC_PRIO_BITS))&0xFF)<<_BIT_SHIFT(IRQn));}}
從上面函數(shù)可以看出,該函數(shù)有兩個參數(shù),IRQn是指你要設(shè)置的中斷向量,priority是中斷優(yōu)先級,優(yōu)先級可以是0 1 2 3四個數(shù),0的優(yōu)先級最大,3的優(yōu)先級最小。假設(shè)你要設(shè)置GPIO1中斷的優(yōu)先級最高,那么就是:
NVIC_SetPriority(EINT1_IRQn, 0);
這時,有人會問,”EINT1_IRQn”從哪里來?答:這個可以在LPC11xx.h文件當(dāng)中找到,如下所示:
/**==========================================================================*----------InterruptNumberDefinition-----------------------------------*==========================================================================*/typedefenumIRQn{/******Cortex-M0ProcessorExceptionsNumbers***************************************************/Reset_IRQn=-15,/*!<1ResetVector,invokedonPowerupandwarmreset*/NonMaskableInt_IRQn=-14,/*!<2NonmaskableInterrupt,cannotbestoppedorpreempted*/HardFault_IRQn=-13,/*!<3HardFault,allclassesofFault*/SVCall_IRQn=-5,/*!<11SystemServiceCallviaSVCinstruction*/PendSV_IRQn=-2,/*!<14Pendablerequestforsystemservice*/SysTick_IRQn=-1,/*!<15SystemTickTimer*//******LPC11CxxorLPC11xxSpecificInterruptNumbers*******************************************************/WAKEUP0_IRQn=0,/*!