Linux 学习笔记:GPIO 应用编程

一、应用层如何控制GPIO

与LED 设备一样,GPIO 通用也是通过sysfs 方式进行操控,进入到/sys/class/gpio 目录下,如下所示:
在这里插入图片描述

1.1 gpiochipX:

当前SOC 一共包含5 个 GPIO 控制器,分别是:GPIO1,GPIO2,GPIO3,GPIO4,GPIO5。在这里,分别是gpiochip0 、gpiochip32 、gpiochip64 、gpiochip96 、gpiochip128 这5个文件夹,每个gpiochipX 文件夹用来管理一组GPIO。
在这里插入图片描述

1.2 export

用于将指定编号的GPIO 引脚导出。在使用GPIO 引脚之前,需要将其导出,导出成功之后才能使用它。注意export 文件是只写文件,不能读取,将一个指定的编号写入到export 文件中即可将对应的GPIO 引脚导出,例如:

echo 0 > export  #导出编号为0的GPIO 引脚。对应当前SOC,也就是GPIO1_IO0。

导出成功之后会发现在/sys/class/gpio 目录下生成了一个名为gpio0 的文件夹(gpioX, X 表示对应的编号)。这个文件夹就是导出来的GPIO 引脚对应的文件夹,用于管理、控制该GPIO 引脚。

并不是所有的GPIO 引脚都可以成功导出,如果对应的GPIO 已经在内核中被使用了,那就无法成功导出,打印如下信息:
Device or resource busy

1.3 unexport

将导出的GPIO 引脚删除。当使用完GPIO 引脚之后,我们需要将导出的引脚删除,同样该文件也是只写、不可读的。例如:

echo 0 > unexport  # 删除导出的编号为0的GPIO 引脚

删除成功之后,之前生产的gpio0 文件夹就会消失。

二、GPIO 控制器:gpiochipX

每一个gpiochipX 文件夹用来管理一组GPIO 。进入gpiochip0 ,显示如下:
在这里插入图片描述

2.1 base

与gpiochipX 中的X 相同,表示该控制器所管理的这组GPIO 引脚的最小编号。
在这里插入图片描述

2.2 label

该组GPIO 对应的标签,也就是名字。
在这里插入图片描述

2.3 ngpio

该控制器所管理的GPIO 引脚的数量。引脚编号的范围是:base ~ base + ngpio- 1
在这里插入图片描述

三、引脚控制: gpioX

以前面所生产的gpio0 为例,进入到gpio0 目录,文件如下:
在这里插入图片描述

我们主要关心的文件是:active_low 、 direction 、edge 、value 这四个属性文件。

3.1 direction

配置GPIO 引脚为输入或输出模式。该文件可读、可写。

echo "out" > direction # 配置gpio 为输出模式
echo "in" > direction # 配置gpio 为输入模式

3.2 value

  • 在gpio 配置为输出模式下,向value 文件写入0,控制gpio 引脚输出低电平;写入1,则控制gpio 输出高电平。
  • 在gpio 配置为输入模式下,读取value 文件获取gpio 引脚的输入电平状态。

3.3 active_low

这个属性文件用于控制极性,可读可写,默认情况下为0 。 例如:

active_low 等于0时

echo "0" > active_low
echo "out" > direction
echo "1" > value  # 输出高
echo“0” > value # 输出低

active_low 等于1 时

echo "1" > active_low
echo "out" > direction
echo "1" > value  # 输出低
echo“0” > value # 输出高

3.4 edge

控制中断的触发模式,该文件可读可写。在配置GPIO 引脚的中断触发模式之前,需将其设置为输入模式:

  • 非中断引脚: echo "none" > edge
  • 上升沿触发: echo "rising" > edge
  • 下降沿触发: echo "falling" > edge
  • 边沿触发: echo "both" > edge
    当引脚被配置为中断后可以使用poll() 函数监听引脚的电平状态变化。
  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gdut_llkkyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值