当前位置:首页 > 单片机 > 单片机
[导读]LPC1114的中断,由中断控制模块NVIC控制。一共32个中断,每个中断的优先级可编程为 0~3 四种级别。级别越高对应的优先级越低。因此,级别0 是最高的中断优先级。设置中断优先级的函数,CMISIS已经写好,并嵌入到了编

LPC1114的中断,由中断控制模块NVIC控制。一共32个中断,每个中断的优先级可编程为 0~3 四种级别。级别越高对应的优先级越低。因此,级别0 是最高的中断优先级。

设置中断优先级的函数,CMISIS已经写好,并嵌入到了编译器中,例如,我们用KEIL开发的话,设置中断优先级的函数位于core_cm0.h文件当中,函数如下所示:

/**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));}}

从上面函数可以看出,该函数有两个参数,IRQn是指你要设置的中断向量,priority是中断优先级,优先级可以是0 1 2 3四个数,0的优先级最大,3的优先级最小。假设你要设置GPIO1中断的优先级最高,那么就是:

NVIC_SetPriority(EINT1_IRQn, 0);

这时,有人会问,”EINT1_IRQn”从哪里来?答:这个可以在LPC11xx.h文件当中找到,如下所示:

/**==========================================================================*----------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,/*!


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭