内核GPIO操作库函数

本文详细介绍了内核GPIO操作库函数的功能及用法,包括gpio_request、gpio_free、gpio_direction_output等函数。通过实例展示了如何使用这些函数实现LED灯的控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内核GPIO操作库函数

作用:内核便于驱动开发者操作GPIO(输入和输出操作)提供了相关的库函数;

   gpio _request (int gpio, char *name);

函数作用:
明确:
硬件GPIO对于内核来说像内存一样,都是一种宝贵的资源,所以如果软件要访问,首先应该向内核去申请硬件GPIO资源;
明确:
每一个硬件GPIO由厂家定义好了一个名称,例如GPC0_3,但是在内核中,内核会重新给这个硬件GPIO给定义软件编号(身份证号),例如:
S5PV210_GPC0(3);
GPIO:GPF1_3,GPC0_4对应的软件编号为:S5PV210_GPF1(3),S5PV210_GPC0(4)

参数说明:
gpio:硬件GPIO对应的软件编号
name:标签,字符串

    gpio_free(int gpio);

功能:如果GPIO资源不再使用,一定要释放
gpio:硬件GPIO对应的软件编号

   gpio_direction_output(int gpio, int value);

功能:配置GPIO为输出,并且输出value值
gpio:硬件GPIO对应的软件编号
value:输出的状态(1,0)

   gpio_direction_input(int gpio);

功能:配置GPIO为输入
gpio:硬件GPIO对应的软件编号

   gpio_set_value(int gpio, int value);

功能:设置GPIO的状态,前提GPIO为输出口
gpio:硬件GPIO对应的软件编号
value:输出的状态(1,0)

   int gpio_get_value(int gpio);

功能:获取GPIO的状态
返回值就是GPIO的状态值

涉及的头文件:

    #include <asm/gpio.h>
    #include <plat/gpio-cfg.h>

案例

用户需求:
1.加载驱动模块,点亮所有的灯;
2.卸载驱动模块,关闭所有的灯;
LED1->硬件GPIO:GPC1_3->软件编号:S5PV210_GPC1(3)
LED2->硬件GPIO: GPC1_4->软件编号:S5PV210_GPC1(4)

#include <linux/init.h>
#include <linux/module.h>
#include <asm/gpio.h>
#include <plat/gpio-cfg.h>

//声明描述LED硬件相关的数据结构
struct led_resource {
    char *name; //硬件GPIO的名称
    int gpio; //硬件GPIO对应的软件编号
};

//定义初始化2个LED的硬件信息
static struct led_resource led_info[] = {
    [0] = {
        .name = "LED1",
        .gpio = S5PV210_GPC0(3)
    },
    [1] = {
        .name = "LED2",
        .gpio = S5PV210_GPC0(4)
    }
};

static int led_init(void)
{
    int i;

    //申请GPIO资源
    //配置GPIO为输出口,输出1
    for (i = 0; i < ARRAY_SIZE(led_info); i++) {
        gpio_request(led_info[i].gpio, led_info[i].name);
        gpio_direction_output(led_info[i].gpio, 1);
    }
    return 0;
}

static void led_exit(void)
{
    int i;
    //输出0
    //释放GPIO资源
    for (i = 0; i < ARRAY_SIZE(led_info); i++) {
        gpio_set_value(led_info[i].gpio, 0);
        gpio_free(led_info[i].gpio);
    }
}
module_init(led_init);
module_exit(led_exit);
MODULE_LICENSE("GPL");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值