LPC1768只有P0和P2有中断功能,这个两个端口共用中断线3,可以配置上升沿触发或者下降沿触发。什么是上升沿?什么是下降沿?
上升沿是低电平到高电平的过程。
下降沿是高电平到低电平的过程
从原理图当中可以看出,要设置为下降沿触发。
void KEY_Config(void){
//第一步 使能GPIO时钟功率,只有使能了GPIO时钟功率,才能有效操作Gpio寄存器。
Chip_GPIO_Init(LPC_GPIO);//打开GPIO时钟功率
//第二步 设置GPIO为普通GPIO功能,关闭上下拉。 Chip_IOCON_PinMux(LPC_IOCON, 2, 10, IOCON_MODE_INACT, IOCON_FUNC0);//设置P2.0为GPIO功能
Chip_IOCON_PinMux(LPC_IOCON, 2, 11, IOCON_MODE_INACT, IOCON_FUNC0);
Chip_IOCON_PinMux(LPC_IOCON, 2, 12, IOCON_MODE_INACT, IOCON_FUNC0);
Chip_IOCON_PinMux(LPC_IOCON, 2, 25, IOCON_MODE_INACT, IOCON_FUNC0);
Chip_IOCON_PinMux(LPC_IOCON, 2, 26, IOCON_MODE_INACT, IOCON_FUNC0);
Chip_IOCON_PinMux(LPC_IOCON, 2, 27, IOCON_MODE_INACT, IOCON_FUNC0);
Chip_IOCON_PinMux(LPC_IOCON, 2, 28, IOCON_MODE_INACT, IOCON_FUNC0);
Chip_IOCON_PinMux(LPC_IOCON, 2, 29, IOCON_MODE_INACT, IOCON_FUNC0);
//第三步 设置GPIO为输入模式,因为是要读取外部电路电平值。
Chip_GPIO_SetPinDIR(LPC_GPIO,2, 10, false);//设置输入模式
Chip_GPIO_SetPinDIR(LPC_GPIO,2, 11, false);//设置输入模式
Chip_GPIO_SetPinDIR(LPC_GPIO,2, 12, false);//设置输入模式
Chip_GPIO_SetPinDIR(LPC_GPIO,2, 25, false);//设置输入模式
Chip_GPIO_SetPinDIR(LPC_GPIO,2, 26, false);//设置输入模式
Chip_GPIO_SetPinDIR(LPC_GPIO,2, 27, false);//设置输入模式
Chip_GPIO_SetPinDIR(LPC_GPIO,2,28, false);//设置输入模式
Chip_GPIO_SetPinDIR(LPC_GPIO,2, 29, false);//设置输入模式
//第四步 P2.10,P2.11,设置下降沿触发
Chip_GPIOINT_SetIntFalling(LPC_GPIOINT, 2, 0x03 << 10);//P2.10,P2.11,设置下降沿触发
//第五步 //使能中断线3
NVIC_EnableIRQ(EINT3_IRQn);//使能中断
}
/************************************************************************************************
函数名:void EINT3_IRQHandler(void)
函数功能:中断服务函数
参数:无
返回值:无
*************************************************************************************************/
void EINT3_IRQHandler(void)
{
if(Chip_GPIOINT_GetStatusFalling(LPC_GPIOINT,2)>>10&0x01){//判断是否为P2.10发生下降沿触发标志
Chip_GPIOINT_ClearIntStatus(LPC_GPIOINT, 2, 1 << 10);//清除中断标志
LED4_ON(1);
}
else if(Chip_GPIOINT_GetStatusFalling(LPC_GPIOINT,2)>>11&0x01){
Chip_GPIOINT_ClearIntStatus(LPC_GPIOINT, 2, 1 << 1);//清除中断标志
LED5_ON(1);
}
}
此内容由EEWORLD论坛网友cxmdz原创,如需转载或用于商业用途需征得作者同意并注明出处