【ZYNQ】GPIO 与 AXI GPIO

在嵌入式开发中,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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

物理服务器介绍

物理服务器介绍 概述分类按服务器应用分类按服务器结构分类塔式服务器机架式服务器刀片式服务器机架式服务器与刀片式服务器的对比按处理器个数分类按处理器架构分类 主板概述工作原理物理结构技术参数 CPU概述工作原理指令集相关技术技术参数主流产品 内存概述类型相关技术技术…

Python中文件操作和异常处理

文章目录 一、文件操作1.概念2.文件3.二进制 二、基本文件操作三、乱码产生四、with open() as f五、代码实现文件复制粘贴六、try ... except ...七、代码比较 一、文件操作 1.概念 帮助我们把爬虫抓下来的数据,进行保存。 2.文件 在计算机中,没有p…

副业树洞聊天项目/树洞倾诉/陪陪系统源码/树洞源码下载搭建

随着社会的发展和人们生活水平的提高,越来越多的人在面临心理压力、情感困扰或生活困境时,需要一个可以宣泄、倾诉和寻求支持的平台。而传统的人际交往方式往往会遇到难以排解的问题,比如担心被他人知晓自己的隐私等,这就导致了人…

Java期末复习指南(1):知识点总结+思维导图,考试速成!

🔖面向对象 📖 Java作为面向对象的编程语言,我们首先必须要了解类和对象的概念,本章的所有内容和知识都是围绕类和对象展开的! ▐ 思维导图1 ▐ 类和对象的概念 • 简单来说,类就是对具有相同特征的一类事…

Leaflet【三】图层组 geoJson 热力图

图层组 LayerGroup 用于将几个图层分组并作为一个整体处理。如果你把它添加到地图上,任何从该组中添加或删除的图层也会在地图上添加/删除。 L.layerGroup([marker1, marker2]).addTo(map);使用图层组有什么好处呢?这个在后面有说到,这里的…

Unity射击游戏开发教程:(19)控制生命进度条

在这篇文章中,我们将讨论如何添加一个不是条形而是心形的生命条。这种方法不使用 UI 滑块,而是使用 UI 图像。 第一步是创建要填充的栏的轮廓。我使用 Aseprite 制作像素艺术,并慢慢地将我的太空射击游戏转变为经典的像素街机游戏。

网络安全、信息安全、数据安全的定义与区别

信息安全 信息安全是指信息的保密性、完整性、可用性和真实性的保持。从定义角度来说,信息安全没有严格标准定义,但从信息安全涉及的内容出发,信息安全确保信息存储或传输中的信息,不被他人有意或无意的窃取与破坏。这里的“信息”…

Leetcode刷题笔记3

18. 四数之和 18. 四数之和 - 力扣(LeetCode) 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应&…

vue期末复习选择题1

1. 下面哪一项描述是错误的?(B) A.$("ul li:gt(5):not(:last)")选取ul标记里面索引值大于5且不是最后一个的li元素B.$("div").find("span")选取div元素的子元素spanC.$("div.showmore > a")选取…

合约开发的基本结构剖析及前置知识梳理

前置知识点 上下文变量初步 合约函数的背后是transaction,上下文变量访问的是transaction中的信息两个上下文变量:tx和msg ERC20 规范代码实现Metamask测试 ganache-cli的安装 安装 npm install -g ganache-cli启动 ganache-cli如果出现以下这种…

本特利330103-03-09-10-02-00 PLC模块技术分析与应用探讨

本特利330103-03-09-10-02-00 PLC模块技术分析与应用探讨 一、引言 在工业自动化领域中,可编程逻辑控制器(PLC)作为核心控制设备,其性能的稳定性和可靠性直接关系到整个生产线的运行效率。本特利(Bentley)…

求第 N 个泰波那契数 | 动态规划

1.第 N 个泰波那契数 题目连接:1137. 第 N 个泰波那契数 泰波那契序列 Tn 定义如下: T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2给你整数 n,请返回第 n 个泰波那契数 Tn 的值。 2.什么是动态规划 在解决这道问题之前…

获取日期区间的所有日期

借助moment.js 转换指定格式,首先安装npm install moment --save methods:{enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等let daysList [];let SDate this.$moment(startDate);let EDate …

计算机系统基础 8 循环程序

概要 两种实现方法——分支指令实现和专门的循环语句实现以及有关循环的优化。 分支指令实现 倒计数 …… MOV ECX,循环次数 LOOPA:…… …… DEC ECX JNE LOOPA 正计数 …… MOV ECX,0 LOOPA: …… INC ECX CMP …

U-Boot menu菜单分析

文章目录 前言目标环境背景U-Boot如何自动调起菜单U-Boot添加自定义命令实践 前言 在某个厂家的开发板中,在进入它的U-Boot后,会自动弹出一个菜单页面,输入对应的选项就会执行对应的功能。如SD卡镜像更新、显示设置等: 目标 本…

ESP8266实现获取天气情况

利用太极创客提供的ESP8266 心知天气库获取天气情况并显示 心知天气库地址: ESP8266-心知天气: 本库主要功能为使用ESP8266物联网开发板通过心知天气 API 获取天气等信息。 clone到本地: git clone https://gitee.com/taijichuangke/ESP8266-Seniverse.git 安装该…

go语言的一些常见踩坑问题

开始之前,介绍一下​最近很火的开源技术,低代码。 作为一种软件开发技术逐渐进入了人们的视角里,它利用自身独特的优势占领市场一角——让使用者可以通过可视化的方式,以更少的编码,更快速地构建和交付应用软件&#…

ArkUI-X开发指南:【SDK配置和构建说明】

ArkUI-X SDK配置和构建说明 ArkUI-X SDK是ArkUI-X开源项目的编译产物,可将ArkUI-X SDK集成到现有Android和iOS应用工程中,使开发者基于一套ArkTS主代码,就可以构建支持多平台的精美、高性能应用。SDK内容包含ArkUI跨平台运行时,组…

【高频】从输入URL到页面展示到底发生了什么?

一、相关衍生面试问题: 浏览器输入美团网站,从回车到浏览器展示经历了哪些过程 ? http输入网页之后的流程? 百度搜索页面,从点开搜索框,到显示搜索页面经历了什么? 二、探究各个过程&#x…

[Algorithm][回溯][记忆化搜索][最长递增子序列][猜数字大小Ⅱ][矩阵中的最长递增路径]详细讲解

目录 1.最长递增子序列1.题目链接2.算法原理详解3.代码实现 2.猜数字大小 II1.题目链接2.算法原理详解3.代码实现 3.矩阵中的最长递增路径1.题目链接2.算法原理详解3.代码实现 1.最长递增子序列 1.题目链接 最长递增子序列 2.算法原理详解 题目解析:从每个位置&am…