FMQL在linux下GPIO的映射关系与使用

news2024/11/17 20:52:49

        最近几年国产化芯片的使用如火如荼,部分国产手册说明杂且描述不清,尤其是一些映射关系使用文字描述非常不直观。博主在使用GPIO功能输出的时候反复看了几遍再去尝试控制耗费了不少时间。现结合相关文档总结GPIO映射表格,方便读者使用。

1、 GPIO引脚确定方法

GPIO 引脚编号 = 控制器对应的基值 + 控制引脚偏移值

 对于 FMQL 来说, PS 的 4 个 GPIO 控制器对应信息如下
GPIO A 控制 MIO 引脚[31:0],对应基地址 0xE0003000
GPIO B 控制 MIO 引脚[53:32] ,对应基地址 0xE0003100
GPIO C 控制 EMIO 引脚信号[31:0] ,对应基地址 0xE0003200
GPIO D 控制 EMIO 引脚信号[63:32] ,对应基地址 0xE0003400

从上图可以直观看出基址对应的号。

基址对应管脚号GPIO组
0xE0003000480GPIO A
0xE0003100458GPIO B
0xE0003200426GPIO C
0xE0003400394GPIO D

根据算法可直接列出MIO和EMIO映射关系。

MIO对应管脚号GPIO组
0~31480+(0-31)GPIO A
32-53458+(0-21)GPIO B
EMIO对应管脚号GPIO组
0~31426+(0-31)GPIO C
32-63394+(0-31)GPIO D

2、 GPIO 的使用方法
从上面知道了 linux 内核 gpio 编号后,就可以把对应 gpio 接口导出到 linux 用户空间,然后
在 linux 的用户空间使用命令或者在应用程序中使用文件操作的方式操作 gpio 了。
ls -l /sys/class/gpio/, 可以发现其中包含有两个文件 export、 unexport 和若干
gpiochipN 类型文件夹。

export :用于将指定编号的引脚导出,作为 GPIO 使用
unexport :用于将导出的 GPIO 删除掉
gpiochipN :当前芯片中包含的 GPIO 控制器

举例说明:
1、添加设备接口 gpio500(使用MIO20,得出对应管脚编号为480+20=500)
输入如下命令, 可以发现,目录下出现了 gpio500。
echo 500 > /sys/class/gpio/export
direction: 设置输出还是输入模式
设置为输入: echo “in” > direction
设置为输出: echo “out” > direction
value : 输出时,控制高低电平;输入时,获取高低电平
高电平: echo 1 > value
低电平: echo 0 > value
edge : 控制中断触发模式,引脚被配置为中断后可以使用 poll() 函数监听引脚
非中断引脚: echo “none” > edge
上升沿触发: echo “rising” > edge
下降沿触发: echo “falling” > edge
边沿触发: echo “both” > edge
2、 删除 gpio500, 输入如下命令:
echo 500 > /sys/class/gpio/unexport
3、 用户态使用文件操作的方式操作 gpio
例如: 监控 gpio500 的电平变化步骤如下
(1)、 shell 中输入如下命令
echo “in” > /sys/class/gpio/gpio500/direction
echo “both” > /sys/class/gpio/gpio500/ edge
(2)、在应用程序中对”/sys/class/gpio/gpio500/value”执行 select/poll 操作,代码如下:

#include <stdio.h>
#include <fcntl.h>
#include <poll.h>
#include <unistd.h>
int main()
{
struct pollfd fds[1];
char buffer[16];
int len;
int fd=open("/sys/class/gpio/gpio500/value",O_RDONLY);
if(fd<0)
{
perror("open '/sys/class/gpio/gpio500/value' failed!\n");
return -1;
}
fds[0].fd=fd;
fds[0].events=POLLPRI;
while(1)
{
if(poll(fds,1,0)==-1)
{
perror("poll failed!\n");
return -1;
}
if(fds[0].revents&POLLPRI)
{
if(lseek(fd,0,SEEK_SET)==-1)
{
perror("lseek failed!\n");
return -1;
}
if((len=read(fd,buffer,sizeof(buffer)))==-1)
{
perror("read failed!\n");
return -1;
}
buffer[len]=0;
printf("%s",buffer);
}
}
return 0;
}

欢迎大家指正!若描述有误,请私信或留言告知!
 

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

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

相关文章

【Spring Boot 】Spring Boot 统一功能处理

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 前言 1. Spring 拦截器 1.1 自定义拦截器 1…

6月19日第壹简报,星期一,农历五月初二

6月19日第壹简报&#xff0c;星期一&#xff0c;农历五月初二坚持阅读&#xff0c;静待花开1. 未来10天江南华南等地多降雨过程&#xff0c;国家防总将防汛四级响应范围扩至八省份&#xff0c;加派工作组赴地方协助指导。2. “一天有四季、十里不同天”&#xff0c;“最美”独库…

LVS - DR集群

LVS - DR集群 数据包流向分析&#xff1a; &#xff08;1&#xff09;客户端发送请求到 Director Server&#xff08;负载均衡器&#xff09;&#xff0c;请求的数据报文&#xff08;源 IP 是 CIP,目标 IP 是 VIP&#xff09;到达内核空间。 &#xff08;2&#xff09;Direct…

【VS2022】win 10 / win 11:Visual Studio 2022 社区版免费下载与安装

目录 一、Visual Studio 2022 下载 二、Visual Studio 2022 安装 三、Visual Studio 2022 快捷方式创建 四、Visual Studio 2022 使用 一、Visual Studio 2022 下载 Visual Studio 2022 官方下载https://visualstudio.microsoft.com/zh-hans/downloads/首先登陆 Visual Stu…

attention unet + cldice 论文总结

Blood Vessel Segmentation from Low-Contrast and Wide-Field Optical Microscopic Images of Cranial Window by Attention-Gate-Based Network论文总结 论文&#xff1a;Blood Vessel Segmentation by Attention-Gate-Based Network 目录 一、论文背景和出发点 二、创新点…

vue源码阅读之Observer

我们上次学习了vue数据驱动的概念&#xff0c;以及简单的vue怎么知道数据更新&#xff0c;然后采取行动的。今天我们就来继续深入学习&#xff0c;vue怎么把数据和视图给绑定在一起的&#xff0c;数据发生变化&#xff0c;视图怎么会自动发生变化的。 vue中的Observer 之前讲…

chatgpt赋能python:Python截取某一段文字

Python截取某一段文字 Python是最流行的编程语言之一&#xff0c;用于开发各种类型的应用程序&#xff0c;包括Web应用程序、桌面应用程序、游戏等。在本文中&#xff0c;我们将讨论如何使用Python截取某一段文字。这对于Web开发者和SEO专家非常有用&#xff0c;因为他们需要查…

【干货】Android系统定制基础篇:第八部分(增加以太网设置菜单、支持多摄像头、替换默认签名)

一、增加以太网设置菜单 Android 系统设置默认并没有以太网相关设置项&#xff0c;但以太网功能是支持的&#xff0c;因此我们仅仅需要增加设置界面即可。以太网设置界面如下&#xff1a; 修改 diff --git a/packages/apps/Settings/AndroidManifest.xml b/packages/apps/Se…

【第六次】21级计科计算机组成原理课外练习

【第六次】21级计科计算机组成原理课外练习 一、单选题二、多选题三、填空题 一、单选题 2-1 假定某计算机按字节编址&#xff0c;采用小端方式&#xff0c;有一个float型变量x的地址为0xffffc000&#xff0c;x12345678H&#xff0c;则在内存单元0xffffc001中存放的内容是 A.…

计算机网络和Linux网络

计算机网络和Linux网络 计算机网络概论 什么是计算机网络 计算机网络&#xff08;结构上&#xff09; 由节点&#xff08;主机、网络交换设备设备&#xff09;、边&#xff08;通信设备&#xff09;、协议构成协议&#xff1a;对等层的实体在通讯过程中应该遵守的规则的集合&…

软考A计划-网络工程师-易混淆知识汇总

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

chatgpt赋能python:Python编程:如何隐藏输入以保护信息安全?

Python编程&#xff1a;如何隐藏输入以保护信息安全&#xff1f; 随着数字化时代的到来&#xff0c;人们越来越多地依赖于互联网和技术设备进行通信和交易。然而&#xff0c;信息安全成为越来越大的问题&#xff1a;黑客和其他恶意分子通过各种手段获取和利用个人信息。为保障…

【瑞萨RA_FSP】GPT—— PWM功能详解

文章目录 一、GPT比较匹配功能详解1. 锯齿波PWM模式&#xff08;普通PWM模式&#xff09;2. 三角波PWM模式1&#xff08;波谷32位传输&#xff09;3. 三角波PWM模式2&#xff08;波峰和波谷32位传输&#xff09;4. 三角波PWM模式3&#xff08;波谷64位传输&#xff09;5. 设置死…

【随机种子初始化】一个神经网络模型初始化的大坑

1 问题起因和经过 半年前写了一个模型&#xff0c;取得了不错的效果&#xff08;简称项目文件1&#xff09;&#xff0c;于是整理了一番代码&#xff0c;保存为了一个新的项目&#xff08;简称项目文件2&#xff09;。半年后的今天&#xff0c;我重新训练这个整理过的模型&…

【C数据结构】带头双向循环链表_HDList

目录 带头双向循环链表_HDList 【1】链表概念 【2】链表分类 【3】带头双向循环链表 【3.1】带头双向循环链表数据结构与接口定义 【3.2】带头双向循环链表初始化 【3.3】带头双向循环链表开辟节点空间 【3.4】带头双向循环链表销毁 【3.5】带头双向循环链表头插 【3…

【C数据结构】带头单向非循环链表_HList

目录 带头单向非循环链表_HList 【1】链表概念 【2】链表分类 【3】有头单向非循环链表 【3.1】非循环链表数据结构与接口定义 【3.2】带头单向非循环链表初始化 【3.3】带头单向非循环链表释放空间 【3.4】带头单向非循环链表创建节点 【3.5】带头单向非循环链表头插…

HTML学习(二)

视频 <video width"320" height"240" controls> <source src"movie.mp4" type"video/mp4"> <source src"movie.ogg" type"video/ogg"> </video> 音频 <audio controls> <…

C++【AVL树】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f383;操作环境&#xff1a; Visual Studio 2019 版本 16.11.17 文章目录 &#x1f307;前言&#x1f3d9;️正文1、认识AVL树1.1、AVL树的定义 2、AVL树的插入操作2.1、抽象图2.2、插入流程…

控制层调用接口的http请求封装

目录 0.碎碎念1.controller层2.util层3.测试3.1中间层调用GET请求3.2中间层调用POST请求 0.碎碎念 因为只是为了写这个帮助类&#xff0c;解耦&#xff0c;不敢拿已经写了一堆的代码改&#xff0c;就单独拆了个项目出来&#xff0c;持久层全是mybatisplus生成的。     所以…

Kafka源码解析之索引

Kafka源码解析之索引 索引结构 Kafka有两种类型的索引&#xff1a; TimeIndex: 根据时间戳索引&#xff0c;可以通过时间查找偏移量所在位置&#xff0c;目录下以.timeindex结尾Index: 根据偏移量索引&#xff0c;.index结尾 构建索引时机 由log.index.interval.bytes 参…