ZYNQ: GPIO 之 EMIO 按键控制 LED 实验

GPIO 之 EMIO 按键控制 LED 实验目的

使用启明星 ZYNQ 底板上的两个用户按键分别控制 PS 端两个 LED 的亮灭
其中一个按键 PL_KEY0 连接到了 PL 端,需要通过 EMIO 进行扩展,另外一个按键是底板上 PS 端的用户按键PS_KEY0,这两个按键分别控制 PS_LED0 和 PS_LED1
底板上的 PS_KEY0 控制 PS_LED0、PL_KEY0 控
制 PS_LED1。两个 LED 灯在按键按下的时候点亮,释放后熄灭。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

简介

ZYNQ GPIO 接口信号被分成四组,分别是从 BANK0 到 BANK3。其中 BANK0 和 BANK1 中共计 54
个信号通过 MIO 连接到 ZYNQ 器件的引脚上,这些引脚属于 PS 端;而 BANK2 和 BANK3 中共计 64 个信
号则通过 EMIO 连接到了 ZYNQ 器件的 PL 端

在这里插入图片描述

硬件设计

创建 Vivado 工程

另存工程
在这里插入图片描述

使用 IP Integrator 创建 Processing System

在 Flow Navigator 中,点击 IP INTEGRATOR 下的 Open Block Design

在 Diagram 窗口中,双击打开 ZYNQ7 Processing System 重定义窗口
在这里插入图片描述
通过 EMIO 扩展一个 1 位的 GPIO 接口信号,此信号将用于连接 PL 端的引脚
在这里插入图片描述
在这里插入图片描述
点击选中该端口,然后点击
鼠标右键,在弹出的列表中选择“Make External”,
在这里插入图片描述
看到 ZYNQ7 Processing System 引出了一个名为 GPIO_0_0 的接口
在这里插入图片描述
点击选中该接口,在左侧External Interface Properties 一栏中将该接口的名称修改为GPIO_EMIO_KEY
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
按 Ctrl+S 快捷键保存设计

在这里插入图片描述

生成顶层 HDL

在 Sources 窗口中展开 Design Sources,然后右键点击 sysetm_wrapper 下的 system.bd,在弹出的菜
单中选择 Generate Output Products

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

生成 Bitstream 文件并导出硬件

在左侧 Flow Navigator 导航栏中找到 RTL ANALYSIS,点击该选项中的“Open Elaborated Design”,
在这里插入图片描述
在 ELABORATED DESIGN 界面下方找到 I/O Ports 窗口
在这里插入图片描述
在这里插入图片描述
Ctrl+S 快捷键保存
在这里插入图片描述
并生成 Bitstream 文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

导出硬件

File > Export > Export hardware
勾选“Include bitstream”
点击“Next”

如果我们的设计使用了 PL 的资源,比如使用了 PL 的引脚,或者在 PL 内实现了部
分功能模块,那么我们就需要生成 Bitstream 文件,并在导出硬件的时候包含该文件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

软件设计

#include "xparameters.h" //器件参数信息
#include "xstatus.h" //包含 XST_FAILURE 和 XST_SUCCESS 的宏定义
#include "xil_printf.h" //包含 print()函数
#include "xgpiops.h" //包含 PS GPIO 的函数
#include "sleep.h" //包含 sleep()函数
// MIO 引脚的高电平对应的是 LED 灯亮,低电平对应 LED 灯灭
//宏定义 GPIO_DEVICE_ID
#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID
//连接到 MIO 的 LED
#define MIOLED0 7 //连接到 MIO7
#define MIOLED1 8 //连接到 MIO8
#define MIOKEY0 12 //连接到 MIO12

#define EMIOKEY0 54 //连接到PL_KEY0

XGpioPs Gpio; // GPIO 设备的驱动程序实例

int main()
{
int Status;
XGpioPs_Config *ConfigPtr;

print(" LJL EMIO Test! \n\r");
ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
Status = XGpioPs_CfgInitialize(&Gpio, ConfigPtr,
ConfigPtr->BaseAddr);
if (Status != XST_SUCCESS){
return XST_FAILURE;
}
//设置指定引脚的方向:0 输入,1 输出
XGpioPs_SetDirectionPin(&Gpio, MIOLED0, 1);
XGpioPs_SetDirectionPin(&Gpio, MIOLED1, 1);

XGpioPs_SetDirectionPin(&Gpio, MIOKEY0, 0);//输入
XGpioPs_SetDirectionPin(&Gpio, EMIOKEY0, 0);
//使能指定引脚输出:0 禁止输出使能,1 使能输出
XGpioPs_SetOutputEnablePin(&Gpio, MIOLED0, 1);
XGpioPs_SetOutputEnablePin(&Gpio, MIOLED1, 1);

while (1) {
XGpioPs_WritePin(&Gpio, MIOLED0, XGpioPs_ReadPin(&Gpio, MIOKEY0)); //向指定引脚写入数据:0 或 1
XGpioPs_WritePin(&Gpio, MIOLED1, XGpioPs_ReadPin(&Gpio, EMIOKEY0));

}
return XST_SUCCESS;
}

下载验证

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完成比完美重要!!!
学习记录,侵权联系删除
来源:正点原子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

li星野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值