Cortex-M3 (NXP LPC1788)之外部中断操作
时间:11-19
来源:互联网
点击:
要使用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)
- {
- }
Cortex-M3NXPLPC1788外部中 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)