VIVADO+ZYNQ7000入门二, 第一个PS程序,从创建到运行

空白工程的创建请参照上一篇博文
VIVADO+ZYNQ7000入门一, 第一个PL程序,从创建到运行

ZYNQ系列产品中,PS系统在Vivado的开发环境下下被当作一个IP core来调用,接下来我们先准备一个具备简单功能的PS系统,然后在这个系统上运行一个串口打印程序,输出hello world字符串。
涉及到的内容主要有三个方面,一是定义一个ARM核的IP core,配置简单接口;二是封装IP核,设置顶层头文件;三是在Vivado集成的SDK上,设计一个简单的串口程序。

一、定义IP

在新建工程窗口的最左侧,如下图所示,点击1,弹出窗口中,在2的位置输入IP的名称,然后点击OK
在这里插入图片描述
在弹出的新窗口中点击1处的图标,在2的位置输入zy搜索,可以看到ZYNQ的处理器系统block,双击。
在这里插入图片描述
稍等片刻,zynq的模块图标展现在我们面前!
在这里插入图片描述
双击它,目的是订制一些接口功能以及参数。接下来的工作量会有点大,这个就相当于配置一个CPU的功能接口了。首先我们从时钟配置入手,点击下图中红线标注处。
在这里插入图片描述
在进行设置前,我们可以先浏览一下Xilinx的官方文档UG585,里面关于clock的功能框图。我们可以看到CPU内部有三个PLL,把外部的晶振时钟分成三个不同的时钟源,同时ARM核时钟又可以有两种倍频配置,分别是6:3:2:1和4:2:2:1。
在这里插入图片描述
基本上都暂时用默认配置,注意红线框处,目前只做一个简单的PS系统,不需要输出时钟,把此处的勾选去掉。
在这里插入图片描述
接下来选择PL-PS配置,去掉AXI总线接口,本文暂时不用。
在这里插入图片描述
接下来配置CPU直接引出的MIO功能,这个配置主要是以据自己手上开发板的硬件电路图来设置。
在这里插入图片描述
继续配置一下DDR,选择板卡上用到的内存型号,配置PCB布线延时补偿。
在这里插入图片描述
各项功能配置完成后,点击一下自动布线。
在这里插入图片描述
然后选择校验功能,检查一下设计有没有问题。
在这里插入图片描述

二、封装IP

依次点选下图中的1、2、3步
在这里插入图片描述
在弹出窗口中,选择自动。
在这里插入图片描述
这是可以看到design system这里图标已经发生变化,名称也变为“design sys wrapper”,下图红线处点击右键,在弹出窗口中选择Generate Output Products…
在这里插入图片描述
稍后弹出新窗口,参数都默认,点击Generate即可。
在这里插入图片描述
这里提示了一个错误,是网络信号的电平设置不对。
在这里插入图片描述
回去修改一下,改为1.8V,修改后记得再次 选择Generate Output Products…
在这里插入图片描述
接下来是把生成的硬件配置输出给SDK开发环境。
File–Export–Exprot Hardware…
在这里插入图片描述
工作路径默认即可。
在这里插入图片描述
然后打开SDK开发环境。
在这里插入图片描述
三、SDK开发
在这里插入图片描述

二、串口SDK应用程序

接下来的操作是在SDK环境下进行。
新建工程/新建C文件。

在这里插入图片描述
我们可以先调用一个系统自带的验证程序,看硬件系统是否能跑起来。
在这里插入图片描述
在这里插入图片描述
电路板上电、连上JTAG,测试一下是否找到设备。
在这里插入图片描述
SDK自带串口接收程序,当然也可以用独立的串口软件,我用的是独立串口软件。
在这里插入图片描述
执行如下操作可以让程序运行起来。
在这里插入图片描述
正常的话,串口可以看到一些接口检查程序打印PASSED。
在这里插入图片描述
接下来再创建我们自己的串口测试工程。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


#include "xparameters.h"

#include "xuartps.h"


XUartPs Uart_Ps;

int main(void)
{
	u8 HelloWorld[] = "Hello World";
	int SentCount = 0;

	XUartPs_Config *Config;

	Config = XUartPs_LookupConfig(XPAR_XUARTPS_0_DEVICE_ID);
	XUartPs_CfgInitialize(&Uart_Ps, Config, Config->BaseAddress);
	XUartPs_SetBaudRate(&Uart_Ps, 115200);

	while (SentCount < (sizeof(HelloWorld) - 1)) {
			/* Transmit the data */
			SentCount += XUartPs_Send(&Uart_Ps,
						   &HelloWorld[SentCount], 1);
		}

	return SentCount;
}


在这里插入图片描述
运行后,可以看到串口终端最后一行打印了 Hello World。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值