This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C6748 UART Overrun error

我程序的目的是串口发一个命令,命令的长度是52字节,c6748串口收到这个命令后,采集一帧图像处理,串口程序是参考创龙UART0串口中断收发。但是C6748串口收上位机数据的时候,会出现Overrun error,就是感觉数据收不过来,并且出现Overrun error后就再也进不去串口中断服务函数。程序中除了串口中断还有其他中断,比如vpif收图像数据,iic配置图像sensor寄存器,iic只在上电开始的一段时间,vpif也只是收到串口命令后开启帧中断和使能接收,处理完毕后就关闭了,串口注册的中断号是4,vpif注册的中断号是5。请问这种问题有什么解决方法?是不是串口什么地方没有配置才出现Overrun error?谢谢

  • 请问是第一次收52个字节的时候就溢出吗?每次都是设断点跑的吗?
  • 不是第一次,最开始一段时间正常,跑一段时间后LSR中OE(Overrun error)和DR(Data-ready)都会被置位,就再也进不去中断。我看论坛有类似的,但是感觉也没有提到有效的解决办法。见e2e.ti.com/.../756206
  • 没有设断点跑
  • 有使能fifo和edma吗?降低波特率试试?
  • 使能了fifo,没有用edma。原来波特率115200,降为9600也会出现,应该不是波特率问题。目前上位机发送到串口的频率是10Hz。
    //UART 初始化
    void UARTInit(void)
    {
    // 配置 UART0 参数
    // 波特率 115200 数据位 8 停止位 1 无校验位
    UARTConfigSetExpClk(SOC_UART_0_REGS, UART_0_FREQ, BAUD_115200,
    UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
    // 使能 UART0
    UARTEnable(SOC_UART_0_REGS);

    // 使能接收 / 发送 FIFO
    UARTFIFOEnable(SOC_UART_0_REGS);

    // 设置 FIFO 级别
    UARTFIFOLevelSet(SOC_UART_0_REGS, UART_RX_TRIG_LEVEL_1);
    }
    //UART 中断初始化
    void UARTInterruptInit(void)
    {
    IntRegister(C674X_MASK_INT4, UARTIsr);
    IntEventMap(C674X_MASK_INT4, SYS_INT_UART0_INT);
    IntEnable(C674X_MASK_INT4);

    // 使能中断
    unsigned int intFlags = 0;
    intFlags |= (UART_INT_LINE_STAT | \
    UART_INT_TX_EMPTY | \
    UART_INT_RXDATA_CTI);
    UARTIntEnable(SOC_UART_0_REGS, intFlags);
    }
  • 请问没有什么可能的原因吗?串口中断注册的是4,应该不会响应不过来的吧。现象和e2e.ti.com/.../756206 一致
  • 把vpif中断5关了呢?

  • vpif中断5关了的话正常,相当于只有一个串口中断的时候正常,但是有多个中断的时候,vpif和一个串口,或者e2e.ti.com/.../756206 里面提到的两个串口的时候就会有问题。不知道还有没有其他什么建议??
  • 改了FIFO深度为4,进一次中断处理4个字节,没有出现溢出。
  • 感谢分享解决方法!