ISE 14.4中,自带ZYNQ UART的测试程序。测试程序先将串口设置成自环模式,再在循环总发送一个字节和接收一个字节。循环32次后,再比较发送的字符和接收字符是否一致。如果一致,就表示UART测试成功,否则就报告失败。
如果Zynq不是刚刚复位启动,UART的FIFO中可能已经有数据。这样的话,测试就会失败。如果调试串口自测程序,在发送字符后,接收字符前,停止程序。然后再启动串口自测程序,就会报告失败。
解决的办法是在测试前清空FIFO。代码如下:
Status = XUartPs_CfgInitialize(&Uart_PS, Config, Config->BaseAddress);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
/*
* Clear the FIFO.
*/
while ( (XUartPs_IsReceiveData(Uart_PS.Config.BaseAddress)) )
{
/*
* Receive the byte
*/
XUartPs_Recv(&Uart_PS, FirstString, 1);
}
/*
* Check hardware build.
*/
Status = XUartPs_SelfTest(&Uart_PS);
if (Status != XST_SUCCESS) {
其中while循环及其中的XUartPs_Recv是新增加的。