【ZYNQ】GPIO 与 AXI GPIO

news2025/2/22 21:32:00

在嵌入式开发中,GPIO 是最常见的外设。GPIO 是 General Purpose I/O 的缩写,译为通用输入/输出。GPIO 用于连接外部设备,例如按键、传感器等,实现数字信号的输入或输出功能。本文主要介绍 Zynq GPIO 的基本概念,并对比 GPIO 与 AXI GPIO 的使用方法。

GPIO

        Zynq GPIO 被称为 MIO,是 Multiplexed I/O 的缩写,译为多路复用 I/O。一般 MIO 指Zynq PS 端的用户管脚,而 PL 端的用户管脚属于扩展的 MIO,因此也被称为 EMIO(Extendable Multiplexed I/O)。

        从下图可以看到,Zynq PS 端的 MIO 管脚由 MIO Multiplexer 模块控制,PL 端的用户管脚需要通过 EMIO 接口访问。

        Zynq GPIO 以 Bank 的形式组织,其中 MIO 位于 Bank 0 和 Bank1,共有 54 个;EMIO 则位于 Bank2 和 Bank3,共有 64 个。

        Zynq 每个 GPIO 的功能都可以单个或以 Bank 为单位进行动态编程,并由软件通过一系列内存映射寄存器进行控制。GPIO 可以通过读写相关寄存器进行访问,也可以使用高层次的方式,即使用结构体与函数读写 GPIO。

        下图是 xgpiops.h 头文件关于 XGpioPs_Config 和 XGpioPs 结构体的定义。

XGpioPs API

#include "xparameters.h"
#include "xgpiops.h"

#define  GPIO_0          0
#define  GPIO_DEVICE_ID  XPAR_XGPIOPS_0_DEVICE_ID

void XGpioPs_Init(XGpioPs *GpioInstance, u32 deviceID) {
	// XGpioPs_Config object definition
	XGpioPs_Config *ConfigPtr;
	ConfigPtr = XGpioPs_LookupConfig(deviceID);
	XGpioPs_CfgInitialize(GpioInstance, ConfigPtr, ConfigPtr->BaseAddr);

	// Gpio initialization
	XGpioPs_SetDirectionPin(GpioInstance, GPIO_0, 1);
	XGpioPs_SetOutputEnablePin(GpioInstance, GPIO_0, 1);
	XGpioPs_WritePin(GpioInstance, GPIO_0, 0);
}

int main(void) {
    XGpioPs Gpio;
    XGpioPs_Init(&Gpio, GPIO_DEVICE_ID);

    // Todo
    return -1;
}

AXI GPIO

        AXI GPIO 是 Xilinx 提供的 GPIO IP,使用 AXI 接口通信,需要消耗一部分 PL 逻辑资源。

从下图可以看到,AXI GPIO 包含两个 GPIO 通道,每个通道最多 32 个 GPIO。

使用 AXI GPIO 时,需要 include 对应的头文件 xgpio.h,下图是 xgpio.h 中关于 XGpio_Config 和 XGpio 结构体的定义。

XGpio API

        XGpio_Initialize() 函数调用了 XGpio_LookupConfig() 和 XGpio_CfgInitialize() 这两个函数实现 GPIO 初始化,因此用户初始化只需要调用 XGpio_Initialize() 函数即可。

#include "xparameters.h"
#include "xgpio.h"

#define  GPIO_0          0x01
#define  GPIO_CHANNEL    1
#define  GPIO_DEVICE_ID  XPAR_GPIO_0_DEVICE_ID

int XGpio_Init(XGpio *GpioInstance, u16 DeviceId) {
	int Status;

	/* Initialize the GPIO driver */
	Status = XGpio_Initialize(GpioInstance, DeviceId);
	if (Status != XST_SUCCESS) {
		return XST_FAILURE;
	}

	/* Set the direction for all signals as inputs except the GPIO_0 output */
	XGpio_SetDataDirection(GpioInstance, GPIO_CHANNEL, ~GPIO_0);

	return XST_SUCCESS;
}

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

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

相关文章

AIGC基础教学:AI+建筑设计,一场划时代变革的序幕已经拉开

2015年9月,美的集团本着把艺术融入民间的理念,邀请了安藤忠雄设计正在筹建中的美术馆。 在历经长达近120天的设计工作之后,美术馆于同年12月动工。这座具有岭南建筑文化意境的美术馆,后来荣获2020年美国建筑大师奖(Architecture …

VMM5310替代方案 (LT8713SX)三路DP或者三路HDMI

兼容USB上的VESA DisplayPort Alt模式 c型标准1.0b ▪DP Alt模式支持引脚分配C, D和E ▪符合USB供电规范3.0 ▪兼容USB Type-C电缆和连接器 规范1.3 ▪内置三CC逻辑和PD控制器充电器和 正常的沟通 ▪支持UFP和DFP数据角色 ▪支持电源,接收器和DRP电源角色 …

Tina-Linux -- 5. 网络通信(有线网络,无线网络,SSH链接)

有线网络 bash 指令 ifconfig eth0 192.168.2.222 netmask 255.255.255.0 up route add default gw 192.168.2.1开机自启 修改网络设置文件 /etc/init.d/S40network #!/bin/sh # # Start the network.... ## Debian ifupdown needs the /run/network lock directory mkdir …

明天(周六)下午!武汉Linux爱好者线下沙龙,我们在华中科技大学等你!

2024 年 5月 25 日(周六)下午,我们将在「武汉市洪山区」 珞喻路 1037 号华中科技大学南五楼 613 室举办武汉 Linux 爱好者线下沙龙(WHLUG),欢迎广大 Linux 爱好者来到现场,与我们一同交流技术&a…

flutter开发实战-flutter播放PAG动画

flutter开发实战-flutter播放PAG动画 最近开发过程中,遇到了PAG动画,这里进行记录一下。 一、什么是PAG? 官网:https://pag.art/ Portable Animated Graphics 是一套完整的动效工作流解决方案。 目标是降低或消除动效相关的研…

【小tips】当机器里面有多个版本的gcc时,该如何切换当前的gcc版本?

背景切换gcc版本 背景 有时候因为项目需求,可能不同的项目需要不同的gcc版本,所以机器上会安装多个版本的gcc,那我们如何切换到想要使用的版本? 切换gcc版本 比如我的机器上有两个版本的gcc: 我当前的版本是gcc-4…

【C++提高编程-03】----C++之STL常用容器基础实战

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

智简云携手云器Lakehouse打造一体化大数据平台,释放数据价值

导读 本篇分享的是智简云使用云器Lakehouse升级数据平台的实践总结。 智简云,是一家拥有十余年历史的科技公司,专注于企业服务领域,开发了两款核心产品:基于PASS平台的客户关系管理(CRM)系统和为中小型用…

加密与解密(第四版)】第二十三章笔记

第二十三章 代码的二次开发 23.1 数据对齐 23.2 增加空间 利用区块空隙(注意区块属性) 增加区块(增加一个块头、增加块头指向的数据段、调整文件映像的尺寸(SizeOfImage)) 23.3 获得函数的调用信息 修…

用Python的PyAutoGUI库控制鼠标滚轮

哈喽,大家好,我是木头左! 轻松上手:安装与导入 要开始使用pyautogui库,你需要做的第一件事就是确保它已经被安装在你的Python环境中。你可以通过运行以下命令来安装: pip install pyautogui安装完成后&am…

【Web】CISCN 2024初赛 题解(全)

目录 Simple_php easycms easycms_revenge ezjava mossfern sanic Simple_php 用php -r进行php代码执行 因为ban了引号,考虑hex2bin,将数字转为字符串 php -r eval(hex2bin(16进制)); 注意下面这段报错,因为加不了引号,开…

稳定性大升级!EMCS全球服务网络携手NineData实现数据实时同步

易客满(ECMS Express)专注于提供全球化的国际物流解决方案和经济快递服务,服务网络覆盖全球主要贸易市场的国际物流公司。ECMS拥有国际快递、国际货代、仓储供应链全球覆盖服务能力。 1. 易客满(ECMS)数据复制的技术挑…

初始Java篇(JavaSE基础语法)—— 内部类

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:JavaSE 目录 内部类的概念 内部类的种类 使用举例: 1. 静态内部类: 2. 实例内部类 3. 局部内部类 4. 匿名内部…

跨境电商赛道,云手机到底能不能化繁为简?

当下国内电商背景: 从零售额的数据来看:随着互联网的普及和消费者购物习惯的改变,国内电商市场规模持续扩大。据相关数据显示,网络消费亮点纷呈,一季度全国网上零售额达到了3.3万亿元,同比增长12.4%。这表…

linux 上除了shell、python脚本以外,还有什么脚本语言用得比较多?

在开始前我有一些资料,是我根据网友给的问题精心整理了一份「 Linux的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!说到在 Linux下的编程&#xf…

TECHNIUM INTERNATIONAL: 利用 AI 和 TECHNIUM 矩阵协议引领区块链创新

在充满活力的加密货币和区块链技术领域,Technium International 以领军者的姿态迅速崛起,跻身科技巨头的顶尖行列。Technium International 成立于 2018 年,总部设于塞席尔,透过人工智慧(AI)和区块链技术的…

云计算-基础设施和管理机制(Infrastructure and Management Mechanisms)

逻辑网络边界(Logical Network Perimeter) 逻辑网络边界是软件控制的虚拟网络,它是物理网络的一部分。其主要思想是隔离逻辑网络,防止不希望的访问,同时仍然为合法用户提供访问权限。下图显示了云系统中一个简单的逻辑…

Windws MySQL 8.4 LTS的安装(保姆级教程)

Windws MySQL 8.4 LTS的安装(保姆级教程) 一、Mysql版本二、Mysql下载三、Mysql安装3.1 Mysql安装3.2 Mysql配置 四、Mysql环境变量配置五、验证Mysql 一、Mysql版本 美国时间 2024 年 4 月 30 日,Oracle正式发布了MySQL数据库8.0.37版本的更…

初步学习pygame,使用pygame搭建简单的窗口效果

在VSCode上使用pygame 第一步:创建 Python 虚拟环境 打开 VSCode 中的 Terminal(在菜单栏中选择 View > Terminal)使用 cd 命令切换到你的项目文件夹输入以下命令来创建一个新的虚拟环境: python3 -m venv env这将在你的项目…

机械臂与Realsense D435 相机的手眼标定ROS包

本教程主要介绍机械臂与 Realsense D435 相机手眼标定的配置及方法。 系统:Ubuntu 20.0.4 ◼ ROS:Noetic ◼ OpenCV 库:OpenCV 4.2.0 ◼ Realsense D435:librealsense sdk(2.50.0)、realsense-ros 功能包&…