LPC2131 外部中断问题
时间:10-02
整理:3721RD
点击:
请问,我用了外部中断 为什么中断结束后就无法返回主程序。 我引脚,寄存器全部清零过了。void __irq ENIT1(void)//用于关闭闹钟
{
delay(10);
if((IO0PIN & KEY1) == 0)
{
while((IO0PIN & KEY1) == 0);
IO0CLR = BEEP;
}
EXTINT = 0x02;
VICVectAddr = 0x00;
}
void ENIT1Init(void)//用于关闭闹钟
{
EXTMODE |= 0x02;
EXTPOLAR = 0x00;
VICIntSelect = 0x00;
VICVectCntl1 = 0x2f;
VICVectAddr1 = (uint32)ENIT1;
VICIntEnable |= 0x00008000;
}
改成
{
delay(10);
if((IO0PIN & KEY1) == 0)
{
while((IO0PIN & KEY1) == 0);
IO0CLR = BEEP;
}
EXTINT = 0x02;
VICVectAddr = 0x00;
}
void ENIT1Init(void)//用于关闭闹钟
{
EXTMODE |= 0x02;
EXTPOLAR = 0x00;
VICIntSelect = 0x00;
VICVectCntl1 = 0x2f;
VICVectAddr1 = (uint32)ENIT1;
VICIntEnable |= 0x00008000;
}
是不是还有中断标志位没有清零?
是不是使用电平触发中断的方式?这样只要按键按下没放开,中断一返回,就又马上中断了;
可以使用电平变化触发的方式避免这个情况产生;
在中断例程里面,不要做延时、循环、等待这些事,中断只能处理必须处理的事,延时、循环、等待应该放到正常程序内进行
把
- EXTINT = 0x02;
- VICVectAddr = 0x00;
改成
- EXTINT |= 0X01; //中断标志清空
- VICVectAddr =0; //硬件中断复位