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

2023-11-12

        最近几年国产化芯片的使用如火如荼,部分国产手册说明杂且描述不清,尤其是一些映射关系使用文字描述非常不直观。博主在使用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组
0xE0003000 480 GPIO A
0xE0003100 458 GPIO B
0xE0003200 426 GPIO C
0xE0003400 394 GPIO D

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

MIO 对应管脚号 GPIO组
0~31 480+(0-31) GPIO A
32-53 458+(0-21) GPIO B
EMIO 对应管脚号 GPIO组
0~31 426+(0-31) GPIO C
32-63 394+(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;
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 机器学习项目

    文章来源 ATYUN AI平台 8800个开源机器学习项目 并从中选取了前30个制成这份清单 它涵盖了2017年1月和12月之间发布的最佳开源机器学习库 数据集和应用程序 Mybridge AI通过受欢迎程度 参与度和新近度来评估质量 为了
  • 安卓开发移植他人项目 配置问题

    在开发移植他人项目会出现各种配置问题 解决方法 1 将build gradle中的包版本改成跟自己本地项目相同的版本 2 在gradle properties中写入 android overridePathCheck true 3 在app
  • 离线包实现app内H5的秒开

    前言 市面上业务复杂 App中近半数业务页面使用H5 页面承载 H5的优势很明显 跨平台 迭代快 开发体验好 H5的劣势同样明显 加载慢 用户体验差 为了提高页面加载速度和成功率 我们在app H5 部分业务加载 采用了离线包方式 如果有业
  • 如何选取合适的运算放大器?

    首先呢 我不是大牛 本文也会有很多不足之处 欢迎大家提出意见 进入正题 在模拟输入部分 一个重要的大类是单端电压和电流的调理和转换 如 0 5V 10V 0 20mA 等 另一个重要的大类是传感器信号的调理和转换 最常用的如电桥 R TD
  • 2021哈工大深入理解计算机系统Lab5(linklab)

    2021哈工大计算机系统lab5 linklab 实验目的 实验环境与工具 硬件环境 软件环境 开发工具 实验内容 LinkBomb程序框架 phase1 全局变量 数据节 phase2 指令 代码节 phase3 符号解析 phase4
  • Python 各种数据保存与读取方法——numpy,dict,dataframe等等

    文章目录 前言 一 写入与读取 1 Dataframe转csv xlsx 2 numpy ndarray转npy 3 dict转txt 总结 前言 往往在做机器学习或者深度学习的时候 数据预处理部分需要大量的时间 如果每次debug都重新预
  • shiro SecurityManager简介说明

    转自 shiro SecurityManager简介说明 下文笔者讲述Shiro SecurityManager的相关简介说明 如下所示 SecurityManager是Shiro框架的核心 典型的Facade模式 Shiro通过Secur
  • leetcode刷题(3)

    各位朋友们大家好 今天是我leedcode刷题系列的第三篇 废话不多说 直接进入主题 文章目录 分割链表 题目要求 用例输入 提示 做题思路 c语言代码实现 Java代码实现 相交链表 题目要求 用例输入 提示 做题思路 c语言实现代码 J
  • ajax异步按顺序执行,Javascript异步执行不按顺序解决方案

    案例分析 比如执行懒加载时候 onscroll 事件触发多次事件时候会调用多次 ajax 回调事件 由于每个事件返回先后次序并不能保证和触发前一致 所以在数据响应返回后所添加的数据顺序就很在 push 到数组上顺序不一致 例子1 var r
  • maven 检查依赖冲突和版本冲突

    在项目发布的时候 一般都需要进行依赖冲突检查或者重复类的检查 这个时候我一般会使用下面的两个命令 mvn U clean package Dmaven test skip true enforcer enforce DcheckDeploy
  • python argparse变量到class变量的转换代码

    github上的项目总喜欢使用argparse bash来运行 这对于快速运行一个项目来说可能有好处 但在debug的时候是很难受的 因为我们需要在 sh文件中修改传入参数 并且不能使用jupyter 以下是把parser转换成显式clas
  • Docker容器 - 启动报错:No space left on device

    目录 运行 报错 解决问题 具体操作 重新运行 运行 docker run it 镜像名 bin bash 报错 docker Error response from daemon mkdir var lib docker overlay2
  • WSL2 忘记用户密码

    步骤一 将默认用户切换为root 在Windows里启动命令提示符 输入 ubuntu2004 config default user root 这就已经将我的ubuntu20 04的默认用户切换为了root 不同的WSL版本可能命令的第一
  • python程序作功率谱、倒频谱

    1 功率谱 from scipy fftpack import fft fftshift ifft from scipy fftpack import fftfreq import numpy as np import matplotlib
  • 服务器cpu占用过高一般是什么原因,如何解决服务器cpu使用率过高的問題

    方法 步骤 1 打开任务管理器 关闭一些占用cpu较高的进程 但是不要关闭System Idle Process这个进程 这个进程是系统管理的进程 另外有很多个svchost exe 这些进程也不要随便关闭 不然会引起关机或者系统重启 2
  • 磁盘分区管理

    普通分区 root zhaikaiyun fdisk dev sdb 给磁盘sdb创建分区 Welcome to fdisk util linux 2 23 2 Changes will remain in memory only unti
  • GB2312 汉字拼音对照表(6727字)

    http zh transwiki org wiki index php GB2312 E6 B1 89 E5 AD 97 E6 8B BC E9 9F B3 E5 AF B9 E7 85 A7 E8 A1 A8 啊 a 阿 a e 埃 a
  • Java.lang.Byte类之shortValue()方法的功能说明

    转自 Java lang Byte类之shortValue 方法的功能说明 下文笔者将讲述Java lang Byte类中shortValue 方法的功能简介说明 如下所示 shortValue 方法的功能 java lang Byte s
  • pycharm错误ERROR: Command errored out with exit status 1:

    报错 ERROR Command errored out with exit status 1 错误原因 python版本与pycharm要求的版本不一致 解决方法 1 在pycharm中找到File 打开Settings 2 在Setti
  • FMQL在linux下GPIO的映射关系与使用

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