已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章Keypad接口设计与驱动开发,本章要点使用基本的逻辑器件,设计Keypad的外围电路根据外围电路编写相应的驱动程序在驱动程序中使用等待队列、定时器,9.1最小硬件系统设计,嵌入式系统和用户进行人机交互时,最基本的输入设备是按键或者键盘。简单的应用可以选用按键,比较复杂的应用可以选用键盘。不论是最简单的按键,还是比较复杂的键盘,总的说来,都是通过0、1来代表按键状态的变化。按键以0、1代表“断开”和“闭合”,键盘以0、1的序列代表按键的键值。,通常,CPU获知按键状态变化的方式有两种:查询式和中断式。当采用查询式时,CPU定时(例如每隔0.2s)查询IO接口的状态,当IO接口的状态有变化时,系统认为有按键被按下,并读取键值。当采用中断式时,一般将按键电路连接到一个逻辑器件,再将此逻辑器件输出端连接到CPU的中断输入引脚。当有按键被按下时,与键盘电路相连的逻辑电路触发中断,CPU执行中断服务程序将键值读入内存。,查寻方式电路简单,但是占用较多CPU资源;中断方式节省CPU资源,但电路稍复杂,并且占用CPU中断资源。通常在嵌入式系统中,按照情况区别对待。对于功能要求简单的应用场合,一般采用查询式的按键电路,而对于功能要求复杂的应用场合,一般采用中断式的键盘电路。本章节主要介绍查询式的按键电路设计和驱动程序开发。,嵌入式系统课件,5,本章节所设计的简单键盘通过双向收发器和38译码器实现,如图9-1所示。双向收发器将Keypad电路连接到PXA255的数据总线,3-8译码器连接着地址总线和异步静态存储器的片选信号nCS2,它的输出充当双向收发器的使能信号,由KEY-CS#表示。,9.1.1Keypad接口设计,3-8译码器使能,nCS2#,SA-D0:7,SA-A20:22,PXA255,KEY-CS#,键盘,双向收发器,使能,图9-1键盘与处理器接口框图,其它设备,嵌入式系统课件,7,Keypad电路中采用了标准的3-8译码器74LCXl38。3-8译码器的工作原理。键盘的使能电路如下图:,9.1.2Keypad电路原理,嵌入式系统课件,8,KEY-CS#片选信号连接着双向收发器的使能端,具体电路见图9-3:,图9-3键盘的电路原理图,由图9-3可以看到,当KEY-CS#片选信号为低电平时,按键信息透过双向收发器74LCX245送到PXA255数据线SA-DOSA-D7。当没有键按下时,SA-DOSAD7读入的键值为“0 xFF”。当有键按下时,SA-D0SA-D7读入的键值对应的位为“0”。KEY-CS对应着3-8译码器的Y2脚,当该脚使能时,它对应的输入SA-A22:20为010,也就是地址0 x00200000。由于SA-CS2#的物理地址是0 x08000000,故最终KEY-CS信号的物理地址是:0 x08000000+0 x00200000=0 x08200000。,在驱动程序中,假定KEY-CS的物理地址0 x08200000对应的虚地址为0 xf8200000。由上面的介绍可知,当KEY-CS#片选信号为低电平使能时,数据通过74LCX245传送到数据总线上,因而可以用如下宏定义读键值(也就是从KEY-CS对应的地址读取数据):#defineKEY_CS(*(volatileunsignedshort*)(0 xf8200000)其中,volatile关键字是一种类型修饰符,用它声明的变量不会被缓存在寄存器中,也不会对它做常量合并、常量传播以及读/写优化等。在嵌入式Linux中,与I/O存储器访问相关的变量都应加volatile类型修饰符。,加volatile修饰符是为了保证读取数值的正确性。因为KEY-CS地址的数据是随时可能发生变化的,所以每次使用它时,必须从地址中直接读取。如果不使用volatile声明,则编译器生成的汇编代码会做一些优化。编译器如果发现有连续两次从同一地址读取数据的代码,而它们之间没有对该地址进行写操作的代码,那么编译器会自动地把上次读取的数据放在寄存器中作为第二次读取的数据,而不是重新从该地址里面读取。这样一来,读取的键值就不是当前最新的键值,因此不能对这类的I/O操作进行优化。,9.2Keypad软件驱动原理,在驱动程序中,注册函数、撤销函数、虚拟文件接口函数及其结构体构成了驱动程序的基本框架。本节将首先介绍注册函数、撤销函数、内核的接口函数及其结构体,然后介绍接口函数的具体功能。这些函数中最核心的部分是读取键值的函数。,嵌入式系统课件,13,在加载模块时,首先运行的是内核模块的注册函数。它的功能包括向内核注册设备以及变量的初始化。内核模块的注册函数如下:,9.2.1内核模块的注册和撤销,嵌入式系统课件,14,与注册相对应的就是撤销。内核模块的注销函数的主要功能是释放资源和注销设备。内核模块的注销函数如下:,嵌入式系统课件,15,Keypad是字符型设备,通常直接使用file_operations接口。Keypad设备接口函数的定义:,9.2.2虚拟文件系统与硬件驱动的接口,在应用程序中,可以通过调用open()、read()、close()等通用函数,进而调用这里定义的接口函数,完成某种功能。,嵌入式系统课件,16,设备打开操作接口函数可以完成两大操作,一是完成必要的设备初试化,而是设备引用计数加1。设备的初试化是由read_xy()函数完成的,read_xy()函数有2个子函数:new_data()和Keypad_starttimer()。它们分别负责获取键值和开启内核定时器。具体如下:,9.2.3设备打开操作接口函数,嵌入式系统课件,17,读取设备的函数比较复杂,涉及等待队列、内核定时器等机制。函数的主要作用就是从缓冲区中取出键值。该功能主要通过调用get_data()实现,然后通过copy_to_user()函数复制键值到用户数据区。具体见P226:,9.2.4设备读取操作接口函数,嵌入式系统课件,18,设备关闭接口函数可实现3个功能:关闭设备异步通知;设备计数器减1;删除定时器信号中断;最后函数返回0。,9.2.5设备关闭操作接口函数,嵌入式系统课件,19,获取键值子函数new_data()从KEY_CS对应的地址读入键值,存人环形缓冲区buf。环形缓冲区的写指针是head,读指针是tail。cur_data.click=1;1代表有键按下,0则代表没有。cur_data.status=x;x代表被按下的键。具体程序见P227。,9.2.6获取键值子函数,嵌入式系统课件,20,每读出一个缓冲区,读出指针tail就加1。代码如下:,9.2.7读缓冲区子函数,嵌入式系统课件,21,在Keypad的驱动程序中,对键盘键值的获取是以0.2秒为周期执行的,需要用到内核定时器。源代码如下:,9.2.8内核定时器的使用,嵌入式系统课件,22,配置timer_list结构体可以完成“在未来某一个特定时刻执行某个特定任务”的功能。该结构在includelinuxtimer.h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高压容器安全使用管理制度培训
- 2026安丘社工面试题目及答案
- 2026爱山小学面试题及答案
- 风电场设备责任制管理办法培训
- 工程项目基本建设流程
- 光伏安装劳务外包合同
- 保险电话销售外包合同
- 干线带车司机外包合同
- 高校绿化养护外包合同
- 浙江省金华市金东区、婺城区2023-2024学年五年级下学期语文期末试卷(解析版)
- 2026安徽合肥高新区招聘社区工作者96人笔试参考题库及答案解析
- 2024版《建设工程工程量清单计价标准》解读课件
- 2026年高校图书馆采编岗面试题库
- 学堂在线 中国传统装饰 章节测试答案
- 2025年乌兰察布市社区工作者招聘考试真题及答案
- 对外投资合作国别(地区)指南-新加坡(2025年版)
- 污水处理设施运维服务投标方案(技术标)
- 比亚迪集团所属行业分析报告
- 福建省侨情普查工作制度
- 故事写作 课件
- GB/T 47180-2026政务服务统一咨询服务工作规范
评论
0/150
提交评论