GPIO之EMIO按键控制LED——ZYNQ学习笔记3

一、EMIO简介

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

        在大多数情况下, PS 端经由 EMIO 引出的接口会直接连接到 PL 端的器件引脚上, 通过 IO 管脚约束来指定所连接 PL 引脚的位置。 通过这种方式, EMIO 可以为 PS 端实现额外的 64 个输入引脚或 64 个带有输出使能的输出引脚。 EMIO 还有一种使用方式,就是用于连接 PL 内实现的功能模块( IP 核) , 此时 PL 端的 IP 作为 PS 端的一个外部设备, 如图 4.1.2 所示:

EMIO:扩展MIO,是PS与PL端的接口,当PS引脚不够用时,可以拓展EMIO使用PL端引脚

二、实验任务

        本章的实验任务是使用 Z100 底板上的两个用户按键分别控制 PS 端两个 LED 的亮灭。其中一个按键PL_KEY0 连接到了 PL 端, 需要通过 EMIO 进行扩展,另外一个按键是底板上 PS 端的用户按键 PS_KEY0,这两个按键分别控制 PS_LED0 和 PS_LED1,底板上的 PS_KEY0 控制 PS_LED0、 PL_KEY0 控制 PS_LED1。两个 LED 灯在按键按下的时候点亮,释放后熄灭

三、程序设计

1、整体框图:

2、硬件设计

根据实际需要选择位宽

对EMIO进行管脚约束

set_property -dict {PACKAGE_PIN J13 IOSTANDARD LVCMOS18} [get_ports GPIO_0_0_tri_io[0]]

 

 

 代码编写:

注意bank地址!!!

#include <stdio.h>
#include "xparameters.h"
#include "xgpiops.h"
#include "sleep.h"#define GPIO_DEVICE_ID		XPAR_XGPIOPS_0_DEVICE_ID#define MIO_LED1      7//MIO7
#define MIO_LED2      8//MIO8
#define MIO_LED0      0//MIO0
#define MIO_KEY0      12//MIO12
#define EMIO_KEY0     54//EMIO54XGpioPs Gpio;	/* The driver instance for GPIO Device. */int main(){XGpioPs_Config *ConfigPtr;u32 ps_key;u32 pl_key;//初始化GPIO驱动配置//根据器件ID来查找器件配置信息ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);//对GPIO的驱动进行初始化XGpioPs_CfgInitialize(&Gpio, ConfigPtr,ConfigPtr->BaseAddr);//设置引脚方向XGpioPs_SetDirectionPin(&Gpio, MIO_LED1, 1);XGpioPs_SetDirectionPin(&Gpio, MIO_LED2, 1);XGpioPs_SetDirectionPin(&Gpio, MIO_LED0, 1);//设置PS_KEYXGpioPs_SetDirectionPin(&Gpio, MIO_KEY0, 0);//设置PL_KEYXGpioPs_SetDirectionPin(&Gpio, EMIO_KEY0, 0);//设置输出使能   0:输入    1:输出XGpioPs_SetOutputEnablePin(&Gpio, MIO_LED1, 1);XGpioPs_SetOutputEnablePin(&Gpio, MIO_LED2, 1);XGpioPs_SetOutputEnablePin(&Gpio, MIO_LED0, 1);printf("GPIO MIO TEXT!\n");while(1){ps_key = XGpioPs_ReadPin(&Gpio,MIO_KEY0);pl_key = XGpioPs_ReadPin(&Gpio,EMIO_KEY0);XGpioPs_WritePin(&Gpio, MIO_LED1, ps_key);XGpioPs_WritePin(&Gpio, MIO_LED2, pl_key);XGpioPs_WritePin(&Gpio, MIO_LED0, ps_key);}return 0 ;
}

四、下载验证

五、总结

六、拓展训练

约束管脚

set_property -dict {PACKAGE_PIN J13 IOSTANDARD LVCMOS18} [get_ports GPIO_0_0_tri_io[0]]
set_property -dict {PACKAGE_PIN H13 IOSTANDARD LVCMOS18} [get_ports GPIO_0_0_tri_io[1]]

重新生成硬件信息

代码编写: 

#include <stdio.h>
#include "xparameters.h"
#include "xgpiops.h"
#include "sleep.h"#define GPIO_DEVICE_ID		XPAR_XGPIOPS_0_DEVICE_ID#define MIO_LED1      7//MIO7
#define MIO_LED2      8//MIO8
#define MIO_LED0      0//MIO0
#define MIO_KEY0      12//MIO12
#define EMIO_KEY0     54//EMIO54
#define EMIO_KEY1     55//EMIO54XGpioPs Gpio;	/* The driver instance for GPIO Device. */int main(){XGpioPs_Config *ConfigPtr;u32 ps_key;u32 pl_key1;u32 pl_key2;//初始化GPIO驱动配置//根据器件ID来查找器件配置信息ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);//对GPIO的驱动进行初始化XGpioPs_CfgInitialize(&Gpio, ConfigPtr,ConfigPtr->BaseAddr);//设置引脚方向XGpioPs_SetDirectionPin(&Gpio, MIO_LED1, 1);XGpioPs_SetDirectionPin(&Gpio, MIO_LED2, 1);XGpioPs_SetDirectionPin(&Gpio, MIO_LED0, 1);//设置PS_KEYXGpioPs_SetDirectionPin(&Gpio, MIO_KEY0, 0);//设置PL_KEYXGpioPs_SetDirectionPin(&Gpio, EMIO_KEY0, 0);XGpioPs_SetDirectionPin(&Gpio, EMIO_KEY1, 0);//设置输出使能   0:输入    1:输出XGpioPs_SetOutputEnablePin(&Gpio, MIO_LED1, 1);XGpioPs_SetOutputEnablePin(&Gpio, MIO_LED2, 1);XGpioPs_SetOutputEnablePin(&Gpio, MIO_LED0, 1);printf("GPIO MIO TEXT!\n");while(1){ps_key = XGpioPs_ReadPin(&Gpio,MIO_KEY0);pl_key1 = XGpioPs_ReadPin(&Gpio,EMIO_KEY0);pl_key2 = XGpioPs_ReadPin(&Gpio,EMIO_KEY1);XGpioPs_WritePin(&Gpio, MIO_LED1, ps_key);XGpioPs_WritePin(&Gpio, MIO_LED2, pl_key1);XGpioPs_WritePin(&Gpio, MIO_LED0, pl_key2);}return 0 ;
}

编译执行:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/150533.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

云栖实录 | 阿里云 OpenLake 解决方案重磅发布:多模态数据统一纳管、引擎平权联合计算、数据共享统一读写

新一轮人工智能浪潮正在重塑世界&#xff0c;以生成式 AI 为代表的技术快速应用&#xff0c;推动了数据与智能的深化融合&#xff0c;同时也给数据基础设施带来了全新的变革与挑战。面向 AI 时代的数据基础设施如何构建&#xff1f;底层数据平台架构在 AI 时代如何演进&#xf…

[linux 驱动]regmap子系统详解与实战

目录 1 描述 2 结构体 2.1 regmap 2.2 regmap_bus 2.3 regmap_config 3 regmap 操作函数 3.1 regmap 申请与初始化 3.1.1 regmap_init_i2c 3.1.2 regmap_init_spi 3.1.3 regmap_exit 3.2 regmap 设备访问 API 函数 3.2.1 regmap_read 3.2.2 regmap_write 4 示例 1…

react组件入门

react应用程序就是由一个个组件搭建而成。组件有类组件和函数组件两种。 我们之前使用create-react-app创建了app&#xff0c;src下放的就是我们应用的源代码&#xff0c;我们基于这些已生成的文件&#xff0c;来学习和验证组件。 类组件 这里我们创建PostList.js更改这个ap…

Java基础——字节流和字符流

字节流和字符流的用法几乎完全一样&#xff0c;区别在于字节流和字符流所操作的数据单元不同&#xff0c;字节流操作的单元是数据单元是8位的字节&#xff0c;字符流操作的是数据单元为16位的字符。 为什么要有字符流&#xff1f; Java中字符是采用Unicode标准&#xff0c;Un…

论文笔记(四十六)RobotGPT: Robot Manipulation Learning From ChatGPT

xx RobotGPT: Robot Manipulation Learning From ChatGPT 文章概括摘要I. 介绍II. 相关工作III. 方法论A. ChatGPT 提示机器人操作B. 机器人学习 IV. 实验A. 衡量标准B. 实验设置C. 模拟实验D. 真实机器人实验E. AB测试 V. 结论 文章概括 引用&#xff1a; article{jin2024r…

关于养育孩子的一点想法

我们许多人总是很看重结果&#xff0c;不重视过程&#xff0c;在工作中有时候确实会这样&#xff0c;但这种想法会经常蔓延到生活中&#xff0c;比如养育孩子&#xff0c;我们总有一个目标&#xff0c;希望他成才&#xff0c;实现某种理想&#xff0c;弥补你人生中的某种缺憾&a…

第18届全国热管会议举办,积鼎科技分享「环路热管相变传热仿真」前沿实践

第18届全国热管会议于9月20日至22日在海滨城市日照举行&#xff0c;该会议由中国工程热物理学会热管专业组主办&#xff0c;山东大学和日照市科学技术协会联合承办&#xff0c;汇聚了全国热管技术领域的专家学者及企业代表。在该会议上&#xff0c;积鼎科技在热管仿真方面的成果…

使用Nginx反向代理为OneAPI配置https访问

OneAPI在实现大模型访问的过程中提供了接近商业化的API生成服务&#xff0c;在商业化运用过程中&#xff0c;使用https加密访问可以提高访问的安全性。那么如何为OneAPI设置https访问呢&#xff1f;接下来&#xff0c;我们就使用Nginx的反向代理实现这一目标。 Nginx是一款高性…

C++ | Leetcode C++题解之第435题无重叠区间

题目&#xff1a; 题解&#xff1a; class Solution { public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {if (intervals.empty()) {return 0;}sort(intervals.begin(), intervals.end(), [](const auto& u, const auto& v) {retur…

应用层 II(文件传输协议FTP)【★★】

&#xff08;★★&#xff09;代表非常重要的知识点&#xff0c;&#xff08;★&#xff09;代表重要的知识点。 一、文件传输协议&#xff08;FTP&#xff09; 文件传送协议 FTP&#xff08;File Transfer Protocol&#xff09;是互联网上使用得最广泛的文件传送协议。FTP 提…

如何使用ssm实现基于VUE.js的在线教育系统+vue

TOC ssm683基于VUE.js的在线教育系统vue 研究背景和来源 目前的网站平台类系统已各种各样&#xff0c;涉及到生活中的每一个部分。购物类、管理类、信息统计类、办公类、官网类等非常丰富。我国各类网站的发展已非常成熟&#xff0c;这些系统依靠网络和计算机技术不断完善发…

Servlet入门:服务端小程序的初试(自己学习整理的资料)

目录 一.前言 二.建立基础结构​编辑 三.具体步骤 找到Tomcat文件并打开Tomcat。 在webapps中创建一个自己的文件夹。 在classes中新建一个Java文件。 在lib中导入需要的jar文件包。 配置环境变量 在Java文件的目录下打开cmd并输入 javac -d . HelloServlet.java进行…

鸿蒙OpenHarmony【小型系统内核(用户态启动)】子系统开发

用户态启动 用户态根进程启动 根进程是系统第一个用户态进程&#xff0c;进程ID为1&#xff0c;它是所有用户态进程的祖先。 图1 进程树示意图 根进程的启动过程 使用链接脚本将如下init启动代码放置到系统镜像指定位置。 #define LITE_USER_SEC_ENTRY __attribute__((s…

关于Hadoop的详细步骤及方案案例

Hadoop 是一个开源的分布式计算平台&#xff0c;主要用于处理大规模数据集。以下是 Hadoop 的详细步骤及一个方案案例。 一、Hadoop 安装步骤 安装 Java Hadoop 需要 Java 运行环境&#xff0c;确保安装了 Java JDK&#xff0c;并设置好环境变量。 下载 Hadoop 从 Hadoop 官方网…

4.1章节python中顺序结构

顺序结构&#xff08;Sequential Structure&#xff09;是最基本、最简单的程序结构。 顺序结构意味着程序中的语句将按照它们在代码中出现的顺序依次执行。这是大多数编程语言中最直观和自然的执行方式。 在Python中编写顺序结构的程序时&#xff0c;你只需将语句按照你希望它…

TypeScript入门 (四)面向对象

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的TypeScript学习总结文档。本文旨在全面介绍 TypeScript 中的面向对象编程&#xff08;OOP&#xff09;思想及其高级特性&#xff0c;…

8.13霍夫变换-直线检测

基本概念 霍夫变换&#xff08;Hough Transform&#xff09;是一种用于检测图像中特定形状&#xff08;如直线、圆、椭圆等&#xff09;的技术。在OpenCV中&#xff0c;霍夫变换主要用于检测直线和圆形。这里我们将详细介绍如何使用OpenCV中的霍夫变换来检测直线。 霍夫变换&…

Cloudflare为网站添加AI审计 可检查AI爬虫何时抓取和抓取频次以及直接屏蔽爬虫

网络服务提供商 Cloudflare 宣布即日起为所有网站 (包括免费托管的网站) 带来 AI 审计功能&#xff0c;该功能目前处于测试阶段&#xff0c;可以分析 AI 公司的爬虫和抓爬数据。新的 AI 审计工具 (Cloudflare AI Audit) 主要提供 AI 公司的爬虫何时到网站来抓取数据、抓取的数据…

Uniapp时间戳转时间显示/时间格式

使用uview2 time 时间格式 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架 <text class"cell-tit clamp1">{{item.create_time}} --- {{ $u.timeFormat(item.create_time, yyyy-mm-dd hh:MM:ss)}} </text>

cmake--file

教程 参数 需要指定文件后缀 GLOB 只搜索当前目录 GLOB_RECURSE &#xff1a;搜索当前目录和其子目录&#xff08;递归搜索&#xff09; RELATIVE 相对于哪个路径进行搜索&#xff0c;获取文件的相对路径。 使用RELATIVE和不使用RELATIVE的区别&#xff1a; 1&#xff…