在阶段二项目智能灯光控制系统中利用5-3.3v电压转换模块来探测光感、声感的连接与否,原理是让转换模块和光感模块的电源线一起插拔。
插上电时,转换模块输出3.3v电压至其连接的GPIO口,gpio口检测到高电平则知道了光感模块已接入系统。拔开电源线则转换模块输出为零,gpio口未检测到高电平则知道了光感模块已离开系统。
这是个基础的GPIO口检测输入信号的驱动,关键在于要设置gpio的下拉电阻,防止在pin悬空时出现高电平(实验时出现不规律的出现接收到的信号为1)的现象,避免出现假插入。
研究了arch\arm\mach-s5p4418\soc\gpio.c(对应的头文件为arch\arm\mach-s5p4418\include\mach\soc.h)中的函数nxp_soc_gpio_set_io_pull_sel(pin脚,0/1),0为下拉,1为上拉。加上后效果非常好。这个文件中包含的函数应该是平台提供的,而包含于include\linux\gpio.h中的gpio_direction_output()、gpio_set_value()等函数为通用函数。
驱动代码如下:
#include <linux/miscdevice.h>
#include <linux/delay.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/delay.h>
#include <linux/moduleparam.h>
#include <linux/slab.h>