我程序的目的是串口发一个命令,命令的长度是52字节,c6748串口收到这个命令后,采集一帧图像处理,串口程序是参考创龙UART0串口中断收发。但是C6748串口收上位机数据的时候,会出现Overrun error,就是感觉数据收不过来,并且出现Overrun error后就再也进不去串口中断服务函数。程序中除了串口中断还有其他中断,比如vpif收图像数据,iic配置图像sensor寄存器,iic只在上电开始的一段时间,vpif也只是收到串口命令后开启帧中断和使能接收,处理完毕后就关闭了,串口注册的中断号是4,vpif注册的中断号是5。请问这种问题有什么解决方法?是不是串口什么地方没有配置才出现Overrun error?谢谢
Shine:
请问是第一次收52个字节的时候就溢出吗?每次都是设断点跑的吗?
yong tian3:
回复 Shine:
不是第一次,最开始一段时间正常,跑一段时间后LSR中OE(Overrun error)和DR(Data-ready)都会被置位,就再也进不去中断。我看论坛有类似的,但是感觉也没有提到有效的解决办法。见e2e.ti.com/…/756206
yong tian3:
回复 Shine:
没有设断点跑
Shine:
回复 yong tian3:
有使能fifo和edma吗?降低波特率试试?
yong tian3:
回复 Shine:
使能了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);// 使能 UART0UARTEnable(SOC_UART_0_REGS);
// 使能接收 / 发送 FIFOUARTFIFOEnable(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);
}
yong tian3:
回复 Shine:
请问没有什么可能的原因吗?串口中断注册的是4,应该不会响应不过来的吧。现象和e2e.ti.com/…/756206一致
Shine:
回复 yong tian3:
把vpif中断5关了呢?
yong tian3:
回复 Shine:
vpif中断5关了的话正常,相当于只有一个串口中断的时候正常,但是有多个中断的时候,vpif和一个串口,或者e2e.ti.com/…/756206 里面提到的两个串口的时候就会有问题。不知道还有没有其他什么建议??
Shine:
回复 yong tian3:
感谢分享解决方法!