[ZYNQ Ultrascale + MPSOC FPGA教程]第21章PS侧UART读写控制

原始声明:该原始教程是由信义电子技术(上海)有限公司(ALINX)创建的。

版权归我们公司所有。

如果需要重印,则需要授权并注明出处。

适用于板型号:AXU2CGA / AXU2CGB / AXU3EG / AXU4EV-E / AXU4EV-P / AXU5EV-E / AXU5EV-P / AXU9EG / AXU15EG vitis项目目录是“ ps_uart / vitis”。

软件工程师的工作内容以下是软件工程师的责任。

在先前的实验中,您或多或少会发现有打印信息,主要是通过调用“ xil_printf”来完成。

或“ printf”,但是通过什么打印信息?我们仍然记得在打印信息之前已设置了串行端口。

是的,它是一个串行端口,但是这些功能如何调用串行端口?实际上,我们可以在“ xil_printf”中看到函数定义,请注意outbyte函数调用UART进行打印。

然后进入outbye功能,可以看到PS端的UART功能被调用,可以在串口显示。

除了打印信息外,如果我们想使用UART进行数据传输怎么办?本章将介绍PS端对UART的读写控制。

在实验中,每1S发送一个字符串。

如果接收到数据,则会产生一个中断,并再次发送接收到的数据。

1. UART模块简介以下是UART模块的结构图。

TxFIFO和RxFIFO均为64字节。

下图显示了UART的四种模式。

可以使用Remoteloopbackmode测试物理电路是否正常。

使用API​​函数XUartPs_SetOperMode2.Vitis开发程序。

1)本实验流程如下:主程序流程:UART初始化设置UART模式设置数据格式设置中断发送UART数据检查是否接收数据如果接收,则发送接收到的数据,如果没有,则等待1秒钟,继续发送数据中断程序流程:中断初始化将接收FIFO触发中断寄存器设置为1,即在接收数据时中断并打开接收触发中断REMPTY并接收FIFO空中断RTRIG中断服务程序:确定是否状态寄存器为触发器或为空。

清除相应的中断触发状态。

读取RxFIFO数据,空状态将接收标志ReceivedFlag设置为12)在主函数中设置模式,可以直接调用该函数,将其设置为普通模式,将数据格式设置为115200波特率,8bit数据,无奇偶校验位和1bit停止位。

UartFormat在uart_parameter.h中定义。

3)中断控制器程序的初始化可以参考按键中断模式,用法类似。

4)在主功能中将触发电平设置为1,打开触发并清空中断。

5)数据发送和接收函数参考UARTPS的XUartPs_Send和XUartPs_Rev函数,但是它们会打开一些中断,这些中断不符合预期,因此已对其进行了修改。

接收缓冲区中最多设置了2000个字节的缓冲区,可以根据需要进行修改。

6)在中断服务程序中,将ReceivedBufferPtr指针地址和ReceivedByteNum添加到接收的号码中。

如果FIFO为空,则将ReceivedFlag设置为1。

同时,将数据写入中断状态寄存器以清除中断。

Ug1085UART清除中断7)在主功能中,清除ReceivedFlag和ReceivedByteNum,并重置ReceivedBufferPtr指针。

8)在Uart发送功能中,判断TxFIFO是否已满,否则继续发送直到计数达到NumBytes 9)在Uart接收功能中,判断接收RxFIFO是否为空,否则继续读取数据,NumBytes为要读取的数据数,但是如果接收FIFO为空,并且计数未达到此值,则此功能也将结束。

10)除了自己编写程序外,您还可以从system.mss导入模块示例。

请参考Xilinx提供的程序,以方便学习。

3.板载验证1)接下来下载程序2)打开项目目录下的串行端口调试工具3)如下设置参数,打开串行端口,您可以看到打印信息。

4)在发送区域中填写数据,然后单击“手动发送”以在接收区域中查看数据。

4.总结在本章中,我学习了UART的发送和接收以及中断的使用。

我希望您能养成良好的习惯,阅读更多文档,了解原理,并对系统有很好的了解。

产品知识/行业、品牌资讯