按键中断驱动及控制
驱动程序列表。
在s5pv210_buttons.c:keypad_test设备驱动程序源文件。
s5pv210_buttons_timer():完成启动定时器功能、唤醒中断。
button_interrupt():实现按键中断处理。
s5pv210_buttons_read():完成驱动读写功能。
button_dev_init():完成端口资源申请。
应用层程序列表。
keypad_test.c:应用层用户测试程序源码。
Makefile:驱动程序编译配置文件。
应用层功能:初始化端口资源,设置中断模式检测案件状态,在控制台输出按键状态信息。
相关寄存器
1.GPH2CON 配置寄存器
2.GPH2DAT 数据映射寄存器
3.GPH2PUD 上下拉电阻寄存器
4.GPH2DRV 驱动强度配置寄存器
混杂设备
Linux 内核使用struct miscdeivce 来描述一个混杂设备。
struct miscdevice {
int minor;
const char *name;
const struct file_operations *fops;
struct list_head list;
struct device *parent;
struct device *this_device;
const char *nodename;
mode_t mode;};
参数minor是这个混杂设备的次设备号,若由系统自动配置,则可以设置为MISC_DYNANIC_MINOR。
参数name是设备名。使用时只需填写minor次设备号,*name设备名,*fops 文件操作函数即可。
Linux内核使用misc_register函数注册一个混杂设备,使用misc_deregister移除一个混杂设备。注册成功后,Linux内核为自动为该设备创建设备节点,在/dev/下会产生相应的节点。
注册函数:
int misc_register(struct miscdevice *misc)
输入参数:struct miscdevice
返回值:0 表示注册成功。负数表示未成功。
卸载函数:
int misc_deregister(struct miscdevice *misc)
输入参数:struct miscdevice
返回值:0 表示注册成功。负数表示未成功。
源码编译
在02_keypad目录下使用make命令对led.c编译。将生成可执行目标文件keypad_test。
[root@localhost leds]# make clean
rm -rf *.o led
[root@localhost leds]# make
arm-linux-gcc -Wall -O2 keypad_buttons.c -o keypad_test
[root@localhost leds]# ls
driver keypad_buttons.c keypad_test Makefile
[root@localhost leds]# chmod 777 keypad_test
[root@localhost leds]#
当前目录下生成测试程序keypad_test。
运行keypad_test程序(NFS 方式)
1.挂载宿主机目录
启动CBT-SuperIOT型实验系统,连好网线、串口线。通过串口终端挂载宿主机实验目录。
[root@Cyb-Bot /]# mount -t nfs -o nolock 192.168.1.7:/CBT-SuperIOT//mnt/nfs
2.进入串口终端的NFS 共享文件目录
[root@Cyb-Bot /]# cd /mnt/nfs/SRC/exp/driver/02_keypad/
[root@Cyb-Bot 02_keypad]# ls
Makefile driver keypad_buttons.c keypad_test
[root@Cyb-Bot 02_keypad]#
3.运行应用
[root@Cyb-Bot 02_keypad]# ./keypad_test
执行上述命令后,当操作目标板上按键后,可在控制台看到输出结果。
key 1 is down
key 1 is up
key 2 is down
key 2 is up
……