【BSP开发学习5】GPIO子系统

本文详细介绍了Linux GPIO子系统的API函数,包括gpio_request、gpio_free、gpio_direction_input、gpio_direction_output、gpio_get_value和gpio_set_value,以及如何利用这些函数实现按键的读取。通过实例展示了GPIO在设备驱动中的应用,如按键设备的动态管理。

基于GPIO子系统的 IO口控制

gpio 子系统 API 函数

1、gpio_request 函数

gpio_request 函数用于申请一个 GPIO 管脚,在使用一个 GPIO 之前一定要使用 gpio_request
进行申请,函数原型如下:

int gpio_request(unsigned gpio, const char *label)

函数参数和返回值含义如下:

  • gpio:要申请的 gpio 标号,使用 of_get_named_gpio 函数从设备树获取指定 GPIO 属性信
    息,此函数会返回这个 GPIO 的标号。
  • label:给 gpio 设置个名字。
  • 返回值:0,申请成功;其他值,申请失败。

2、gpio_free 函数

如果不使用某个 GPIO 了,那么就可以调用 gpio_free 函数进行释放。函数原型如下:

void gpio_free(unsigned gpio)
  • 函数参数和返回值含义如下:
  • gpio:要释放的 gpio 标号。
  • 返回值:无。

3、gpio_direction_input 函数

此函数用于设置某个 GPIO 为输入,函数原型如下所示:

int gpio_direction_input(unsigned gpio)

函数参数和返回值含义如下:

  • gpio:要设置为输入的 GPIO 标号。
  • 返回值:0,设置成功;负值,设置失败。

4、gpio_direction_output 函数

此函数用于设置某个 GPIO 为输出,并且设置默认输出值,函数原型如下:

int gpio_direction_output(unsigned gpio, int value)

函数参数和返回值含义如下:

  • gpio:要设置为输出的 GPIO 标号。
  • value:GPIO 默认输出值。
  • 返回值:0,设置成功;负值,设置失败。

5、gpio_get_value 函数

此函数用于获取某个 GPIO 的值(0 或 1),此函数是个宏,定义所示:

#define gpio_get_value __gpio_get_value
int __gpio_get_value(unsigned gpio)

函数参数和返回值含义如下:

  • gpio:要获取的 GPIO 标号。
  • 返回值:非负值,得到的 GPIO 值;负值,获取失败。

6、gpio_set_value 函数

此函数用于设置某个 GPIO 的值,此函数是个宏,定义如下

#define gpio_set_value __gpio_set_value
void __gpio_set_value(unsigned gpio, int value)

函数参数和返回值含义如下:

  • gpio:要设置的 GPIO 标号。
  • value:要设置的值。
  • 返回值:无
    关于 gpio 子系统常用的 API 函数就讲这些,这些是我们用的最多的。

GPIO子系统示例 读取按键

/*
 * @Copyright: 
 * @FileNames: 
 * @Description: 申请全局内存4096 并使用该内存进行 用户和内核之间的数据交换
 * @Author: yangyue19@hikvision.com.cn
 * @Date: 2022-07-29 09:03:02
 * @Version: V1.0
 * @LastEditTime: 2022-08-05 16:51:03
 */
#include <linux/module.h>//MOUDLE_XXX moudle_xxx
#include <linux/fs.h>    //file_operations register_chrdev_region alloc_chrdev_region
#include <linux/init.h>  //__init __exit
#include <linux/cdev.h>  //cdev
#include <linux/uaccess.h>//copy_to_user copy_from_user 
#include <linux/device.h> // device class 

#include <linux/gpio.h>
#define KEY_DEBUG 1

#define KEY_CLASS_NAME "key" //创建的类名称
#define KEY_NODE_NAME  "key_0" 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

与光同程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值