嵌入式开发者社区

标题: UART中断OE错误后不正常 [打印本页]

作者: bjx1234    时间: 2017-1-16 10:02
标题: UART中断OE错误后不正常
我使用C6748的例程demo\SYSBIOS\Application\UART2_INT做收发测试,出现以下问题,

Void UARTIsr(UArg arg)
{
    unsigned char rxData = 0;
    unsigned int int_id = 0;

    // 确定中断源
    int_id = UARTIntStatus(SOC_UART_2_REGS);

    // 接收中断
    if(UART_INTID_RX_DATA == int_id)
    {
        rxData = UARTCharGetNonBlocking(SOC_UART_2_REGS);
        UARTCharPutNonBlocking(SOC_UART_2_REGS, rxData);
    }

    // 接收错误
    if(UART_INTID_RX_LINE_STAT == int_id)
    {
        while(UARTRxErrorGet(SOC_UART_2_REGS))
        {
            // 从 RBR 读一个字节
            UARTCharGetNonBlocking(SOC_UART_2_REGS);
        }
    }
}

要求PC串口助手隔一定时间如500ms发一个字符,开发板应答。
实验发现,如果UART2_INT程序先跑起来,再启动串口助手发送,一发一收,结果正常的;反之,先启动串口助手定时发送,UART2_INT后
运行,就很容易进入UARTIsr接收错误,查寄存器发现OE位置1,而且程序从UARTIsr接收错误出去后,再也不进入UARTIsr了;
  按参考手册所说,经过下面的
      while(UARTRxErrorGet(SOC_UART_2_REGS))
        {
            // 从 RBR 读一个字节
            UARTCharGetNonBlocking(SOC_UART_2_REGS);
        }
OE就会被清掉。但是实际上没有,只要进入一次接收错误,OE就一直是1;


请问这里怎么回事?应该怎么解决?
作者: Lewis    时间: 2017-1-18 09:34
可以尝试把串口2的初始化放到任务里,并且初始化的最后使能串口,这样就可以保证串口接收到数据可以马上读走




欢迎光临 嵌入式开发者社区 (https://51ele.net/) Powered by Discuz! X3.4