LPCX2131模板提供了 许多UCOS中间件,其中有UART的代码,以下不明白,请指教下:
void UART1_Exception( void )
{
uint8 tIIR,temp,i;
OS_ENTER_CRITICAL();
while( ((tIIR = U1IIR)& 0x01) == 0) // 有中断未处理完,读取UIIR清除中断
{
switch (tIIR & 0x0E)
{
case 0x02: // THRE中断
for (i = 0; i < UART1_FIFO_LENGTH; i++) // 向发送FIFO填充数据
{
if (QueueRead(&temp, UART1SendBuf) == QUEUE_OK)
{
U1THR = temp;
}
else
{
U1IER = U1IER & (~0x02); // 队列空,则禁止发送中断
}
}
break;
.......
假设发送8个字符,而UART1_FIFO_LENGTH长度为16,那么去掉进入中断前发送掉的一个字符外,还有7个(先写入队列)在发送中断函数里面发送,for循环到第7次时候,队列已经读空,这个时候关闭中断。但是因为for循环终止于16,所以还要循环读8次,那么这8次都没有数据,重复在此浪费时间吗?不知道这个代码这样设计的目的是什么?求解。 |