当前位置: 首页 > article >正文

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;
}

下载验证

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

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


http://www.kler.cn/news/330741.html

相关文章:

  • Elasticsearch使用Easy-Es + RestHighLevelClient实现深度分页跳页
  • 【热门主题】000002 案例 JavaScript网页设计案例
  • 如何在 Kubernetes 上部署和配置开源数据集成平台 Airbyte?
  • LampSecurityCTF7 靶机渗透 (sql 注入, 文件上传, 密码喷射)
  • vue单点登录异步执行请求https://xxx.com获取并处理数据
  • 博文汇总目录
  • C语言自定义类型结构体
  • 茴香豆 + Qwen-7B-Chat-Int8
  • 高级架构师面试题
  • 第24天sql注入(小迪安全学习)
  • GPT与大模型行业落地实践探索
  • OpenCV视频I/O(13)视频采集类VideoCapture之等待多个视频流中的任意一个变为可用状态函数waitAny()的使用
  • HKMG工艺为什么要用金属栅极?
  • 【Android】浅析六大设计原则
  • C++中的类型推导:auto 和 decltype 介绍
  • 如何理解矩阵的复数特征值和特征向量?
  • 【60天备战2024年11月软考高级系统架构设计师——第35天:系统安全设计——安全设计模式】
  • quiz: python网络爬虫之规则1
  • 【H2O2|全栈】关于CSS(8)CSS3扩充了哪些新鲜的东西?
  • ISP下载,IAP,ICP,USB转TTL下载SWIM、DAP-link、CMSIS-DAP、ST-LINK,SPI(通信方式),