正好今天学习了外部中断,也尝试上升下降沿都触发。同时考虑一个中断线上可能有同时多个中断源同时激发中断(不知是否会有这种情况,也不知道实际硬件是否允许出现这种情况,只是假设),为了避免干扰,加了些控制。代码大家看看是否可行。
[mw_shl_code=c,true]void EXTI4_IRQHandler(void)
{
// 用于确定上一次的状态
static bool lIsKeyOn = FALSE;
Wait_ms(10);
if(EXTI_GetITStatus(EXTI_Line4) == RESET)
return;
if(KEY0 == RESET) // 低电平有效
{
if(lIsKeyOn == FALSE)
{
lIsKeyOn = TRUE;
printf("Signal0 -> ON\r\n");
ExINT_Signal0_On(); // 自定义在按下时的处理方法
}
}
else
{
if(lIsKeyOn == TRUE)
{
lIsKeyOn = FALSE;
printf("Signal0 -> OFF\r\n");
ExINT_Signal0_Off(); // 自定义在抬起时的处理方法
}
}
// ... 其他相同中断源的中断处理
EXTI_ClearITPendingBit(EXTI_Line4); //清除LINE4上的中断标志位
}
[/mw_shl_code]
|