Official Document
Documentation\devicetree\bindings\gpio\gpio.txt
Documentation\gpio\Pinctrl-bindings.txt
Documentation\devicetree\bindings\Pinctrl\Pinctrl-bindings.txt
1. Pincontrol and GPIO Subsystem Synopsis
Pincontrol:是控制使用那些引脚复用为什么功能模块,怎么配置这个引脚。相当于IOMUX功能
GPIO Subsystem:是具体配置引脚的信息
使用方法:
指定节点的配置Pincontrol使用状态(status),Pincontrol状态(pinctrol-name),Pincontrol状态引用的GPIO Subsystem配置(pinctrl-x)
编写GIOP Subsystem配置信息
其中4、5、6步骤为GPIO Subsystem实现
2. GPIO Subsystem
关于GPIO Subsystem存在已下两个属性
gpio-controller;
#gpio-cells = <2>
gpio-controller
表示这个节点是GPIO Controller
#gpio-cells = <2>
则表示此控制器每个引脚需要2个32位的数来表示。常见用法为一个cell表示引脚,一个cell表示有效电平
GPIO_ACTIVE_HIGH : 高电平有效
GPIO_ACTIVE_LOW : 低电平有效
GPIO Controller的定义是原厂的工作,我们使用时使用[<name>-]gpios
去声明引脚就ok了
reset-gpios = <&gpio_spi 1 GPIO_ACTIVE_LOW>;
gpios = <&gpio5 5 GPIO_ACTIVE_HIGH>;
2.1 Linux中操作GIPO Subsystem
在驱动中存在两套操作GPIO子系统的接口:基于操作符(descriptor-base);老一套(legacy)
这里只使用基于操作符这一套
2.1.1 基于操作符(descriptor-base)
带有gpiod_
前缀,它使用gpio_desc
结构体表示一个引脚
头文件
#include <linux/gpio/consumer.h> // descriptor-based
常用函数
gpiod_get | 设备树节点中只存在单个引脚时使用 power-gpios = <&gpio 1 GPIO_ACTIVE_LOW>; |
---|---|
gpiod_get_index | 设备树节点中存在多个引脚时使用 led-gpios = <&gpio 15 GPIO_ACTIVE_HIGH>, <&gpio 16 GPIO_ACTIVE_HIGH>, <&gpio 17 GPIO_ACTIVE_HIGH>; |
gpiod_get_array | |
devm_gpiod_get | 含有devm表示设备资源管理器。此类函数是一种自动释放资源的机制。当设备不存在时资源便会自动释放。使用devm申请内存时,如果失败可以直接返回。设备的销毁函数会自动释放已经申请的GPIO(推荐使用) |
devm_gpiod_get_index | |
devm_gpiod_get_array | |
gpiod_direction_input | |
gpiod_direction_output | |
gpiod_get_value | 此处获取值为逻辑值,并非实际值 |
gpiod_set_value | 此处设置值为逻辑值,并非实际值。生效值可以在设备树中进行调整。这样可以确保函数的适配性 |
gpiod_put | |
gpiod_put_array |
devm_gpiod_put | |
---|---|
devm_gpiod_put_array |
2.2 GPIO命令行操作
echo 111 > /sys/class/gpio/export # 创建相关的file
echo in > /sys/class/gpio/gpio111/direction # 设置方向为in还out
echo 1 > /sys/class/gpio/gpio111/value # 设置值
echo 111 > /sys/class/gpio/unexport # 删除相关文件
原文地址:http://www.cnblogs.com/burnk/p/16908703.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性