器件:c6678 EVM板调试uart
配置:fifo中断方式接收,配置成1byte trigger lever
现象:在单步模式下调试,uart edma中断服务函数中设置断点 , (1)通过上位机一次性发送5个bytes,查看到接收数组里收到这5个字节,但是后续填充了3个字节的随机值; (2)通过上位机一次性发送10个bytes,查看到接收数组里只收到了8个字节,第二次再进入中断,接收了剩下的2个字节,但是后续填充了6个字节的随机值
上述问题是,不论实际有效的接收数据有多少,fifo总是按照8个字节的方式填充,那么我就不能判断一帧数据到底发了多少有效的字节
请大师们指教!
Zhan Xiang:
UART的FIFO如果用EDMA是有这样的问题,必须FIFO满了才能产生EDMA事件,如果需要实时进行接收,建议通过CPU中断方式实现。
Vincent Han:
您好,
不知您用的是哪个版本的KI的STK,论坛本版里置顶的帖子里有较新的版本(http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx KI_STK_20140123.7z), 这个里面UART的例程TX侧是可以选择用EDMA或是DSP Core,RX侧只是使用DSP的,在包里面的/docs/KeyStone_1_UART_STK_User's_Guide.pdf里面也有具体实现说明以及使用方法:
另外,全局变量gUARTCfg.fifoRxTriBytes决定了RX FIFO的深度,可选范围请参考/common/KeyStone_UART_Init_drv.h中的定义:
typedef enum
{
TRIGGER_LEVEL_1BYTE = CSL_UART_FCR_RXFIFTL_CHAR1,
TRIGGER_LEVEL_4BYTE = CSL_UART_FCR_RXFIFTL_CHAR4,
TRIGGER_LEVEL_8BYTE = CSL_UART_FCR_RXFIFTL_CHAR8,
TRIGGER_LEVEL_14BYTE = CSL_UART_FCR_RXFIFTL_CHAR14
}UART_triLevel;
请根据需要选择适合的接收FIFO的颗粒度。
多谢!