Linux 下gpio
来源:互联网 发布:python的函数参数传递 编辑:程序博客网 时间:2024/04/27 19:46
GPIO的驱动主要就是读取GPIO口的状态,或者设置GPIO口的状态。就是这么简单,但是为了能够写好的这个驱动,在LINUX上作了一些软件上的分层。
为了让其它驱动可以方便的操作到GPIO,在LINUX里实现了对GPIO操作的统一接口,这个接口实则上就是GPIO驱动的框架,具体的实现文件为gpiolib.c
在配置内核的时候,我们必须使用CONFIG_GENERIC_GPIO这个宏来支持GPIO驱动。
这里我们把目光放到gpiolib.c上,主要对外提供的接口函数,在其头文件gpio.h里可以看到:
具体的GPIO描述符:
structgpio_chip {
… ...
int (*request)(struct gpio_chip *chip, unsigned offset);
void (*free)(struct gpio_chip *chip, unsigned offset);
int (*direction_input)(struct gpio_chip *chip, unsignedoffset);
int (*get)(struct gpio_chip *chip, unsigned offset);
int (*direction_output)(struct gpio_chip *chip, unsignedoffset, int value);
int (*set_debounce)(struct gpio_chip *chip, unsigned offset,
unsigneddebounce);
void (*set)(struct gpio_chip *chip, unsigned offset, int value);
int (*to_irq)(struct gpio_chip *chip, unsigned offset);
void (*dbg_show)(struct seq_file *s, struct gpio_chip *chip);
int base;
u16 ngpio;
… ...
};
申请和释放GPIO资源:
externint gpio_request(unsigned gpio, const char *label);
externvoid gpio_free(unsigned gpio);
设置GPIO口方向的操作www.linuxidc.com:
externint gpio_direction_input(unsigned gpio);
externint gpio_direction_output(unsigned gpio, int value);
设置GPIO口高低电平值操作:
externint gpio_get_value_cansleep(unsigned gpio);
externvoid gpio_set_value_cansleep(unsigned gpio, int value);
externint __gpio_get_value(unsigned gpio);
externvoid __gpio_set_value(unsigned gpio, int value);
GPIO驱动的关系图:
如上图所示,右上方部分为GPIO驱动对其它驱动提供的GPIO操作接口,其对应的右下方部分为GPIO硬件操作接口,也就是说对外提供的接口最终会一一对应的对硬件GPIO进行操作。
再来看左边部分,左上方部分为一全局数组,记录各个GPIO的描述符,即对应左下方的gpio_desc结构体,其中gpio_chip指向硬件层的GPIO,flags为一标志位,用来指示当前GPIO是否已经占用,当用gpio_request申请GPIO资源时,flags位就会置位,当调用gpio_free释放GPIO资源时,flags就会清零。label是一个字符串指针,用来作说明。
在软件上,我们首先通过函数gpiochip_add注册一个gpio_chip对应的gpio_desc到全局数组gpio描述符中。其中,一个描述符对应一个GPIO,所以如果我们要使用多个GPIO,那么就在gpio_chip结构体的ngpio指定个数,base为起始的GPIO号。
如果你想使用GPIO驱动,那么在配置内核的时候请把该驱动选上,即定义宏CONFIG_GENERIC_GPIO,然后在你的驱动里加入头文件linux/gpio.h,这样就可以用那些操作函数了。
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2011-07/39523.htm
- Linux下GPIO驱动
- Linux 下gpio
- Linux下GPIO驱动
- linux下的GPIO驱动
- linux下的GPIO驱动
- linux下的GPIO驱动
- linux下的GPIO驱动
- Linux下GPIO驱动模型
- linux下对/sys/class/gpio中的gpio的控制
- linux下对/sys/class/gpio中的gpio的控制
- Linux下创建GPIO(/sys/class/gpio)
- ARM-Linux下的GPIO中断程序
- ARM Linux下访问GPIO端口
- Linux下gpio的相关函数分析
- linux下AM335X的GPIO控制
- ARM Linux下访问GPIO端口
- linux下i386平台gpio端口操作
- linux下使用mmap控制GPIO
- QTP三种同步方式
- 如何使用iOS开发者授权以及如何申请证书
- delegate和protocol
- jsp常见错误
- Java内存模型
- Linux 下gpio
- HDU3579 一元线性同余方程
- Delphi的学习笔记八——内存操作函数
- 编程珠玑 第二版 第一章
- IOS:如何使用多张图片合成GIF
- 嵌入式 BOA 服务器移植(本人亲测)和遇到的部分问题总结
- LeiGe脚本学习: 定期完成同步功能或其他功能的开发思路 思考 ~~Myself!
- E版Openstack通过dashboard创建卷失败一例(01)
- UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-3跑分测试