原创 LM3S一个较可靠的串口接收方法

2012-11-26 10:23 2028 22 22 分类: MCU/ 嵌入式 文集: 单片机与ARM

编写串口接收函数时

当通信速率很高,且单片机速度较慢时

如果接收函数写的不仔细就会发生数据没接收到的情况

下面的代码考虑到了每次对接收缓冲区的操作  每次进中断就读取缓冲区所有的数据 值得借鉴

//  UART2中断服务函数   
  void UART2_ISR(void)   
  {   
     char c;   
     unsigned long ulStatus;   
    
     ulStatus = UARTIntStatus(UART2_BASE, true);             //  读取当前中断状态   
     UARTIntClear(UART2_BASE, ulStatus);                     //  清除中断状态   
    
     if ((ulStatus & UART_INT_RX) || (ulStatus & UART_INT_RT))   //  若是接收中断或者   
     {                                                           //      接收超时中断   
         for (;;)   
         {   
             if (!UARTCharsAvail(UART2_BASE)) break;         //  若接收FIFO里无字符则跳出   
             c = UARTCharGetNB(UART2_BASE);                  //  从接收FIFO里读取字符   
    
             if (c == '\r')   
             {   
                 UARTCharPut(UART2_BASE, '\r');              //  回显回车换行   
                 UARTCharPut(UART2_BASE, '\n');   
                 RxEndFlag = true;                           //  接收结束标志置位   
                 break;   
             }   
    
             if (isprint(c))                                 //  若是可打印字符   
             {   
                 if (BufP  MAX_SIZE)   
                 {   
                     UARTCharPut(UART2_BASE, c);             //  回显   
                     RxBuf[BufP++] = c;   
                     RxBuf[BufP] = '\0';   
                 }   
             }   
         }   
     }   
  }
 
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
22
关闭 站长推荐上一条 /1 下一条