[ZLG-ARM] 关于UART中间件代码的问题

[复制链接]
2510|2
 楼主| jlinkv8 发表于 2011-8-4 19:57 | 显示全部楼层 |阅读模式
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次都没有数据,重复在此浪费时间吗?不知道这个代码这样设计的目的是什么?求解。
BSMGood 发表于 2011-8-5 19:34 | 显示全部楼层
老师要我做UART0中断方式的串口通信呢,ZLG的程序有问题,所以正在纠结呢,不知道怎么用
bit6019 发表于 2011-8-12 20:51 | 显示全部楼层
不懂帮顶
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

15

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部