Keypad接口设计与驱动开发

Keypad接口设计与驱动开发

ID:36876309

大小:728.50 KB

页数:34页

时间:2019-05-10

Keypad接口设计与驱动开发_第1页
Keypad接口设计与驱动开发_第2页
Keypad接口设计与驱动开发_第3页
Keypad接口设计与驱动开发_第4页
Keypad接口设计与驱动开发_第5页
资源描述:

《Keypad接口设计与驱动开发》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第九章Keypad接口设计与驱动开发本章要点●使用基本的逻辑器件,设计Keypad的外围电路●根据外围电路编写相应的驱动程序●在驱动程序中使用等待队列、定时器9.1最小硬件系统设计嵌入式系统和用户进行人机交互时,最基本的输入设备是按键或者键盘。简单的应用可以选用按键,比较复杂的应用可以选用键盘。不论是最简单的按键,还是比较复杂的键盘,总的说来,都是通过0、1来代表按键状态的变化。按键以0、1代表“断开”和“闭合”,键盘以0、1的序列代表按键的键值。通常,CPU获知按键状态变化的方式有两种:查询式和中断式。当采用查询式时

2、,CPU定时(例如每隔0.2s)查询I/O接口的状态,当I/O接口的状态有变化时,系统认为有按键被按下,并读取键值。当采用中断式时,一般将按键电路连接到一个逻辑器件,再将此逻辑器件输出端连接到CPU的中断输入引脚。当有按键被按下时,与键盘电路相连的逻辑电路触发中断,CPU执行中断服务程序将键值读入内存。查寻方式电路简单,但是占用较多CPU资源;中断方式节省CPU资源,但电路稍复杂,并且占用CPU中断资源。通常在嵌入式系统中,按照情况区别对待。对于功能要求简单的应用场合,一般采用查询式的按键电路,而对于功能要求复杂的应用

3、场合,一般采用中断式的键盘电路。本章节主要介绍查询式的按键电路设计和驱动程序开发。本章节所设计的简单键盘通过双向收发器和3—8译码器实现,如图9-1所示。双向收发器将Keypad电路连接到PXA255的数据总线,3-8译码器连接着地址总线和异步静态存储器的片选信号nCS2,它的输出充当双向收发器的使能信号,由KEY-CS#表示。9.1.1Keypad接口设计5《嵌入式系统》课件3-8译码器使能nCS2#SA-D[0:7]SA-A[20:22]PXA255KEY-CS#键盘双向收发器使能图9-1键盘与处理器接口框图其它设

4、备Keypad电路中采用了标准的3-8译码器74LCXl38。3-8译码器的工作原理。键盘的使能电路如下图:9.1.2Keypad电路原理7《嵌入式系统》课件KEY-CS#片选信号连接着双向收发器的使能端,具体电路见图9-3:图9-3键盘的电路原理图8《嵌入式系统》课件由图9-3可以看到,当KEY-CS#片选信号为低电平时,按键信息透过双向收发器74LCX245送到PXA255数据线SA-DO~SA-D7。·当没有键按下时,SA-DO~SA—D7读入的键值为“0xFF”。·当有键按下时,SA-D0~SA-D7读入的键值

5、对应的位为“0”。KEY-CS对应着3-8译码器的Y2脚,当该脚使能时,它对应的输入SA-A[22:20]为010,也就是地址0x00200000。由于SA-CS2#的物理地址是0x08000000,故最终KEY-CS信号的物理地址是:0x08000000+0x00200000=0x08200000。在驱动程序中,假定KEY-CS的物理地址0x08200000对应的虚地址为0xf8200000。由上面的介绍可知,当KEY-CS#片选信号为低电平使能时,数据通过74LCX245传送到数据总线上,因而可以用如下宏定义读键值

6、(也就是从KEY-CS对应的地址读取数据):#defineKEY_CS(*(volatileunsignedshort*)(0xf8200000))其中,volatile关键字是一种类型修饰符,用它声明的变量不会被缓存在寄存器中,也不会对它做常量合并、常量传播以及读/写优化等。在嵌入式Linux中,与I/O存储器访问相关的变量都应加volatile类型修饰符。加volatile修饰符是为了保证读取数值的正确性。因为KEY-CS地址的数据是随时可能发生变化的,所以每次使用它时,必须从地址中直接读取。如果不使用volati

7、le声明,则编译器生成的汇编代码会做一些优化。编译器如果发现有连续两次从同一地址读取数据的代码,而它们之间没有对该地址进行写操作的代码,那么编译器会自动地把上次读取的数据放在寄存器中作为第二次读取的数据,而不是重新从该地址里面读取。这样一来,读取的键值就不是当前最新的键值,因此不能对这类的I/O操作进行优化。9.2Keypad软件驱动原理在驱动程序中,注册函数、撤销函数、虚拟文件接口函数及其结构体构成了驱动程序的基本框架。本节将首先介绍注册函数、撤销函数、内核的接口函数及其结构体,然后介绍接口函数的具体功能。这些函数中

8、最核心的部分是读取键值的函数。在加载模块时,首先运行的是内核模块的注册函数。它的功能包括向内核注册设备以及变量的初始化。内核模块的注册函数如下:9.2.1内核模块的注册和撤销13《嵌入式系统》课件与注册相对应的就是撤销。内核模块的注销函数的主要功能是释放资源和注销设备。内核模块的注销函数如下:14《嵌入式系统》课件Keypad是字

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。