3 个中断使能,1 个 UART 到 IRQ(串行端口),Timer1 到 IRQ(控制闪烁的 LED),Timer0 到 FIQ(生成输出步进信号)。
第一个 FIQ 处理程序为空:
void FIQ_HANDLER(void) __fiq
{
if(FIQSTA & TIMER0)
{
T0CLR = 0;
break;
}
}
IRQ 处理程序:
void IRQ_HANDLER(void) __irq
{
if(IRQSTA & TIMER1)
{
T1CLR = 0;
MAKE_LED_FLASH();
break;
}
if(IRQSTA & UART)
{
BLAH_BLAH_BLAH();
break;
}
}
上面的代码运行良好,LED 闪烁、UART 响应和其他功能都很好。但是在我向 FIQ 处理程序添加了一些代码之后,主要是设置一个计数器(uint16)并让 IO 变为高/低:
void FIQ_HANDLER(void) __fiq
{
if(FIQSTA & TIMER0)
{
if(cts>0)
{
IO_BLAH_BLAH_BLAH();
cts--;
}
T0CLR = 0;
break;
}
}
CPU 将在启动后几秒钟(约 2 秒)锁定自身,然后 LED 停止闪烁,UART 无响应。甚至变量 cts 在开始时也设置为 0(因此无法输入 if())。
我首先认为这可能是因为 timer0 设置得太快(这样更多的 FIQ 堆叠在一起而更少被清除)。所以我将 timer0 设置为不那么频繁。而且..好吧,启动时似乎没问题,LED一直闪烁......但是如果我通过串行端口(UART)发送一些字符,系统会立即再次锁定。-_-!怎么了?
请,如果我错过了要写在这里的任何重要信息,请告诉我。