ZYNQ笔记(四):AXI GPIO

版本:Vivado2020.2(Vitis)

任务:使用 AXI GPIO IP 核实现按键 KEY 控制 LED 亮灭(两个都在PL端)

一、介绍

        AXI GPIO (Advanced eXtensible Interface General Purpose Input/Output) 是 Xilinx 提供的一个可配置的通用输入输出 IP 核(通过 PL 资源实现的 GPIO,不同于 GPIO (E)MIO 是硬件固有的),用于在基于 AXI 总线的系统中实现 GPIO 功能。

主要特性:

  1. 双通道设计:通常提供两个独立的GPIO通道(Channel 1和Channel 2)

  2. 可配置数据宽度:每个通道的数据宽度可独立配置(1-32位)

  3. 输入/输出方向:每个位可独立配置为输入或输出

  4. 中断支持:可配置中断生成功能

二、硬件设计

        (1)配置ZYNQ 需要注意 AXI GPIO 使用了 AXI协议接口,所以 AXI接口、PL端时钟接口、复位接口都需要保留,此外的一些配置如Bank电压、UART串口配置(用于debug)、去掉未使用端口等等不再赘述。注意虽然使用了PL端按键,因为是通过AXI GPIO实现的不需要配置EMIO。

        (2)KEY 和 LED 都单独用一个 AXI GPIO IP(也可以只用一个,只不过分开方便区分),两者配置相同以 KEY 为例配置界面如图所示:

1.后面通过软件设置io的输入输出方向(不勾选All In/Outputs)

2.各只用了1个引脚,故设置1通道(不勾选Enable Dual Channel)、位宽1位(GPIO Width )

3.没有使用中断(不勾选Enable Interruput)

       (3)IP都配置好后点击上面的自动运行和连接,同时会自动补全其他的所需的IP

        (4)最后整体 bd 设计部分如图所示:设计检查、Generate Output Products、 Create HDL Wrapper、管脚约束、Gnerate Bitstream、Export Hardware(包含比特流文件)、启动Vitis

三、软件设计

        AXI GPIO 软件设计相对来说比 MIO、EMIO简单一点,因为是PL端资源实现,输出直接通过拉高引脚电平和清零实现的,不过配置细节上还是有一些区别

        此外AXI GPIO器件ID需要与硬件设计相对应,可以CTRL+左键器件ID跳转到 xparameters.h 查看器件对应情况(或者直接CTRL+左键 xparameters.h 再去翻)

#include "stdio.h"
#include "xil_printf.h"
#include "xparameters.h"
#include "xgpio.h"
#include "sleep.h"//AXI GPIO是软核的gpio所以不用定义管脚,是通过所在通道和掩码来确定控制AXI GPIO哪一位的,通过软件进行置位输出与读取//======================用户自定义宏======================//#define KEY_AXI_GPIO_ID  	XPAR_GPIO_0_DEVICE_ID	//宏定义KEY AXI GPIO 器件ID
#define KEY_CHANNEL  		1						//宏定义KEY所在的axi gpio通道
#define KEY_MASK            0x01   				    //宏定义KEY所在通道掩码(用哪位就置0,这里掩码为了直观取反了,这里表示启用第0位)#define LED_AXI_GPIO_ID  	XPAR_GPIO_1_DEVICE_ID   //宏定义LED AXI GPIO 器件ID
#define LED_CHANNEL  		1						//宏定义LED所在的axi gpio通道
#define LED_MASK            0x01   					//宏定义LED所在通道掩码(用哪位就置0,这里掩码为了直观取反了,这里表示启用第0位)//======================实例化======================//XGpio LED_AXI_GPIO;				//定义LED AXI GPIO驱动实例
XGpio KEY_AXI_GPIO;				//定义KEY AXI GPIO驱动实例//======================函数声明======================//static int  AXI_Gpio_Init();    //声明AXI GPIO初始化函数//======================主函数======================//
int main()
{print("AXI GPIO Test\r\n");AXI_Gpio_Init();while(1){if (XGpio_DiscreteRead(&KEY_AXI_GPIO, KEY_CHANNEL)) //如果按键按下(读取键值){	//写1XGpio_DiscreteWrite(&LED_AXI_GPIO, LED_CHANNEL, 0x01);}else{//清0XGpio_DiscreteClear(&LED_AXI_GPIO, LED_CHANNEL, 0x01);}}return 0;
}//======================AXI GPIO初始化函数======================//
int AXI_Gpio_Init()
{//初始化器件驱动XGpio_Initialize(&LED_AXI_GPIO, LED_AXI_GPIO_ID);XGpio_Initialize(&KEY_AXI_GPIO, KEY_AXI_GPIO_ID);//GPIO方向设置(不同于GPIO (E)MIO , AXI GPIO是 0输出/1输入)XGpio_SetDataDirection(&LED_AXI_GPIO, LED_CHANNEL, ~LED_MASK);XGpio_SetDataDirection(&KEY_AXI_GPIO, KEY_CHANNEL, KEY_MASK);return 0;
}

四、效果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSP认证准备第二天-第36/37次CCF认证

第37次CCF认证-第三题 主要是间接赋值比较难。 自己编写的代码如下&#xff0c;但是有问题&#xff0c;没有解决间接赋值的问题&#xff0c;可以参考一下deepseek的回答。 #include <iostream> #include <bits/stdc.h> using namespace std; long long n,x; char …

Kotlin与HttpClient编写视频爬虫

想用Apache HttpClient库和Kotlin语言写一个视频爬虫。首先&#xff0c;我需要确定用户的具体需求。视频爬虫通常涉及发送HTTP请求&#xff0c;解析网页内容&#xff0c;提取视频链接&#xff0c;然后下载视频。可能需要处理不同的网站结构&#xff0c;甚至可能需要处理动态加载…

FFMEPG常见命令查询

基本参数 表格1&#xff1a;主要参数 参数说明-i设定输入流-f设定输出格式(format) 高于后缀名-ss开始时间-t时间长度codec编解码 表格2&#xff1a;音频参数 参数说明-aframes设置要输出的音频帧数-f音频帧深度-b:a音频码率-ar设定采样率-ac设定声音的Channel数-acodec设定…

Java-对比两组对象找出发生变化的字段工具-支持枚举映射-支持时间-支持显示对应字段中文描述-嵌套list等场景

实体字段比较器&#xff08;对比两组对象找出发生变化的字段工具类开发&#xff09; 支持枚举映射 支持时间 支持显示对应字段中文描述 支持嵌套list等场景 下载地址&#xff1a; Java-对比两组对象找出发生变化的字段工具-支持枚举映射-支持时间-支持显示对应字段中文描述-嵌…

15. git push

基本概述 git push 的作用是&#xff1a;把本地分支的提交推送到远程仓库。推送分支需要满足快进规则&#xff08;Fast-Forward&#xff09;&#xff0c;即远程分支的最新提交必须是本地分支的直接祖先&#xff0c;这个是通过哈希值值进行判断的。 基本用法 1.完整格式 git…

训练数据清洗(文本/音频/视频)

多数据格式的清洗方法 以下是针对多数据格式清洗方法的系统性总结&#xff0c;结合Python代码示例&#xff1a; 一、数据清洗方法总览&#xff08;表格对比&#xff09; 数据类型核心挑战关键步骤常用Python工具文本非结构化噪声去噪→分词→标准化→向量化NLTK, SpaCy, Jie…

Python标准库json完全指南:高效处理JSON数据

一、json库概述 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&#xff0c;Python的json模块提供了JSON数据的编码和解码功能。该模块可以将Python对象转换为JSON字符串&#xff08;序列化&#xff09;&#xff0c;也可以将JSON字符串转换为Python对象&#xf…

微软推出首款量子计算芯片Majorana 1

全球首款拓扑架构量子芯片问世&#xff0c;2025年2月20日&#xff0c;经过近20年研究&#xff0c;微软推出了首款量子计算芯片Majorana 1&#xff0c;其宣传视频如本文末尾所示。 微软表示&#xff0c;开发Majorana 1需要创造一种全新的物质状态&#xff0c;即所谓的“拓扑体”…

【QT】QT中的文件IO

QT中的文件IO 一、有关文件IO的类二、步骤1、定义QFile的对象,与要读写的文件绑定在一起2、打开文件3、读写文件1&#xff09;读取文件2&#xff09;写入文件 4、关闭文件5、示例代码&#xff1a; 三、QString和QByteArray之间的转换1、方法2、示例代码&#xff1a; 四、QFileI…

Nginx 499 错误的原因及解决方法

Nginx 499 错误的原因及解决方法 原因 客户端超时&#xff1a; 客户端在等待服务器响应时超时&#xff0c;导致连接被关闭。 解决方法&#xff1a;优化服务端响应时间&#xff0c;或调大客户端的连接超时时间。 服务端响应过慢&#xff1a; 后端服务处理请求时间过长。 解决方法…

Smith-Waterman 算法(C++实现)

本文实现Smith-Waterman 算法案例&#xff0c;用于局部序列比对。该算法是生物信息学中用于寻找两个 DNA、RNA 或蛋白质序列之间最优局部比对的经典算法&#xff0c;广泛应用于序列相似性分析和功能预测。 问题描述 给定两个生物序列 seq1 和 seq2&#xff0c;如何找到它们的最…

安卓玩机工具-----安卓机型通用 无损备份与恢复数据的工具BackupToolkit 操作过程

常规安卓机型数据备份与恢复的方法及工具 安卓设备的数据备份与恢复是保护个人数据的重要手段之一。以下是几种常用的方法和工具&#xff1a; 方法一&#xff1a;利用内置的云服务进行备份 许多安卓设备提供了内置的云服务&#xff0c;例如华为手机可以通过“华为云空间”来…

oracle 动态性能视图

Oracle 数据库中的 V$SQLAREA 是一个动态性能视图&#xff08;Dynamic Performance View&#xff09;&#xff0c;用于记录共享池&#xff08;Shared Pool&#xff09;中所有 SQL 语句的统计信息。每个 SQL 语句在共享池中存储为一个游标&#xff08;Cursor&#xff09;&#x…

OceanBase V4.3.5 上线全文索引功能,让数据检索更高效

近日&#xff0c;OceanBase 4.3.5 BP1 版本正式推出了企业级全文索引功能。该版本在中文分词、查询效率及混合检索能力上进行了全面提升。经过自然语言模式和布尔模式在不同场景下的对比测试&#xff0c;OceanBase 的全文索引性能明显优于 MySQL。 点击下载 OceanBase 社区版…

海康摄像头AI报警、移动侦测报警等通过Ehome/ISUP协议上报到LiveNVR流媒体平台时如何进行报警配置

海康摄像头AI报警、移动侦测报警等通过Ehome/ISUP协议上报到LiveNVR流媒体平台时如何进行报警配置 1、LiveNVR介绍2、如何配置海康摄像头、录像机通过Ehome/ISUP注册到LiveNVR设备 EHOME 接入配置示例设备 ISUP 接入配置示例直播流接入类型 海康ISUP海康 ISUP 设备ID启用保存 3…

golang gmp模型分析

思维导图&#xff1a; 1. 发展过程 思维导图&#xff1a; 在单机时代是没有多线程、多进程、协程这些概念的。早期的操作系统都是顺序执行 单进程的缺点有&#xff1a; 单一执行流程、计算机只能一个任务一个任务进行处理进程阻塞所带来的CPU时间的浪费 处于对CPU资源的利用&…

Redis基础指令(Windows)

1.cmd命令行启动redis 直接cmd打开整个文件 1.1.启动server 输入指令&#xff1a; redis-server.exe redis.windows.conf 会进入serve端 1.2.启动客户端 &#xff01;&#xff01;重新打开一个cmd&#xff0c;方法和上面一样&#xff01;&#xff01; 之后输入 redis-…

vue:前端预览 / chrome浏览器设置 / <iframe> 方法预览 doc、pdf / vue-pdf 预览pdf

一、本文目标 <iframe> 方法预览 pdf 、word vue-pdf 预览pdf 二、<iframe> 方法 2.1、iframe 方法预览需要 浏览器 设置为&#xff1a; chrome&#xff1a;设置-隐私设置和安全性-网站设置-更多内容设置-PDF文档 浏览器访问&#xff1a; chrome://settings/co…

【C++游戏引擎开发】第11篇:GLFW、GLAD环境搭建与第一个三角形渲染

一、GLFW、GLAD安装 1.1 vcpkg安装相关库 跨平台C++包管理利器vcpkg完全指南 # 安装GLFW vcpkg install glfw3# 安装GLAD vcpkg install glad1.2 初始测试代码 #include <glad/glad.h> #include <GLFW/glfw3.h> int main() {glfwInit();GLFWwindow* window = g…

西门子S7-1500与S7-200SMART通讯全攻略:从基础配置到远程IO集成

以下是一篇关于西门子S7-1500与S7-200SMART通讯的详细教程&#xff0c;包含远程IO模块的配置方法&#xff0c;适用于工业自动化场景的博客发布&#xff1a; 西门子S7-1500与S7-200SMART通讯全攻略&#xff1a;从基础配置到远程IO集成 一、硬件与软件准备 硬件设备 主站&#x…