嵌入式开发者社区
标题:
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://www.51ele.net/)
Powered by Discuz! X3.4