2.1.3 外部中断
外部中断EINT0~EINT3,对应中断编号34~37,分配在管脚P2.10~P2.13,第二个复用功能。
外部中断可被配置成上升沿触发,下降沿触发或者电平触发。
注意:外部中断的中断状态寄存器,在初始化或任何时候更改模式寄存器(更改触发方式)也需要被清零。
在中断服务程序中,如果是沿触发,软件直接对中断状态寄存器清零,并立即有效;如果是电平触发,则清零的操作只在中断管脚的电平无效时才被执行。
初始化与配置:
1. 配置中断模式: 电平触发还是沿触发
2. 配置中断极性: 低电平/下降沿,高电平/上升沿
3. 清除中断标志位
4. 使能NVIC的外部中断
代码如下:
void Board_EINT_Init(void)
{
// 配置中断模式: 0=电平触发; 1=沿触发
LPC_SYSCTL->EXTMODE = (0 << ((uint32_t)(EINT_0)));
// 配置中断极性: 0=低电平/下降沿; 1=高电平/上升沿
LPC_SYSCTL->EXTPOLAR = (0 << ((uint32_t)(EINT_0)));
// 更改EXT模式后必须手动清除标志位
LPC_SYSCTL->EXTINT = (1 << ((uint32_t)(EINT_0)));
// 配置中断优先级
// 清除中断挂起标志位
NVIC_ClearPendingIRQ(EINT0_IRQn);
// 使能中断
NVIC_EnableIRQ(EINT0_IRQn);
}
中断服务程序中清除中断标志位即可。代码如下:
void EINT0_IRQHandler(void)
{
// TODO: 按键消抖
// 清除中断标志位.
LPC_SYSCTL->EXTINT = (1 << ((uint32_t)(EINT_0)));
if(pEINT0_ISR != 0) pEINT0_ISR();
}