6 LED驱动 6.1 LED管脚调用、赋值以及配置 6.1.2 GPIO申请和释放函数 在头文件“include/linux/gpio.h”中有Linux 默认的GPIO 申请函数,这个头文件是属于嵌入式Linux 平台,任何一个嵌入式Linux 内核都可以这么使用。 1)如下图所示,gpio_request 函数。首先这个函数有一个重要的“检测”功能,就是如果其它地方申请了这个IO,那么这里就会返回错误,提示已经被占用了,这是Linux 中的一个标准用法。gpio_request 函数有两个参数unsigned gpio,申请的那个GPIO,一般是GPIO 对应的宏定义const char *label,为GPIO 取个名字,便于阅读
2)如下图所示,和gpio_request 函数对应的是gpio_free 函数。在调用gpio_request 函数之后,向系统表明这个IO 已经被占用了,在卸载驱动的时候一般需要调用gpio_free 函数将其释放。gpio_free 函数的参数比较简单,只有一个GPIO 参数,使用GPIO 对应的宏定义即可
[size=12.0000pt]3)如下图所示,还有一个赋值函数gpio_set_value。在将GPIO 配置为输出模式之后,还需要给GPIO 赋值,一般就是高电平和低电平两种。两个参数分别为unsigned gpio,GPIO ;int value,高电平1 和低电平0。
6.1.3 GPIO配置函数和参数 在Linux 中,对GPIO 的配置函数以及参数都已经集成到三星板级开发包中。先来看一下配置函数,如下图所示,在源码目录中使用命令“vim arch/ ARM/plat-samsung/include/plat/gpio-cfg.h”打开该文件。 6.1.3.1 s3c_gpio_cfgpin 函数是GPIO的配置函数。
如上图所示,函数extern int s3c_gpio_cfgpin(unsigned int pin, unsigned int to);一般来说带有s3cxxx 的函数就是三星平台能够通用的函数。s3c_gpio_cfgpin 管脚配置函数有两个参数参数unsigned int pin,管脚参数unsigned int to,配置参数。 6.1.3.2 配置参数 “vim arch/arm/plat-samsung/include/plat/gpio-cfg.h”打开该文件,配置参数和函数是在同一个函数中。如下图所示,对于GPIO 需要将其配置为输出模式,对应S3C_GPIO_OUTPUT 宏定义。
6.2 LEDS驱动源码 1)首先添加需要的头文件,如下图所示,分别是申请GPIO、配置函数、配置参数、GPIO 宏定义等的头文件。然后将设备节点名称由hello_ctl123 修改为hello_ctl
[size=12.0000pt]2)然后需要修改的就是probe 函数,一般说来GPIO 的初始化都是在probe 中。如下图所示,调用配置函数以及配置函数。
3)然后就是修改一下ioctl 函数,在Linux 中对GPIO 的控制一般是使用ioctl,虽然write函数也可以实现类似的功能,但是ioctl 函数的效率高一些。如下图所示,根据应用传入的参数给GPIO 赋值
更多精彩内容,请关注我的微信公众号“小拇指的脑瓜子”
|