从串口输入数据,通过中断方式接收,并且根据接收的数字决定LED的闪烁情况。
问题:我未输入的情况下,主程序正常进行循环(已用LED测试),一旦我从串口输入数据后,循环立即终止,而且不进入到串口中断服务函数中,请问这是为什么?
void __irq UART0_RxInt()
{ char a;
INTMSK=0xffffffff;
a=UTXH0;
if(a==1)
{
GPFDAT=0;
delay(1000);
GPFDAT=0xff;
delay(1000);
}
ClearPending(BIT_UART0);
ClearSubPending(BIT_SUB_RXD0);
EnableIrq(BIT_UART0);
EnableSubIrq(BIT_SUB_RXD0);}
void Ini
tint()
{
ClearPending(BIT_UART0);
ClearPending(BIT_SUB_RXD0);
EnableIrq(BIT_UART0);
EnableSubIrq(BIT_SUB_RXD0);
pISR_UART0=(unsigned)UART0_RxInt;
}
int main()
{
GPFCON=0x5500;
GPFUP=0;
GPFDAT=0xff;
ULCON0=0x03;
UFCON0=0x06;
UMCON0=0x00; //高电平触发
UCON0=0x05;
UBRDIV0=26;
InitInt();
while(1)
{ }
return 0;
}
你是否确定EnableIrq和EnableSubIrq可以在中断例程里面使用?
如果你在中断例程里面又将中断打开,而且实际上没有将引起中断的数据处理掉,是不是中断一返回,马上又会重新产生中断,在中断中死循环呢?
除非是为了调试;建议不要在中断中使用延时,设计中断的缘由主要是节约反应时间,如果你都在中断里使用延时了,就严重背离了使用中断的目标了。
一周热门 更多>