UART中断OE错误后不正常 - TMS320C6678 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2323|回复: 1

UART中断OE错误后不正常

[复制链接]

9

主题

19

帖子

128

积分

注册会员

Rank: 2

积分
128
发表于 2017-1-16 10:02:58 | 显示全部楼层 |阅读模式
我使用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;


请问这里怎么回事?应该怎么解决?
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
发表于 2017-1-18 09:34:57 | 显示全部楼层
可以尝试把串口2的初始化放到任务里,并且初始化的最后使能串口,这样就可以保证串口接收到数据可以马上读走
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-3-29 23:26 , Processed in 0.036544 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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