宋桓公

MiZ702学习笔记4——熟悉EDK从纯PS开始

0
阅读(4303)

上次笔记中,我们利用vivado新建了一个工程,仅仅用到了zynq的PL部分,也就是FPGA的部分,点亮了一个流水灯。

这次我们我们就单单玩玩PS部分,也就是ARM部分,熟悉下这部分的开发流程。

创建工程的过程和上一篇笔记是一样的,这次我们首先创建一个Block文件,用于放置IP。

wps60FC.tmp

这个Block文件我就取个名字叫他BlockTop吧:

wps610D.tmp

点击OK之后,就新建好了,Vivado提示你添加一个IP:

wps611E.tmp

按我们就按照提示点击Add IP之后出现如下对话框,找到zynq的IP核,每次今天就是要添加它,双击它:

wps612E.tmp

vivado做的很人性化,它一步步的提示你,点击Run Block Automation,这样就简单的组建一个ZYNQ 的处理系统:

wps612F.tmp

wps6130.tmp

在你点击了OK之后,你会发现DDR以及FICED_IO自动的延伸出来。

接下来,双击ZYNQ IP核,我们可以进入其内部对齐进行配置,和传统的ARM不一样,ZYNQ的PS部分是可以有用户进行配置的。

wps6141.tmp

我们看到时钟配置这一栏,FLCK_CLK0配置输出了一个50M的时钟,点击OK退出配置界面,在Block文件中,我们进行连线,将鼠标放在引脚处,鼠标变成铅笔后进行拖拽,连线如下图所示:

wps6151.tmp

右键单击Block,文件选择Generate the output products,是文件得到一定的约束:

wps6152.tmp

继续右键单击Block,文件选择Create a HDL wrapper,创建一个HDL 的顶层文件:

wps6153.tmp

wps6164.tmp

那么vivado这部分的事情基本做完了,接下来就是把配置好的硬件,告诉SDK,可能读者发现一个问题,这里并没有对当前项目进行编译生成bit什么的,这是因为这个设计里没有包含任何的PL逻辑设计部分,所以也就不需要了.

之后我们就可以像开发ARM那样来开发ZYNQ的PS部分了。如下图所示:选择File > Export > Export Hardware

wps6165.tmp

wps6166.tmp

选择File > Launch SDK,打开SDK软件:

wps6167.tmp

wps6168.tmp

在SDK界面中,新建一个项目:

wps6179.tmp

填写项目名字,并选择项目类型为C,点击Next:

wps6189.tmp

选择一个空的工程,点击Finish:

wps619A.tmp

接着创建一个C的源文件:

wps619B.tmp

名字就叫main.c:

wps61AB.tmp

接下来就向main.c中添加内容了,我们的MiZ702PS的一个MIO,MIO7接到了LD9这个灯上,接下来我们利用程序让他闪起来。


#include  #include "xgpiops.h" #include "xgpio.h" #include "sleep.h" //void print(char *str); int main() { static XGpio psGpioInstancePtr; XGpioPs_Config* GpioConfigPtr; int iPinNumber= 7; //LD9连接的是MIO7 u32 uPinDirection = 0x1; //1表示输出,0表示输入 int xStatus; //--MIO的初始化 GpioConfigPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID); if(GpioConfigPtr == NULL) return XST_FAILURE; xStatus = XGpioPs_CfgInitialize(&psGpioInstancePtr,GpioConfigPtr, GpioConfigPtr->BaseAddr); if(XST_SUCCESS != xStatus) print(" PS GPIO INIT FAILED \n\r"); //--MIO的输入输出操作 XGpioPs_SetDirectionPin(&psGpioInstancePtr, iPinNumber,uPinDirection);//配置MIO输出方向 XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, iPinNumber,1);//配置MIO的第7位输出 while(1) { XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber, 1);//点亮MIO的第7位输出1 sleep(1); //延时 XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber, 0);//熄灭MIO的第7位输出0 sleep(1); //延时 } return 0; }


这里,大家还可能遇到一个头文件的问题,如提示缺少 #include "xgpio.h",这是因为你没有添加GPIO的IP,那么硬件导出的时候就没有,没有我们可以自己添加,我告诉你一个好方法。

直接将"xgpio.h"粘贴进去,但是"xgpio.h"里还包含了一个xgpio_l.h,所以也一起粘贴进去。

wps61AC.tmp

可以直接选中include,按Ctrl + V向其中粘贴文件。

"xgpio.h",和"xgpio_l.h"可以在vivado安装目录下找到。

D:\Xilinx\SDK\2014.2\data\embeddedsw\XilinxProcessorIPLib\drivers\gpio_v4_0\src

wps61BD.tmp

还有一个gpio_v3_01_a,也有一样的文件,不过感觉版本低些,就没管它。

Ctrl + S保存,Ctrl + B编译,编译时还可能遇到错误:

wps61BE.tmp

莫慌~~~右击工程,Clean一下,该警告可消除

wps61BF.tmp

编译成功后,可以开始调试了:

wps61D0.tmp

wps61E0.tmp

依然是,这个界面,我们下拉滚动条,勾选两个东东:

wps61F1.tmp

切换到Application选项卡:

wps6201.tmp

如果,你的开发板上电了,而且保证JTAG连接好了,此时你的LD9已经还是闪烁起来~~

Baidu
map