找回密码
 注册
搜索
查看: 780|回复: 1

[讨论] 44b0串口的Overrun Error在什么条件下发生?该如何处理?

[复制链接]
发表于 2006-4-15 22:40:00 | 显示全部楼层 |阅读模式
以下代码是否正确,请指点,谢谢!
void __irq OnUerr01Interrupt()
{
    unsigned char ch;
    unsigned int  ec;
    ec = rUERSTAT0;
/* channel 0*/
    if (ec != 0)
    {
        if ((ec&0x8)!= 0)
        {
      UART_sendString(UART_CH0, "\nUART0: BREAK signal.\n");
     }
        else if ((ec&0x4)!= 0)
        {
      UART_sendString(UART_CH0, "\nUART0: Frame error.\n");
        }
        else if ((ec&0x2)!= 0)
        {
      UART_sendString(UART_CH0, "\nUART0: Parity error.\n");
        }
        else if ((ec&0x1)!= 0)
        {
         UART_sendString(UART_CH0, "UART0: Over run error.");
        }
        ch = RdURXH0();
    }
/* channel 1*/
    ec = rUERSTAT1;
    if (ec != 0)
    {
        if ((rUERSTAT1&0x8)!= 0)
        {
      UART_sendString(UART_CH0, "\nUART1: BREAK signal.\n");
     }
        else if ((rUERSTAT1&0x4)!= 0)
        {
      UART_sendString(UART_CH0, "\nUART1: Frame error.\n");
        }
        else if ((rUERSTAT1&0x2)!= 0)
        {
      UART_sendString(UART_CH0, "\nUART1: Parity error.\n");
        }
        else if ((rUERSTAT1&0x1)!= 0)
        {
         UART_sendString(UART_CH0, "UART1: Over run error.");
        }
        ch = RdURXH0();
    }
    rI_ISPC = BIT_UERR01;
}
 楼主| 发表于 2006-4-17 11:02:00 | 显示全部楼层
<P>我现在知道Overrun Error的发生条件了,当RxH中的数据尚未被读出,又一次收到数据(无流控或nRTS在读出数据前被置为Active),就会出现这个错误,上面的代码可以正确处理这个错误,并将串口恢复到正常接收状态。</P><P>另外一个问题, AFC和FIFO还是没有搞定, 恳请路过的大侠指点一二,谢谢了。</P>
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-5-9 16:15 , Processed in 0.068825 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表