|
我用外部中断来控制led等,按下一个键对应的灯亮或灭
EINT0 1 2都好使,但EINT4就没反应了,下面是源代码,向大家求助!
/************KEY 中断控制LED BY WAL ****************
4 个用户按键
四个输入引脚:
EINT0 -----( GPF0 )----INPUT---K4
EINT2 -----( GPF2 )----INPUT---K3
EINT4 -----( GPF4 )----INPUT---K2
EINT1 -----( GPF1 )----INPUT---K1
****************************************************/
void __irq EINT_KEY(void)
{
//清中断,向对应位写1 可清0。
U32 a,b,c;
a = rSRCPND;
rSRCPND = a;
b = rINTPND;
rINTPND = b;
c = rEINTPEND;
rEINTPEND = c;
//判断那个按键被按下,控制对应的LED 状态
switch(b)
{
case 0x1://k4
Uart_Printf("4\n");
if(rGPBDAT & 0x020)//GPBDAT5==1
rGPBDAT&=0xfdf;
else
rGPBDAT|=0x020;
break;
case 0x2://k1
Uart_Printf("1\n");
if(rGPBDAT & 0x040)//GPBDAT6==1
rGPBDAT&=0xfbf;
else
rGPBDAT|=0x040;
break;
case 0x4://k3
Uart_Printf("3\n");
if(rGPBDAT & 0x080)//GPBDAT7==1
rGPBDAT&=0xf7f;
else
rGPBDAT|=0x080;
break;
case 0x10://k2
//if(c&0x10)
Uart_Printf("2\n");
if(rEINTPEND&(1<<4))
{
Uart_Printf("22\n");
if(rGPBDAT & 0x100)//GPBDAT8==1
rGPBDAT&=0xeff;
else
rGPBDAT|=0x100;
}
break;
default:
Led_Display(0xf);
break;
}
}
/**************外部中断初始化by wal************/
void EINT_INIT(void)
{
rSRCPND = 0x17;//清除除EINT0 1 2 4 以外中断请求
rINTMSK = 0xffffffe8;//屏蔽除EINT0 1 2 4 以外的中断源
rEINTMASK = 0xffffef;
rEXTINT0 = 0x22222;//设置EINT0 1 2 3 4下降沿触发
pISR_EINT0 = pISR_EINT1 =pISR_EINT2 =pISR_EINT4_7= (U32)EINT_KEY;
}
|
|