cortex m0 lpc1114的NVIC中断如何使用
扫描二维码
随时随地手机看文章
LPC1114单片机的NVIC中断函数,有开中断、关中断、设置优先级、挂起等操作函数。这些函数位于core_cm0.h文件里面。比如开中断的函数如下:
/**briefEnableExternalInterruptThefunctionenablesadevice-specificinterruptintheNVICinterruptcontroller.param[in]IRQnExternalinterruptnumber.Valuecannotbenegative.*/__STATIC_INLINEvoidNVIC_EnableIRQ(IRQn_TypeIRQn){NVIC->ISER[0]=(1<<((uint32_t)(IRQn)&0x1F));}
/**/里面的注释告诉我们,这是一个中断函数,函数的功能是允许一个中断,也就是开中断的意思。
比如我们要开P1口的中断,可以这样使用这个函数:NVIC_EnableIRQ(EINT1_IRQn);
该函数里面,NVIC_EnableIRQ是函数名,EINT1_IRQn是参数,表示P1口的中断,这个参数可以在头文件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,/*!可以看到,共有32种中断,在使用的时候,你要开什么中断,就用NVIC开中断函数把对应的中断打开。
开了中断以后,中断函数怎么写呢?
例如P1口的中断函数这样写:
voidPIOINT1_IRQHandler(){//进中断以后执行的代码}为什么P1口的中断函数名称是PIOINT1_IRQHandler,这个其实在startup_lpc11xx.s文件中已经定义好了:
;ExternalInterruptsDCDWAKEUP_IRQHandler;16+0:WakeupPIO0.0DCDWAKEUP_IRQHandler;16+1:WakeupPIO0.1DCDWAKEUP_IRQHandler;16+2:WakeupPIO0.2DCDWAKEUP_IRQHandler;16+3:WakeupPIO0.3DCDWAKEUP_IRQHandler;16+4:WakeupPIO0.4DCDWAKEUP_IRQHandler;16+5:WakeupPIO0.5DCDWAKEUP_IRQHandler;16+6:WakeupPIO0.6DCDWAKEUP_IRQHandler;16+7:WakeupPIO0.7DCDWAKEUP_IRQHandler;16+8:WakeupPIO0.8DCDWAKEUP_IRQHandler;16+9:WakeupPIO0.9DCDWAKEUP_IRQHandler;16+10:WakeupPIO0.10DCDWAKEUP_IRQHandler;16+11:WakeupPIO0.11DCDWAKEUP_IRQHandler;16+12:WakeupPIO1.0DCDCAN_IRQHandler;16+13:CANDCDSSP1_IRQHandler;16+14:SSP1DCDI2C_IRQHandler;16+15:I2CDCDTIMER16_0_IRQHandler;16+16:16-bitCounter-Timer0DCDTIMER16_1_IRQHandler;16+17:16-bitCounter-Timer1DCDTIMER32_0_IRQHandler;16+18:32-bitCounter-Timer0DCDTIMER32_1_IRQHandler;16+19:32-bitCounter-Timer1DCDSSP0_IRQHandler;16+20:SSP0DCDUART_IRQHandler;16+21:UARTDCDUSB_IRQHandler;16+22:USBIRQDCDUSB_FIQHandler;16+24:USBFIQDCDADC_IRQHandler;16+24:A/DConverterDCDWDT_IRQHandler;16+25:WatchdogTimerDCDBOD_IRQHandler;16+26:BrownOutDetectDCDFMC_IRQHandler;16+27:IP2111FlashMemoryControllerDCDPIOINT3_IRQHandler;16+28:PIOINT3DCDPIOINT2_IRQHandler;16+29:PIOINT2DCDPIOINT1_IRQHandler;16+30:PIOINT1DCDPIOINT0_IRQHandler;16+31:PIOINT0总结:NVIC的函数使用,就是这么简单,KEIL已经给我们写好,我们直接使用即可!