ZYNQ(三)通过PL端EMIO配置LED

(1)创建一个vivado工程
(2)open Block Design
(3)配置zynq ps端
根据自己的硬件类型配置好输入时钟频率与内存型号,并将PS端的时钟与PL端的时钟连接起来。以及配置4个EMIO GPIO
在这里插入图片描述
(4)右击 GPIO_0 引脚, 选择 make external 把 GPIO_0 引脚引出,并将GPIO_0 引脚修改为EMIO_0引脚
在这里插入图片描述
在这里插入图片描述
(5)生成IP的output products
(6)创建顶层封装 HDL wrapper

(7)创建约束文件,根据自己的板子上的原理图,编写.xdc文件

set_property PACKAGE_PIN AA14 [get_ports {emio_0_tri_io[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {emio_0_tri_io[0]}]

set_property PACKAGE_PIN W15 [get_ports {emio_0_tri_io[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {emio_0_tri_io[1]}]

set_property PACKAGE_PIN Y15 [get_ports {emio_0_tri_io[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {emio_0_tri_io[2]}]

set_property PACKAGE_PIN AB14 [get_ports {emio_0_tri_io[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {emio_0_tri_io[3]}]
set_property PACKAGE_PIN AB15 [get_ports {emio_0_tri_io[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {emio_0_tri_io[4]}]

set_property PACKAGE_PIN W16 [get_ports {emio_0_tri_io[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {emio_0_tri_io[5]}]

set_property PACKAGE_PIN Y16 [get_ports {emio_0_tri_io[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {emio_0_tri_io[6]}]

set_property PACKAGE_PIN U15 [get_ports {emio_0_tri_io[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {emio_0_tri_io[7]}]

(8)生成bit流文件
(9)export hardware
(10)launch SDK
(11)与前文相同,第一步创建应用,并选择非示例(empty application)
在这里插入图片描述
在这里插入图片描述
(12)由于上一步创建了新的bsp包,并自动生成了makefile,并且运行。
在这里插入图片描述
在这里插入图片描述
(13)创建main.c文件,编写驱动代码
在这里插入图片描述

#include "xgpiops.h"
#include "sleep.h"
int main()
{
static XGpioPs psGpioInstancePtr;
XGpioPs_Config* GpioConfigPtr;
int xStatus;
//-- EMIO的初始化
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");
//--EMIO的输入输出操作
XGpioPs_SetDirectionPin(&psGpioInstancePtr, 54,1);
XGpioPs_SetDirectionPin(&psGpioInstancePtr, 55,1);
XGpioPs_SetDirectionPin(&psGpioInstancePtr, 56,1);
XGpioPs_SetDirectionPin(&psGpioInstancePtr, 57,1);
//使能EMIO输出
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 54,1);
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 55,1);
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 56,1);
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 57,1);
while(1)
{
XGpioPs_WritePin(&psGpioInstancePtr, 54, 1);//EMIO的第0位输出1
usleep(200000); //延时
XGpioPs_WritePin(&psGpioInstancePtr, 54, 0);//EMIO的第0位输出0
usleep(200000); //延时
XGpioPs_WritePin(&psGpioInstancePtr, 55, 1);//EMIO的第1位输出1
usleep(200000); //延时
XGpioPs_WritePin(&psGpioInstancePtr, 55, 0);//EMIO的第1位输出0
usleep(200000); //延时
XGpioPs_WritePin(&psGpioInstancePtr, 56, 1);//EMIO的第2位输出1
usleep(200000); //延时
XGpioPs_WritePin(&psGpioInstancePtr, 56, 0);//EMIO的第2位输出0
usleep(200000); //延时
XGpioPs_WritePin(&psGpioInstancePtr, 57, 1);//EMIO的第3位输出1
usleep(200000); //延时
XGpioPs_WritePin(&psGpioInstancePtr, 57, 0);//EMIO的第3位输出0
usleep(200000); //延时
}
return 0;
}

在这里插入图片描述
使用自动产生的makefile编译完成,产生可执行文件。
(14)run configuration ->
选中xilinx c/c++ application (System Debugger) ,运行程序
在这里插入图片描述
(15)debug as -> debug configuration
选中system Debugger ,设置系统调试。
在这里插入图片描述

发布了54 篇原创文章 · 获赞 4 · 访问量 1049

猜你喜欢

转载自blog.csdn.net/buzhiquxiang/article/details/103427730