要运用LPC1788的外部中止,要进行两部分的操作。咱们外部中止的管脚选用I/O复用的方法,明显咱们首要要对管脚进行装备,使其作业在外部中止输入的形式。其次,咱们需求装备中止相关的寄存器包含中止使能以及中止的触发方法等。
咱们咱们运用的是外部中止0,查阅数据手册,其GPIO管脚为P2_10,为此咱们设置IOCON_P2_10寄存器的FUNC字段,设置成001即为EINT0形式。 装备完引脚后,还需求继续装备详细的中止功用。咱们需求翻开中止使能,设置ISER相应位;还要装备中止的触发方法如电平触发和边缘触发,相关寄存器为EXTMODE和EXTPOLAR;中止触发今后会将外部中止标志寄存器EXTINT相应方位位,这将会向NVIC提交中止请求,假如管脚中止使能,则会发生中止。中止呼应后有必要将EXTINT中的该位清零,不然不能发生下一次中止。
中止进口向量的地址在发动文件中界说,关于外部中止0,其标号为EINT0_IRQHandler。开发板上的电路图如图1所示
图1:按键SW6操控GPIO_P2_10的EINT0
按键按下时,GPIO_P2_10是低电平,没有按下为高电平。装备EINT0的中止触发方法为低电平触发,在中止函数中平息LED。在主函数中一向点亮。程序的作用为按下SW6,LED灯平息。松开则一向坚持亮。程序如下:
- #definerFIO1DIR(*(volatileunsigned*)0x20098020)
- #definerFIO1MASK(*(volatileunsigned*)0x20098030)
- #definerFIO1PIN(*(volatileunsigned*)0x20098034)
- #definerFIO1SET(*(volatileunsigned*)0x20098038)
- #definerFIO1CLR(*(volatileunsigned*)0x2009803c)
- #definerIOCON_P2_10(*(volatileunsigned*)0x4002C128)
- #definerIOIntStatus(*(volatileunsigned*)0x40028080)
- #definerIO2IntEnF(*(volatileunsigned*)0x400280B4)
- #definerIO2IntClr(*(volatileunsigned*)0x400280AC)
- #definerEXTINT(*(volatileunsigned*)0x400FC140)
- #definerEXTMODE(*(volatileunsigned*)0x400FC148)
- #definerEXTPOLAR(*(volatileunsigned*)0x400FC14C)
- #definerISER0(*(volatileunsigned*)0xE000E100)
- #definerIRP4(*(volatileunsigned*)0xE000E410)
- voidEINT0_IRQHandler()
- {
- rEXTINT|=(0x1<<0);//中止发生之后有必要铲除该位
- rFIO1PIN|=(1<<18);
- }
- voidGPIO_INIT()
- {
- rFIO1DIR|=(0x1<<18);//P1.18设置为输出,操控LED
- rIOCON_P2_10=(rIOCON_P2_10&(~0x7))|(0x1<<0);//装备FUNC字段为EINT0形式
- }
- voidEINT_INIT()
- {
- rEXTMODE&=~(0x1<<0);//装备成低电平触发
- rEXTPOLAR&=~(0x1<<0);
- rISER0=(0x1<<18);//翻开EINT0中止使能
- }
- intmain(void)
- {
- GPIO_INIT();
- EINT_INIT();
- while(1)
- {
- rFIO1PIN&=~(1<<18);
- }
- }
- voidSystemInit(void)
- {
- }