GPIO源代码分析

本文深入探讨GPIO在内核中的使用,分析了包括gpio_request、gpio_free、gpio_request_one等关键API的功能和用法,解释了如何配置GPIO为输入或输出,并提供了gpio_get_value、gpio_set_value等操作GPIO值的方法。同时,提到了gpio_to_irq转换功能以及gpio_export对外导出GPIO。
摘要由CSDN通过智能技术生成



参考

linux31026\drivers\gpio\gpio-sa1100.c
linux31026\drivers\gpio\gpiolib.c

https://lwn.net/Articles/532714/


数据结构

一个gpio number 对应一个 gpio_desc


struct gpio_desc {
struct gpio_chip *chip; /* 这个gpio pin所在的chip */
unsigned long flags; /*  设置is_out flag */
const char *label; /* label 就是名字 */
};


所有gpio_desc组成全局的gpio_desc[ARCH_NR_GPIOS];


其中一个chip对应一个 chip->base+len个 gpio pin
全部的chip加起来就是全部的gpio pin
|chip1 base + len |chip2 base + len |chip3 base + len |chip4 base + len |...|


API

gpio_request

找到对应的desc
设置一下flag的FLAG_REQUESTED这个位。
设置一下这个desc的label


gpio_free




gpio_request_one

 - request a single GPIO with initial configuration
request 并初始化相关的flag


gpio_request_array 

- request multiple GPIOs in a single call
for(i = 0; i < num; i++, array++)  gpio_request_one;



devm_gpio_request 

--> "managed" versions 
automatically handle cleanup if the developer forgets

gpio pin 到底用于输入,还是输出


Some GPIOs are used for output, others for input. A suitably-wired GPIO can be used in either mode, though only one direction is active at

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值