Cortex-M0 LPC1114中斷優(yōu)先級(jí)怎么設(shè)置
掃描二維碼
隨時(shí)隨地手機(jī)看文章
LPC1114的中斷,由中斷控制模塊NVIC控制。一共32個(gè)中斷,每個(gè)中斷的優(yōu)先級(jí)可編程為 0~3 四種級(jí)別。級(jí)別越高對(duì)應(yīng)的優(yōu)先級(jí)越低。因此,級(jí)別0 是最高的中斷優(yōu)先級(jí)。
設(shè)置中斷優(yōu)先級(jí)的函數(shù),CMISIS已經(jīng)寫好,并嵌入到了編譯器中,例如,我們用KEIL開發(fā)的話,設(shè)置中斷優(yōu)先級(jí)的函數(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ù)有兩個(gè)參數(shù),IRQn是指你要設(shè)置的中斷向量,priority是中斷優(yōu)先級(jí),優(yōu)先級(jí)可以是0 1 2 3四個(gè)數(shù),0的優(yōu)先級(jí)最大,3的優(yōu)先級(jí)最小。假設(shè)你要設(shè)置GPIO1中斷的優(yōu)先級(jí)最高,那么就是:
NVIC_SetPriority(EINT1_IRQn, 0);
這時(shí),有人會(huì)問,”EINT1_IRQn”從哪里來(lái)?答:這個(gè)可以在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,/*!