打印

关于ZLG UCOS中间件的UART函数请教

[复制链接]
6545|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jlinkv8|  楼主 | 2011-8-4 19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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次都没有数据,重复在此浪费时间吗?不知道这个代码这样设计的目的是什么?求解。

相关帖子

沙发
john_lee| | 2011-8-7 10:54 | 只看该作者
应该在U1IER = U1IER & (~0x02); 下面加一个break;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

15

帖子

1

粉丝