3. 基于PS的串口通讯
这一部分分为两个部分:
- 串口发送数据
- 串口接收数据
该部分最后会设计一个自动收发装置,即当上位机通过串口向开发板发送数据后,开发板会发回所有的数据。假定上位机发送的数据小于256位,这样可以用一个u8型即可以完成索引。
基于PS的串口通讯
该部分主要是使用串口收发数据,使用的资源是PS中MIO12、13两个IO口确定的UART1通道。然后其余无需任何其他资源。故而可以将AXI总线关闭。
1. 创建Block
1. 创建一个ZYNQ7 Processing System
主要修改一下几个部分:
- PS-PL Configuration 关闭AXI总线。
- Peripheral I/O Pins 开启UART1。
3. DDR Configuration 修改DDR配置。
自动连接后创建HDL Wrapper后即可生成Bitstream文件,具体完成就是如下的样子。
[参考自CREATE HDL WRAPPER的问题]
主要是这段话:
The Create HDL Wrapper dialog box lets you define a new HDL wrapper for the current block design. The wrapper defines the block design as the top-level design, so you can synthesize, implement, and generate a bitstream for the block design.
导出硬件配置时由于没有AXI总线参与,就不需要bitstream了,然后开始编写PS程序。
2. PS程序编写
1. 初始化
通过Launch SDK打开Xilinx SDK。创建一个空的应用项目。这里使用串口,实际上这里直接可以使用HelloWorld模板。但是为了学习需要,这一部分还是先建立空白应用项目。
先引入一部分必须引入的模块:
#include "xparameters.h"
#include "xuartps.h"
#include "xil_printf.h"
然后是初始化和自检测环节:
用到的函数有
XUartPs_Config *XUartPs_LookupConfig(
u16 DeviceId
); // 根据设备ID查看配置文件
s32 XUartPs_CfgInitialize(
XUartPs *InstancePtr,
XUartPs_Config * Config,
u32 EffectiveAddr
); // 初始化
s32 XUartPs_SelfTest(
XUartPs *InstancePtr
); // 自测
void XUartPs_SetOperMode(
XUartPs *InstancePtr,
u8 OperationMode
); // 设置工作模式
s32 XUartPs_SetBaudRate