外部中断与GPIO中断
学习LPC1768已经有一段时间了,遇到的第一个问题便是外部中断和GPIO中断。
本来一直认为,外部中断就是GPIO中断,现在才知道,原来GPIO中断只是外部中断的一部分。GPIO中断指的是通用IO口引起的中断。LPC1768的P0和P2口就是GPIO中断,GPIO中断有自己的中断通道,只是在LPC1768中和外部中断3共用一个通道而已。所以,他们不用配置为外部中断,只要配置成GPIO口,并且方向为输入,在配置一下中断模式和中断极性,当然,也需要使能外部中断3。
而外部中断INT0~3是和引脚2.10~2.13一一对应,2.10~2.13的引脚第二功能就是外部中断,使用外部中断需要配置外部中断的中断模式和中断极性。
这样的话,P2.10~P2.13既可以使用外部中断,也可以使用GPIO中断,只是配置的方法不一样而已。
下面是两段程序,目的都一样,用中断来得到P2.10引脚上的按键触发。
第一个是GPIO中断:
void BUTTON_init(void)
{
FIO2DIR1 &= ~(1 << 2); /* 将P2.10配置为输入 */
IO2IntEnF |= (1 << 10); /* 将P2.10的GPIO中断配置为下降沿中断 */
NVIC_EnableIRQ(EINT3_IRQn); /* 使能外部中断3*/
}
第二个是外部中断:
void BUTTON_init ( void )
{
PINSEL_P2L = 0x00100000; /* 将P2.10脚设置为EINT0即第二功能 */
IO2IntEnF = 0x200; /* 设置为下降沿触发 */
EXTMODE = 1; / * 外部中断模式选择为边沿触发 */
EXTPOLAR = 0; /* 外部中断极性设置,此处选默认的低电平或下降沿 */
NVIC_EnableIRQ(EINT0_IRQn); /* 使能外部中断0 */
}
中断程序一个是外部中断0,一个是外部中断3。
但是都要注意的是,进入中断程序后要清除中断标志位。