linux设备树gpio控制不了

linux设备树gpio控制不了,第1张

linux设备树gpio控制不了是linux设备树不能直接控制gpio。根据查询相关信息得知linux设备树不能直接控制gpio,linux设备树有旁迟两个模式的用户态和内核态,gpio *** 作只能在内核态咐团进行,而应用程序运行在用户态。在内核空间控制gpio有两种方法。

1、通过调用gpiolib的接口来衡启橘控制gpio。

2、通过ioremap来控制gpio。

1.gpio_set_value(unsigned gpio, int value)用来设置gpio寄存器的值

2.gpio_direction_output(unsigned gpio, int value)用来设置gpio为输出功能,同时设置gpio输出的值。

一般来说,设置一个GPIO口为输出,先执行一次gpio_direction_output,然后接下来只需执行gpio_set_value就行了。

3.gpio_direction_input(unsigned gpio)用来设置gpio为输入功能

4.gpio_get_value(unsigned gpio)用来获取gpio口的输入的值

5.在使用gpio口之前,先用gpio_request(unsigned gpio, const char* label)申请gpio口的使用,若申请成功,则说明该gpio口未被使用。

6.在使用完gpio口之后,用gpio_free(unsigned gpio)释放gpio口。

7.如何获取gpio口呢,可以查看内核中对应版型的相关文件,也可以自己进行计算,比如GPIOA1的gpio为1,GPIOB2为34。

8.gpio口的通用函数接口定芹轮御义在gpiolib.c文件中,声明则在gpio.h中。

9 Linux上使用的C编译器是GNU C编译器

10

内联函数是使用inline关键字声明的函数,也成内嵌函数,它主要的作用是解决程序的运行效率。

使用内联函数的时候要注意:

1.递归函数不能定义为内联函数

2.内联函数一般适合于不存在while和switch等复杂的结构且只有1~5条语句的小函数上,否则编译系统将该函数视为普通函数。

3.内联函数只能先定义后使用,否则编译系统也会把它认为是普通函数。嫌岩

4.对内联桐耐函数不能进行异常的接口声明。

本文基于 RockPI 4A 单板 Linux 4.4 内核介绍 RK3399 Linux GPIO 功能。

GPIO(General Purpose Input/Output Port) :通用输入输出端口。

除作为一般的输入/输出功能外,还可以配置为中断和模拟 PWM、I2C 等接口功能。

RK3399 GPIO 属性如下:

1、一共有5组 GPIO(GPIO0~4) ,每组 GPIO 为一个 Bank ,共32个引脚。每个 Bank 包括4个 Group (GPIOA(0~7) ~ D(0~7)) 。不是所有 Bank 都有 GPIOA~D 的编号, RK3399 共122个 GPIO 引脚。

2、穗辩和所有 GPIO 都可被配置为 CA55或CA53 的中断功能,且 GPIO0 和 GPIO1 可用于系统低功耗唤醒模式。

3、在上电复位后,所有 GPIO 默认输入状态。

4、软件可配置 GPIO 驱动强度。

RK3399 引脚在系统中显示如下:

RK3399 GPIO 引脚号计算方式:

例:

以 ROCKPI 4A 单板 WIFI 模块电源( GPIO0_B2 )为例,介绍 DTS 中 GPIO 配置。

在系统启动后,可以查看 GPIO ,命令如下:

注:

如果debugfs没有挂载,使用下面命令挂载

Linux 内核 GPIO 主要实现文件:

GPIO 子系统有两套 API :

1、基于描述符(descriptor-based)

前缀为: gpiod_ 。

参考: Documentation/gpio/consumer.txt

2、老版本接口(legacy)

前缀为: gpio_ 。

参考: Documentation/gpio/gpio-legacy.txt

3、常用API

GPIO 还有很多接口,就不一一列举了。

RK3399 GPIO 控制器驱动实现文件: drivers/pinctrl/pinctrl-rockchip.c ,涉及主要函数:

所有 GPIO 子系统的 API 最终都会调到 SOC 的 GPIO 控制器驱动函数。

ROCKPi 4A 单板有个40个引脚的扩展口,引用 radxa 图片,见下图。

1、进入测试目录

2、猜盯导出GPIO

在使用 GPIO2_A7 前,需要导出该引脚。方法:配置 export 后,会出现 gpio71 节点。

测试时,注意不要使用在程序中已经申请过或配置为其它功能的 GPIO 引脚。

3、配置GPIO方向

设置 GPIO2_A7 的输入/输出方向。

in :表示输入。

out :表示输出。

active_low :用于中断配置中高电平或低电平有效。

edge :用于中断配置中上升沿或下降沿有效。

4、配置GPIO输出值

在 GPIO 为输入时,通过 value 查询 GPIO 的输灶链入电平(高或低电平)。

在 GPIO 为输出时,通过 value 配置 GPIO 的输出电平(高或低电平)。

5、查看GPIO

查看已经导出的 GPIO71 。

6、取消导出

使用完 GPIO2_A7 后,需要进行释放。方法:配置 unexport 后, gpio71 节点会消失。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8258976.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存