Cortex-M3 (NXP LPC1788)之外部中断操作

        要使用LPC1788的外部中断,要进行两部分的操作。由于外部中断的管脚采用I/O复用的形式,显然我们首先要对管脚进行配置,使其工作在外部中断输入的模式。其次,我们需要配置中断相关的寄存器包括中断使能以及中断的触发方式等。

        由于我们使用的是外部中断0,查阅数据手册,其GPIO管脚为P2_10,为此我们设置IOCON_P2_10寄存器的FUNC字段,设置成001即为EINT0模式。 配置完引脚后,还需要继续配置具体的中断功能。我们需要打开中断使能,设置ISER相应位;还要配置中断的触发方式如电平触发和边沿触发,相关寄存器为EXTMODE和EXTPOLAR;中断触发以后会将外部中断标志寄存器EXTINT相应位置位,这将会向NVIC提交中断请求,如果管脚中断使能,则会产生中断。中断响应后必须将EXTINT中的该位清零,否则不能产生下一次中断。

        中断入口向量的地址在启动文件中定义,对于外部中断0,其标号为EINT0_IRQHandler。开发板上的电路图如图1所示 

EINTO

图1:按键SW6控制GPIO_P2_10的EINT0

        按键按下时,GPIO_P2_10是低电平,没有按下为高电平。配置EINT0的中断触发方式为低电平触发,在中断函数中熄灭LED。在主函数中一直点亮。程序的效果为按下SW6,LED灯熄灭。松开则一直保持亮。程序如下:

#define rFIO1DIR		(*(volatile unsigned*)0x20098020)
#define rFIO1MASK 		(*(volatile unsigned*)0x20098030)
#define rFIO1PIN		(*(volatile unsigned*)0x20098034)
#define rFIO1SET		(*(volatile unsigned*)0x20098038)
#define rFIO1CLR		(*(volatile unsigned*)0x2009803c)

#define	rIOCON_P2_10	        (*(volatile unsigned *)0x4002C128)
#define	rIOIntStatus	        (*(volatile unsigned *)0x40028080)
#define rIO2IntEnF		(*(volatile unsigned *)0x400280B4)
#define rIO2IntClr		(*(volatile unsigned *)0x400280AC)

#define rEXTINT			(*(volatile unsigned *)0x400FC140)
#define rEXTMODE		(*(volatile unsigned *)0x400FC148)
#define rEXTPOLAR		(*(volatile unsigned *)0x400FC14C)

#define rISER0			(*(volatile unsigned *)0xE000E100)
#define rIRP4			(*(volatile unsigned *)0xE000E410)

void EINT0_IRQHandler()
{
	rEXTINT |= (0x1<<0);//中断产生之后必须清除该位
	
	rFIO1PIN |= (1<<18);
}

void GPIO_INIT()
{
	rFIO1DIR |= (0x1<<18);//P1.18设置为输出,控制LED
	rIOCON_P2_10 = (rIOCON_P2_10&(~0x7))|(0x1<<0);//配置FUNC字段为EINT0模式
}

void EINT_INIT()
{
	rEXTMODE &= ~(0x1<<0);//配置成低电平触发
	rEXTPOLAR &= ~(0x1<<0);
	
	rISER0 = (0x1<<18);//打开EINT0中断使能
}

int main(void)
{
	GPIO_INIT();
	EINT_INIT();
	while(1)
	{
		rFIO1PIN &= ~(1<<18);
	}
}

void SystemInit (void)
{
}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值