GPIO与MIO控制LED——ZYNQ学习笔记2

一、GPIO简介

        ZYNQ 分为 PS 和 PL 两部分,那么器件的引脚( Pin)资源同样也分成了两部分。 ZYNQ PS 中的外设可以通过 MIO( multiplexed I/O,多路复用 I/O)模块连接到 PS 端的引脚上,也可以通过 EMIO( extended multiplexed I/O interface, 扩展多路 I/O 接口) 连接到 PL 端的引脚。 Zynq-7000 系列芯片一般有 54 个 MIO,个别芯片如 7z007s 只有 32 个。        

        GPIO 是英文“general purpose I/O”的缩写,即通用的输入/输出。它是 ZYNQ PS 中的一个外设,用于观测和控制器件引脚的状态。 图 3.1.1 是 GPIO 的框图,从中我们可以看到 GPIO 分为 4 个 Bank,其中 Bank0和 Bank1 连接到 MIO;而 Bank2 和 Bank3 连接到 EMIO。

MIO是什么:多路复用IO,为ZYNQ PS端的与一个IO外设,用于观测(Input)和控制(Output)器件的引脚状态。

bank502、500、501为PS端,bank34、34、35、13(7010无bank13)为PL端

bank502专用于连接DDR3、bank500、501为MIO接口(实际用户IO有54个)

EMIO是什么:扩展的IO 连接PL端引脚

1、当PS端引脚不够用时,可以使用EMIO来进行扩展,从而使用PL端IO;

2、当某个设配硬件已经连接到PL端,但是通过Verilog代码实现较复杂的时候,可以使用EMIO让PS来驱动

二、GPIO分组

        除 Bank1 之外的 Bank 都具有 32bit, Bank1 只具有 22bit 是因为总共只有 54 个 MIO,其中 32bit 的 Bank0控制了 MIO[0~31],剩下的 MIO[31~53]就由 22bit 的 Bank1 控制。 Bank2 和 Bank3 用于控制扩展的 MIO 即EMIO,也就是说总共可以有 32+32=64 个 EMIO。

DATA_RO 是数据只读寄存器,通过该寄存器能够观察器件引脚上的值。如果 GPIO 信号配置为输出,则通常会反映输出上驱动的值,写入此寄存器将被忽略。

DATA 是数据寄存器,该寄存器控制 GPIO 信号配置为输出时要输出的值。该寄存器的所有 32 位都是一次写入的。读取该寄存器返回写入 DATA 或 MASK_DATA_ {LSW, MSW}的先前值,它不会返回器件引脚上的当前值。

MASK_DATA_LSW 和 MASK_DATA_MSW 是数据掩码寄存器,该寄存器使软件能够有选择地一次更改所需的输出值。可以写入最多 16 位的任意组合, MASK_DATA_LSW 控制 Bank 的低 16 位, MASK_DATA_MSW 控制高 16 位。未写入的那些位保持不变并保持其先前的值。读取该寄存器返回写入DATA 或 MASK_DATA_ {LSW, MSW}的先前值;它不会返回器件引脚上的当前值。该寄存器避免了对未更改位的读-修改-写序列的需要。

DIRM 是方向模式寄存器,用于控制 I/O 引脚是用作输入还是输出。当 DIRM [x] == 0 时,输出驱动器被禁用,该引脚作为输入引脚使用。

OEN 是输出使能寄存器。将 I/O 配置为输出时,该寄存器控制是否启用输出。禁用输出时,引脚为 3态。当 OEN [x] == 0 时,输出被禁用。

 

 三、试验任务

        本章的实验任务是使用 GPIO 通过两个 MIO 引脚控制 PS 端两个 LED 的亮灭,实现底板上 PS_LED0、PS_LED1 两个 LED 灯同亮同灭的效果。

四、程序设计

1、系统框图:

2、整体设计思路: 

 3、UG585手册阅读

 按照手册提供步骤:重置、时钟步骤在建立工程初期已经完成

配置引脚:查看硬件设计:

LED挂载在MIO0、7、8引脚上,因此我们要配置这些引脚,

首先写配置方向模式寄存器,通过计算0000_0001_1000_0001 -- > 0x00000181

其次写配置输出寄存器,通过计算000_0001_1000_0001 -- > 0x00000181

最后写数据到引脚,使用带屏蔽的方式写入

        mask数据为:1111_1110_0111_1110  --> 0xfe7e

        data数据为:0000_0001_1000_0001  --> 0x0181   

        因此写入数据为:  0xfe7e0181

4、查阅寄存器地址

根据配置过程,我们要依次查阅GPIO基地址、GPIO方向控制偏移、GPIO输出使能偏移、GPIO写数据低16位偏移

#define GPIOPS_BASE_ADDRESS   	0xE000A000	//GPIO基地址
#define XGPIOPS_DIRM_OFFSET   	0X00000204	//GPIO方向控制偏移
#define XGPIOPS_OUTEN_OFFSET  	0X00000208	//GPIO输出使能偏移
#define XGPIOPS_DATA_LSW_OFFSET 0X00000000	//GPIO写数据低16位偏移
#define XGPIOPS_DATA_MSW_OFFSET 0x00000004	//GPIO写数据高16位偏移

  5、寄存器版本编写代码

#include <stdio.h>
#include "xil_io.h"
#include "sleep.h"#define GPIOPS_BASE_ADDRESS   	0xE000A000	//GPIO基地址
#define XGPIOPS_DIRM_OFFSET   	0X00000204	//GPIO方向控制偏移
#define XGPIOPS_OUTEN_OFFSET  	0X00000208	//GPIO输出使能偏移
#define XGPIOPS_DATA_LSW_OFFSET 0X00000000	//GPIO写数据低16位偏移
#define XGPIOPS_DATA_MSW_OFFSET 0x00000004	//GPIO写数据高16位偏移int main(){printf("GPIO MIO TEXT!\n");//对GPIO引脚进行配置(MIO7、8、0)//配置方向模式寄存器Xil_Out32( GPIOPS_BASE_ADDRESS + XGPIOPS_DIRM_OFFSET ,0x00000181);//配置输出使能寄存器Xil_Out32( GPIOPS_BASE_ADDRESS + XGPIOPS_OUTEN_OFFSET ,0x00000181);while(1){sleep(1);//写数据到GPIO引脚  点亮LEDXil_Out32( GPIOPS_BASE_ADDRESS + XGPIOPS_DATA_LSW_OFFSET ,0xfe7e0181);sleep(1);//写数据到GPIO引脚  熄灭LEDXil_Out32( GPIOPS_BASE_ADDRESS + XGPIOPS_DATA_LSW_OFFSET ,0xfe7e0000);}return 0;
}

6、库函数开发

 导入平台工程

五、下载验证

#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//MIO0XGpioPs Gpio;	/* The driver instance for GPIO Device. */int main(){XGpioPs_Config *ConfigPtr;//初始化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);//设置输出使能   0:输入    1:输出XGpioPs_SetOutputEnablePin(&Gpio, MIO_LED1, 1);XGpioPs_SetOutputEnablePin(&Gpio, MIO_LED2, 1);XGpioPs_SetOutputEnablePin(&Gpio, MIO_LED0, 1);while(1){//往GPIO写高电平      点亮LED1XGpioPs_WritePin(&Gpio, MIO_LED1, 0x1);XGpioPs_WritePin(&Gpio, MIO_LED2, 0x1);XGpioPs_WritePin(&Gpio, MIO_LED0, 0x1);sleep(1);//往GPIO写低电平      熄灭LED1XGpioPs_WritePin(&Gpio, MIO_LED1, 0x0);XGpioPs_WritePin(&Gpio, MIO_LED2, 0x0);XGpioPs_WritePin(&Gpio, MIO_LED0, 0x0);sleep(1);}printf("GPIO MIO TEXT!\n");return 0 ;
}

六、总结

 

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

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

相关文章

Python近红外光谱数据分析

ChatGPT4.0在近红外光谱数据分析、定性/定量分析模型代码自动生成等方面的强大功能&#xff0c;同时更加系统地学习人工智能&#xff08;包括传统机器学习、深度学习等&#xff09;的基础理论&#xff0c;以及具体的代码实现方法掌握ChatGPT4.0在科研工作中的各种使用方法与技巧…

C++学习笔记----8、掌握类与对象(一)---- 对象中的动态内存分配(1)

1、FRIENDS c允许类声明为其它类&#xff0c;其它类的成员函数&#xff0c;或者非成员函数为friend。可以访问protected与private数据成员与成员函数。例如&#xff0c;假设你有两个类Foo与Bar。你可以指定Bar类是Foo类的一个friend&#xff1a; class Foo {friend class Bar;…

C++之哈希 --- 哈希的应用(位图布隆过滤器)

一、位图 1.1 位图的基本概念 在如今网络交通高度发达的时代&#xff0c;网购已经成为我们日常生活中的一部分。没当双11到来&#xff0c;各大平台都会迎来一次网购的高潮。这就会让服务器短时间内获得高达几十亿上百亿的数据&#xff0c;那我们该如何去处理这海量的数据呢&am…

FortiGate 防火墙 DNS 地址转换(DNS Translation)

简介 本例介绍 FortiGate 防火墙 DNS 地址转换&#xff08;DNS Translation&#xff09;配置方法。 一、 网络结构 网络结构如下图&#xff0c;PC1 连接在 FG60B 的 Internal 接口&#xff0c;FG60B 的 Wan1 接口连接 FG80CM 的 DMZ 接口&#xff0c;Wan1 接口开启 DNS 服务…

开发环境搭建之windows和ubuntu系统互传文件

ubuntu和Windows主机之间的文件传输有很多种&#xff0c;安装VMware Tools后&#xff0c;可以设置虚拟机共享文件夹&#xff0c;将Windows主机的文件目录挂载到ubuntu中&#xff0c;实现文件共享。 设置方法如下&#xff0c;点击菜单栏的“虚拟机”&#xff0c;选择“设置”。…

【LLM大模型】如何让大模型更好地进行场景落地?

自ChatGPT模型问世后&#xff0c;在全球范围内掀起了AI新浪潮。 有很多企业和高校也随之开源了一些效果优异的大模型&#xff0c;例如&#xff1a;Qwen系列模型、MiniCPM序列模型、Yi系列模型、ChatGLM系列模型、Llama系列模型、Baichuan系列模型、Deepseek系列模型、Moss模型…

[OPEN SQL] SELECT语句

本次操作使用的数据库表为SCUSTOM&#xff0c;其字段内容如下所示 航班用户(SCUSTOM) 1.SELECT语句 SELECT语句从数据库表中读取必要的数据 1.1 读取一行数据 语法格式 SELECT SINGLE <cols>... WHERE cols&#xff1a;数据库表的字段 从数据库表中读取一条数据可使…

用CPU训练机器学习模型

人工智能最近的成功通常归功于 GPU 的出现和发展。GPU 的架构通常包括数千个多处理器、高速内存、专用张量核心等&#xff0c;特别适合满足人工智能/机器学习工作负载的密集需求。 不幸的是&#xff0c;人工智能开发的快速增长导致对 GPU 的需求激增&#xff0c;使得 GPU 难以…

Java面试篇基础部分- 锁详解

可重入锁 可重入锁也叫作递归锁,是指在同一个线程中,在外层函数获取到该锁之后,内存的递归函数还可以获取到该锁。在Java语言环境下,ReentrantLock和Synchroinzed都是可重入锁的代表。 公平锁与非公平锁 公平锁(Fair Lock)是指在分配锁之前检查是否有线程在排队等待获取…

学习MRI处理过程中搜到的宝藏网站

今天浏览网页查到了一些宝藏网站&#xff0c;正好记录一下&#xff0c;后面搜到好东东再接着填充&#xff0c;方便查阅~ &#xff08;1&#xff09;牛人网站 这个网站是在搜集seed关键词时发现的&#xff0c;用pdf文档记录&#xff0c;可下载查阅&#xff0c;条理清晰&#xf…

ios swift5 UITextView占位字符,记录限制字数

文章目录 截图代码&#xff1a;具体使用代码&#xff1a;CustomTextView 截图 代码&#xff1a;具体使用 scrollView.addSubview(contentTextView)contentTextView.placeholderLabel.text LocalizableManager.localValue("write_comment")contentTextView.maxCharac…

ActiveMQ 的传输协议机制

ActiveMQ 通过网络连接器这种连接机制来实现客户端与服务端之间的通信&#xff0c;ActiveMQ支持的传输协议在activeMQ 安装目录的 conf/activemq.xml中的<transportConnectors>标签之内。 ActiveMQ 支持的 client 端和 broker 端的通讯协议有&#xff1a;TCP、NIO、UDP、…

芝法酱学习笔记(0.3)——SpringBoot下的增删改查

零、前言 书接上回&#xff0c;我们搭建了windows下的开发环境&#xff0c;并给出了一个hello world级别的多模块SpringBoot项目。 毕竟java后端开发&#xff0c;离不开数据库的操作&#xff0c;为方便后面内容的讲解&#xff0c;这里再做一期铺垫&#xff0c;core模块下新增一…

洛汗2搬砖攻略:VMOS云手机一键搬砖辅助教程!

在《洛汗2》的世界中&#xff0c;玩家往往需要长时间刷怪、任务和升级&#xff0c;手动操作往往会耗费大量时间和精力。这时候&#xff0c;使用VMOS云手机来辅助游戏&#xff0c;将是一个极佳的选择。VMOS云手机专为《洛汗2》提供了专属定制版云手机&#xff0c;内置游戏安装包…

2.Spring-容器-注入

注册&#xff1a;将组件放入容器中&#xff1b; 注入&#xff1a;让容器按需进行操作&#xff1b; 一、Autowired&#xff1a;自动注入组件 原理&#xff1a;Spring调用容器的getBean 二、Qualifier 精确指定 精确指定&#xff1a;如果容器中组件存在多个&#xff0c;则使用…

【Linux】ubuntu 16.04 搭建jdk 11 环境(亲测可用)

目录 0.环境 1.题外话 2.详细 0.环境 windows11 主机 Virtual Box 7.0 ubuntu 16.04系统 想搭建个 jdk11的环境&#xff0c;用于项目 1.题外话 因为虚拟机与主机传输文件不方便&#xff0c;所以可以尝试用共享文件夹的方式传输&#xff0c;亲测可用&#xff0c;参考以下博…

LeetCode题练习与总结:二叉树的最近公共祖先--236

一、题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也…

windows 安装配置nginx

进入到对应的nginx的配置文件里 80的这个server块里 添加 location / { return 301 https://$host$request_uri; # 301 永久重定向到 HTTPS } (如果是http重定向https&#xff0c;其他的可以删了 只保留截图中的内容) https的server块里面添加 证书的…

SLM7888兼容FAN7888—— 低压三相半桥驱动的理想之选

SLM7888系列型号&#xff1a; SLM7888CH&#xff1a;SOP20W SLM7888MD&#xff1a;TSSOP20 SLM7888是一款高压、高速的功率MOSFET和IGBT驱动器&#xff0c;它提供三个独立的高边、低边输出驱动信号便于用于三相电路。采用专有的高压集成电路和锁存免疫CMOS技术&…

二分查找算法(5) _山脉数组的峰顶索引

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 二分查找算法(5) _山脉数组的峰顶索引 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c;…