Zynq-7000、FMQL45T900的GPIO控制(三)---linux管脚编号计算

news2024/12/28 4:06:04

本文主要对在Linux下使用zynq-7000或者FMQL45T900控制MIO/EMIO

首先内核配置项

如下,这个不用太多关注,一般都是默认打开的

CONFIG_GPIO_SYSFS=y
CONFIG_SYSVIPC=y
CONFIG_GPIO_ZYNQ=y

两者的控制都是流程都是一样的,在细节上又区别

首先都在/sys/class/gpio/查看对应节点

FMQL45T900

Zynq-7000平台

这里两者的明显的区别在于FMQL45T900节点个数比较多有四个,这里简单分析一下原因

两者的GPIO的驱动设计不一样

Zynq驱动设计从设备树zynq-7000.dtsi可以看出确实只有一个节点

		gpio0: gpio@e000a000 {
			compatible = "xlnx,zynq-gpio-1.0";
			#gpio-cells = <2>;
			clocks = <&clkc 42>;
			gpio-controller;
			interrupt-controller;
			#interrupt-cells = <2>;
			interrupt-parent = <&intc>;
			interrupts = <0 20 4>;
			reg = <0xe000a000 0x1000>;
		};

 FMQL45T900中设备文件fmsh-psoc.dtsi可以看出有四个节点

gpio0: gpio@e0003000 {
			compatible = "snps,dw-apb-gpio";
			reg = <0xe0003000 0x100>;
			#address-cells = <1>;
			#size-cells = <0>;
			clocks = <&clkc NCLK_APB_GPIO>;
			status = "disabled";

			porta: gpio-controller@0 {
				compatible = "snps,dw-apb-gpio-port";
				bank-name = "porta";
				gpio-controller;
				#gpio-cells = <2>;
				snps,nr-gpios = <32>;
				reg = <0>;
				interrupt-controller;
				#interrupt-cells = <2>;
				interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
			};
		};

		gpio1: gpio@e0003100 {
			compatible = "snps,dw-apb-gpio";
			reg = <0xe0003100 0x100>;
			#address-cells = <1>;
			#size-cells = <0>;
			clocks = <&clkc NCLK_APB_GPIO>;
			status = "disabled";

			portb: gpio-controller@0 {
				compatible = "snps,dw-apb-gpio-port";
				bank-name = "portb";
				gpio-controller;
				#gpio-cells = <2>;
				snps,nr-gpios = <22>;
				reg = <0>;
				interrupt-controller;
				#interrupt-cells = <2>;
				interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
			};
		};

		gpio2: gpio@e0003200 {
			compatible = "snps,dw-apb-gpio";
			reg = <0xe0003200 0x100>;
			#address-cells = <1>;
			#size-cells = <0>;
			clocks = <&clkc NCLK_APB_GPIO>;
			status = "disabled";

			portc: gpio-controller@0 {
				compatible = "snps,dw-apb-gpio-port";
				bank-name = "portc";
				gpio-controller;
				#gpio-cells = <2>;
				snps,nr-gpios = <32>;
				reg = <0>;
				interrupt-controller;
				#interrupt-cells = <2>;
				interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
			};
		};

		gpio3: gpio@e0003400 {
			compatible = "snps,dw-apb-gpio";
			reg = <0xe0003400 0x100>;
			#address-cells = <1>;
			#size-cells = <0>;
			clocks = <&clkc NCLK_APB_GPIO>;
			status = "disabled";

			portd: gpio-controller@0 {
				compatible = "snps,dw-apb-gpio-port";
				bank-name = "portd";
				gpio-controller;
				#gpio-cells = <2>;
				snps,nr-gpios = <32>;
				reg = <0>;
				interrupt-controller;
				#interrupt-cells = <2>;
				interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
			};
		};

怎么计算我们需要操作的原理图上的IO管脚

Zynq-7000假如要操作MIO10

从上图可以看到设备中第一个IO编号为906,这个编号属于MIO的编号。即第一个GPIO为gpio906。你需要操作某个GPIO直接找出对应的GPIO编号,比如:我要使用MIO10对应第11个GPIO对应的编号为:gpio916。注意第一个为906对应MIO0。

FMQL45T900的计算稍微复杂一点,提供了四个根节点,分别对应每个bank

其他MIO/EMIO可以根据下表格计算出来,这里列举几个实际使用的IO

Linux节点

对应bank

对应IO

最大偏移量

gpiochip394

BANK3起始节点

EMIO32

32

gpiochip426

BANK2起始节点

EMIO0

32

gpiochip458

BANK1起始节点

MIO32

54-32

gpiochip480

BANK0起始节点

MIO0

32

这里列举几个实际使用的管脚对应的节点

MIO32 ->   gpiochip458

MIO43 ->   gpiochip469

EMIO0 ->   gpiochip426

EMIO5 ->   gpiochip431

EMIO6 ->   gpiochip432

EMIO7 ->   gpiochip433

EMIO8 ->   gpiochip434

EMIO9 ->   gpiochip435

EMIO10 ->  gpiochip436

用这几篇帖子深入探讨一下ZYNQ-7000/FMQL45T900的GPIO相关设计,都说GPIO最简单,这样记录下来起始还是很费劲的。可以根根据需求,直接跳转到相关的内容

Zynq-7000、FMQL45T900的GPIO控制(一)-----SDK配置GPIO普通输入输出模式,以及GPIO编号_大牛攻城狮的博客-CSDN博客

Zynq-7000、FMQL45T900的GPIO控制(二)-----SDK配置GPIO外部中断输入_大牛攻城狮的博客-CSDN博客

Zynq-7000、FMQL45T900的GPIO控制(三)---linux管脚编号计算_大牛攻城狮的博客-CSDN博客

Zynq-7000、FMQL45T900的GPIO控制(四)---linux应用层配置GPIO输入控制_大牛攻城狮的博客-CSDN博客

Zynq-7000、FMQL45T900的GPIO控制(五)---linux应用层配置GPIO输出控制_大牛攻城狮的博客-CSDN博客

Zynq-7000、FMQL45T900的GPIO控制(六)---linux驱动层配置GPIO输入输出控制_大牛攻城狮的博客-CSDN博客

(1条消息) Zynq-7000、FMQL45T900的GPIO控制(七)---linux驱动层配置GPIO中断输入_大牛攻城狮的博客-CSDN博客

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

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

相关文章

Go | 一分钟掌握Go | 9 - 通道

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱编写&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 前言 在Java中&#xff0c;多线程之间的通信方式有哪些&#xff1f;记得吗&…

浪潮之巅 OpenAI有可能是历史上第一个10万亿美元的公司

淘金时代很像 如果你那个时候去加州淘金&#xff0c;一大堆人会死掉&#xff0c;但是卖勺子的人、卖铲子的人永远可以赚钱。所谓的shove and pick business。 大模型是平台型机会。按照我们几天的判断&#xff0c;以模型为先的平台&#xff0c;将比以信息为先的平台体量更大。…

带你深入学习k8s--(四) 控制器(k8s核心)

目录 一、概念 1、什么是控制器 2、控制器执行流程 3、控制器类型 二、控制器的使用 1、ReplicaSet 2、Deployment 1、版本迭代 2、回滚 3、修改滚动更新策略 4、暂停与恢复 3、daemonset 4、job 5、cronjob 前言&#xff1a; 上一章我们说到&#xff0c;pod有…

C++——入门基础知识

0.关注博主有更多知识 C知识合集 目录 1.命名空间 1.1命名空间的定义 1.2命名空间的使用 1.3命名空间定义的补充 2.输入与输出 3.缺省参数 3.1全缺省参数 3.2半缺省参数 3.3缺省参数的补充 4.函数重载 4.1C为什么支持函数重载&#xff1f; &#xff15;.引用 5.…

Wine运行器3.2.1——Windows虚拟机模块支持非X86架构

不写太多啥了&#xff0c;详细介绍看这里就行&#xff1a;https://bbs.deepin.org/post/248098 更新内容 ※1、Windows 虚拟机安装工具支持非 X86 架构&#xff1b; ※2、应用打包器可以与星火应用商店配合构建 arm/all 全架构的 Wine 包&#xff1b; ※3、Windows 虚拟机安装…

【MATLAB图像处理实用案例详解(12)】——基于纹理特征的指纹识别方法

目录 一、指纹图像预处理1.1 图像对比度增强1.2 图像二值化1.3 图像滤波 二、指纹图像特征提取 指纹识别系统主要涉及4个步骤&#xff1a;指纹图像采集、图像预处理、特征提取、特征匹配。一开始&#xff0c;通过指纹读取设备取得图像&#xff0c;并对原始图像进行初步处理&…

《斯坦福数据挖掘教程·第三版》读书笔记(英文版) Chapter 2 MapReduce and the New Software Stack

来源&#xff1a;《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT Chapter 2 MapReduce and the New Software Stack Computing cluster means large collections of commodity hardware, including conventional processors (“compute nodes”) connected by Ethernet …

学习HCIP的day.03

目录 OSPF&#xff1a;开放式最短路径优先协议 OSPF的数据包 -- 5种 OSPF的状态机 OSPF的工作过程 OSPF的基础配置 关于OSPF协议从邻居建立成为邻接的条件 OSPF的接口网络类型 OSPF&#xff1a;开放式最短路径优先协议 无类别链路状态型IGP协议&#xff1b;由于其基于拓…

golang Gin实现websocket

golang使用 Gin实现 websocket&#xff0c;这里笔者重新搭建一个项目 1、创建项目安装依赖 项目名为 go-gin-websocket 在指定文件夹下&#xff0c;新建项目文件夹 go-gin-websocket 进入项目文件夹&#xff0c;打开cmd窗口&#xff0c;在项目&#xff08;go-gin-websocket&a…

【Git 入门教程】第九节、Git的最佳实践

Git是一个强大的版本控制系统&#xff0c;可以帮助开发者管理和协调代码库。然而&#xff0c;正确使用Git并不总是容易。本文将介绍一些Git的最佳实践&#xff0c;以帮助开发者更好地利用Git来管理和协调代码库。 一、编写有意义的提交信息 在使用Git时&#xff0c;编写有意义…

Python编程IDE的选择

Python环境安装之后&#xff0c;接下来就是选择编写Python程序的编辑器了&#xff0c;这里就给大家推荐几种Python编辑器&#xff0c;我们简称这些编辑器为IDE。好的编程IDE可以提高编写代码效率&#xff0c;那咱话不多说&#xff0c;直接开始推荐&#xff01; IDLE 首先&…

有人USR-M100边缘主动上报电流数据到TCP服务器

前两天跟强哥配置了有人的USR-M100模块&#xff0c;实现了采集的电流信号主动上报服务器的功能&#xff0c;昨天去第一污水厂配置了1台、第二污水厂配置了5台、第三污水厂配置了1台&#xff0c;能够将数据上报到甲方的云平台&#xff0c;这里记录一下配置过程&#xff0c;方便以…

推荐4款免费好用的chatGPT平台

1 ShellGPT 这是一款出色的客户端&#xff0c;无需APIkey和科学上网即可访问chatGPT3.5以及绘画AI。项目的github地址如下&#xff1a;https://github.com/akl7777777/free-chatgpt-client-pub/&#xff0c;可在主页下载windows、linux和macOS的安装包&#xff0c;安装后即可使…

力扣刷题2023-04-30-1——题目:剑指 Offer II 007. 数组中和为 0 的三个数

题目&#xff1a; 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复…

React之动态路由创建以及解决刷新白屏问题

动态路由的创建和动态菜单的创建几乎类似&#xff0c;只不过的是&#xff0c;动态路由需要导入组件。这样才能完成跳转。 动态路由与动态菜单一样都需要封装一个转化函数&#xff0c;将后端传来的数据进行转换&#xff0c;转换成我们需要的格式。 需要导入的依赖 导入路由use…

kali: kali工具-Ettercap

kali工具-Ettercap ettercap工具&#xff1a; 用来进行arp欺骗&#xff0c;可以进行ARP poisoning&#xff08;arp投毒&#xff09;&#xff0c;除此之外还可以其他功能&#xff1a; ettercap工具的arp投毒可以截取web服务器、FTP服务器账号密码等信息&#xff0c;简略后打印出…

C++篇--类大小计算、this指针

文章目录 一、类大小计算二、this指针 一、类大小计算 类的大小是只计算它的成员变量或者自定义成员&#xff0c;不会计算它的成员函数大小。 #include<iostream> using namespace std;class A1 { public:void fun(){_a 1;_b 2;}int _a;int _b; };int main() {cout <…

干货 | 赵亚雄:大模型、AI经济和AI基础设施

大家好&#xff0c;我是算想未来的创始人CEO赵亚雄。今天非常高兴到母校来做简短的分享。我们最近会几乎是被ChatGPT、OpenAI等等话题各类的信息轮番轰炸。我希望借助这个机会&#xff0c;把自己这一段时间来思考的有关AI基础设施还有AGI再到大模型等内容&#xff0c;从相对抽象…

ElasticSearch创建文档以及索引文档的详细流程

当我们发起一个查询请求之后&#xff0c;ES是怎么处理这个请求然后返回数据的呢&#xff1f;今天就来详细说一下。 首先看一下整体结构&#xff1a; 在集群模式下一个索引有多个分片&#xff0c;在上图中有三个节点(一个主节点两个从节点)&#xff0c;一个索引被分为两个分片(…

基于协同过滤的旅游推荐系统设计与实现(论文+源码)_kaic

1 绪论 1.1 研究背景及意义 1.2 国内外研究现状 1.3 研究目标与意义 1.4 主要研究工作 2 相关理论介绍 2.1HTML与JavaScript 2.2 MySQL数据库 2.3 协同过滤算法简介 3 系统分析与设计 3.1 系统需求分析 3.1.1 功能性需求 3.1.2 安全性需求 3.2 系统总体架构 3.3 功能模块设计 3…