文章目录
基于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"

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

被折叠的 条评论
为什么被折叠?



