实现了多键齐按和重复按键的嵌入式系统键盘驱动设计
1 键盘驱动程序的设计随着电子信息技术飞速发展,嵌入式系统构成的各种设备得到了广泛的应用,嵌入式Linux是一种开放源码、软实时、多任务的操作系统,是开发嵌入式产品的优秀操作系统平台,其中键盘是人机界面中人类监控计算机重要数据输入设备。
实现键盘有两种方法:一种是采用现有的一些芯片实现键盘扫描;二是用软件实现键盘扫描。
目前许多芯片可用来实现键盘扫描,但是键盘扫描的软件实现方法有助于缩减系统的重复开发成本,而只需很少的CPU 开销。
嵌入式控制器的功能很强,可以充分利用这一资源。
本课题提出的键盘方案是以嵌入式Linux和PXA255为软硬件平台,通过测试,表明其具有良好的稳定性和实时性。
2 矩阵式键盘的结构与工作原理本课题采用矩阵键盘,如图1所示。
四根行线四根列线组成4 *4矩阵键盘,分别用CPU 的4个GPIO口。
当有键按下,某个列GPI O 口电平被下拉从而产生下降沿,触发中断。
其中按键行阵列必须提供上拉信号,列阵列加二极管,防止瞬间电流过大对GPI O口造成冲击。
图1 矩阵键盘原理图。
3 Linux键盘驱动简介在Linux中,键盘驱动被划分成两层来实现。
上层是一个通用键盘抽象层,下层则是硬件处理层,主要对硬件进行直接的操作。
键盘驱动程序上层公共部分在driver /keyboard 。
c里。
文件中最重要的是内核用EXPORT _SYM BOL这个宏导出的handle_scancode函数。
在这个文件中还定义了其它的几个回调函数,它们由键盘驱动程序中上层公共部分调用,并且由底层硬件处理函数实现。
键盘驱动程序的底层硬件处理部分则根据不同硬件有不同实现。
4 键盘驱动程序的实现4.1 宏定义module init和module exit通过宏定义module init和module exit可以看出,驱动程序的入口从kd_ctrl_init()开始。
当内核模块加载的时候,默认调用module_ i nit(kd_c trl_init),在kd_ctr l_ i nit()中将完成一些初始化工作,主要如下:。