触摸屏电路设计与驱动开发.ppt_第1页
触摸屏电路设计与驱动开发.ppt_第2页
触摸屏电路设计与驱动开发.ppt_第3页
触摸屏电路设计与驱动开发.ppt_第4页
触摸屏电路设计与驱动开发.ppt_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十一章触摸屏电路设计与驱动开发 本章要点 触摸屏的工作原理 ADS7843触摸屏控制芯片的工作原理 基于Linux输入设备子系统框架的驱动设计 触摸屏硬件的软件操控原理 Linux内核线程的作用 11 1触摸屏的工作原理 触摸屏是一种简单 方便的输入设备 它的应用随着信息社会的发展越来越普遍 为了操作方便 人们用触摸屏代替鼠标或键盘 根据触笔点击的位置来定位选择信息输入 目前在高档PDA上 绝大部分都使用触摸屏作为输入设备 触摸屏附着在显示器的表面 检测用户点击的位置 触摸屏在用户输入时产生一个反映用户点击位置的信号 这个信号通常是模拟信号 它需要通过触摸屏控制器将模拟信号转换为数字信号 也就是用户点击的坐标 再送给处理器进行处理 图11 1所示的是触摸屏 触摸屏控制器与处理器连接的示意图 本章采用BB公司生产的ADS7843触摸屏控制器进行硬件电路设计 将触摸屏与处理器连接起来 嵌入式系统 课件 3 嵌入式系统 课件 4 触摸屏按其技术原理可分为矢量压力传感式 电阻式 电容式 红外线式和表面声波式类 其中电阻式触摸屏在嵌入式系统中使用较多 如图11 2所示 电阻式触摸屏由4层透明的复合薄膜组成 最上面一层是外表面经过硬化处理 光滑防刮的塑料层 最下面一层是玻璃或有机玻璃构成的基层 在基层之上和塑料层内表面中间是两层金属导电层 两导电层之间有许多细小的透明隔离点把这两层隔开 当手指触摸屏幕时 两导电层在触摸点处接触 嵌入式系统 课件 5 触摸屏的两个金属导电层是触摸屏的两个工作面 通常分别称为X工作面和Y工作面 在每个工作面的两端各涂有一条银胶 称为该工作面的一对电极 若对一个工作面的电极对施加电压 则该在工作面上会产生均匀 连续的平行电压分布 四线式触摸屏的X工作面和Y工作面共有4根引出线 分别连到触摸屏的X电极对和Y电极对上 结合图11 1 当在X方向的电极对施加一个确定的电压 而Y方向电极对不加电压时 在X平行电压场中 触点处的电压值可以在Y 或Y 电极上反映出来 通过测量Y 电极对地的电压大小 便可得知触点的X坐标值 同理 当在Y电极对加电压 而X电极对不加电压时 通过测量X 电极的电压 便可得知触点的Y坐标 11 2ADS7843触摸屏控制器简介 如前所述 触摸屏产生的是模拟信号 将这个模拟信号转换为计算机能处理的数字信号需要通过触摸屏控制器完成 本章所用的触摸屏控制器ADS7843是BB公司生产一款专用的触摸屏控制芯片 它采用16引脚小型薄型封装 该芯片有一个12位的A D转换器 它作为触摸屏与CPU之间通信的桥梁 能将触摸屏上触点的模拟电压转换成数字信号 从而准确判断出触点的坐标位置 ADS7843的供电电压Vcc为2 7 5V 参考电压VREF 为1V Vcc 转换电压的输入范围为0 VREF 它支持单端和差分两种测量方式 最高转换速率可达到125kHz ADS7843的各引脚定义如P259表11 1所列 芯片包含一个多路模拟开关组成的供电 测量电路网络和一个12位的A D转换器 参见图11 3 ADS7843根据处理器发来的不同命令导通不同的模拟开关 向一个工作面电极对提供参考电压 并把另一个工作面测量电极上的代表触点坐标位置的电压模拟量引入A D转换器 ADS7843的电压的测量方式有单端方式和差分方式两种 这两种测量方式可以通过命令控制字选择 当通过命令控制字 将Vcc设置为参考电压时 ADS7843工作在单端方式 当将Y Y 或者X X 电极对设置为参考电压时 ADS7843就工作在差分方式 嵌入式系统 课件 8 嵌入式系统 课件 9 本书所使用的工作方式是差分方式 这主要是因为采用单端方式时 Vcc的波动会引起参考电压的波动 这将引起测量的误差 而在差分方式下 即使Vcc发生波动 测量点电压 X 电压 和参考电压 Y Y 引脚之间的电压 的比例也依然保持不变 测量结果不会发生波动 这样可以大大提高测量的精度 以测量触摸点的Y坐标为例 首先通过命令控制字控制ADS7843内部的模拟开关 将Y Y 引脚置为参考电压 X 引脚置为芯片内部A D模拟输入 此时测量到的电压和参考电压的比例反映了Y轴坐标的大小 图11 4所示的就是测量触摸点的Y坐标的等效电路 同理 若要测量触点X轴坐标值 只要将X X 引脚置为与参考电压 Y 引脚置为芯片内部A D的模拟输入即可 11 3处理器与ADS7843的接口设计 PXA255处理器与ADS7843的接口电路涉及PXA255的GPIO口以及地址总线和数据总线 它的电路设计如图11 5所示 11 3 1电路接口设计 嵌入式系统 课件 12 ADS7843具体外围电路设计 参见图11 6 嵌入式系统 课件 13 微处理PXA255与ADS7843的数字接口通过Microwire的数据帧进行通信 芯片完成一次A D转换要24个时钟周期 前8个时钟周期从DIN引脚输入8位命令控制字 然后等待一个时钟的BUSY周期 此时BUSY引脚会变高 最后用15个时钟周期从高位到低位从DOUT引脚逐位输出A D转换结果 具体时序如图11 7所示 11 3 2Microwire数据帧结构 嵌入式系统 课件 14 嵌入式系统 课件 15 Microwire数据传输可以分两个阶段 处理器向ADS7843发送命令控制字 该阶段将决定ADS7843的工作方式和状态 该命令控制字一共8位 每一位都有特定的作用和含义 它们分别决定ADC输入通道 A D转换精度 参考电压输人模式 省电模式 中断允许等 具体含义如P262表11 2所列 处理器接收从ADS7843发送过来的A D转换结果 该结果是个12位数据 它反映了触摸屏X方向或Y方向的逻辑坐标值 这两个逻辑坐标经过处理后可转成屏幕坐标 触笔坐标的读取要经过2次A D转换 微处理器前后要通过发送不同命令字 分别选通触摸屏控制器片内A D转换器 ADC 模块的X输入通道和Y输入通道 分别读取触笔的X坐标值和Y坐标值 11 4触摸屏软件驱动原理 Linux内核的输入 Input 设备子系统为按键 鼠标 游戏控制杆 触摸屏等设备提供了设备驱动接口 采用这个接口可简化设备驱动的设计 它的分层结构如图11 8所示 其中硬件操控层负责处理设备所有的底层硬件细节 这也是输入设备驱动须实现的部分 输入设备接口负责接收硬件操控层获取的原始数据并对其进行处理后送人输入设备子系统 输入设备子系统通过Input Event编程接口向用户程序提供设备的输入信息 触摸屏的驱动采用输入设备驱动接口设计 需要完成的就是硬件操控层的编写 11 4 1Linux内核输入设备子系统驱动架构 嵌入式系统 课件 17 硬件操控层属于驱动程序的最底层 主要的功能是判断设备的状态 控制设备工作以及实现设备原始数据的读 写 设备所有的硬件细节基本由这层的程序处理 编写硬件操控层的程序要考虑器件的物理电气特性和数字逻辑特性 以准确实现对设备的各种基本操作 在模块化程序设计中 根据实现功能的独立性一般将对硬件的基本操作编写为若干函数 例如可以将设备状态的判断写成一个函数 设备运转的控制写成一个函数 对设备数据的读 写又写成另外一个函数 这样将所有硬件的底层特性利用模块化的方法封装起来 触摸屏驱动程序硬件操控层要处理的关键问题有 设备的初始化 触笔状态的判断和触点原始坐标数据的读 写 11 4 2硬件操控原理 嵌入式系统 课件 19 设备初始化程序如下 1 设备初始化 触摸屏设备初始化所作的工作很简单 就是对相关硬件寄存器的设置 这里用到的GPDR0是PXA255GPIO口的控制寄存器 用于控制GPIO0 GPIO31口的输入 输出模式 若GPDR0某位为O 则对应的GPIO口设为输入 反之设为输出 GPIO bit ADS7843 BUSY 用于取得ADS7843的BUSY脚在32位GPDR0寄存器中的对应位 0 x00000002 ADS7843 Enable IRQ 函数通过向ADS7843发送命令控制字0X00使该触屏控制器中断使能 参见表11 1 嵌入式系统 课件 20 状态判断函数程序如下 2 状态判断函数 这个函数用于探测触笔的状态 若触笔按下 则函数返回1 若触笔没按下 则函数返回O 函数中的GPLR0是个宏定义 它读取GPLR0寄存器的值 它的值反映0 31号GPIO口的电平状态 由前面的硬件描述可知 当触笔没有按下时 ADS7843的PENIRQ引脚为高电平 只有当触笔按下时其引脚电平才变低 从图ll 5可知 PENIRQ与GPIO5相连 因此 GPLR0 GPIO bit ADS784 PENIRQ 的值就能反映触笔的状态 嵌入式系统 课件 21 触点坐标读取函数程序如P264 3 触点坐标读取函数 嵌入式系统 课件 22 1 接口的初始化使用输入设备驱动接口之前要做一些接口的初始化工作 设定该接口的工作模式并告之对应设备的事件类型 此外还要设定整个驱动的open 函数和close 函数 这些工作是通过对structinput dev类型的结构体的成员变量的设置实现的 具体的工作如下 11 4 3输入设备驱动接口的使用 嵌入式系统 课件 23 如果用到设备的EV ABS事件 则要设定结构体的absmin ABS X absmax ABS X absmin ABS Y 和absmax ABS Y 域 它们用来确定从设备接收数据的允许取值范围 设备注册之前必须设定好结构体的name Id product Id vendor和Id version等域 这些成员变量用于存储设备的产品信息 调用 set bit 函数设置evbit域的对应位 告诉内核的输入设备子系统该设备会产生哪些类型的事件 设置absbit域的对应位 告诉内核设备会产生哪些类型的绝对值 设置keybit域的对应位 告诉内核设备会产生哪些类型的按键值 编写好驱动程序的open 操作接口函数和close 操作接口函数 并把它们的函数指针赋给dev open和dev close成员变量 嵌入式系统 课件 24 做完这些工作之后就可以调用input device register struetinput devdev 向内核注册设备 这个注册函数除了实现通用的设备注册功能外 还会将内核中特定的设备文件操作接口函数 如read write 等函数 映射到驱动程序中去 这样就简化了驱动的设计 不用在驱动程序中编写这些操作接口函数 触摸屏驱动的初始化的源代码如P266 嵌入式系统 课件 25 驱动接收到用户输入的数据后 须使用事件报告函数将数据发送到输入设备子系统 根据事件类型的不同 使用到的事件报告函数也略有不同 这些事件共有3种基本类型 下面对它们及相应的事件报告函数分别给予说明 2 硬件输入数据的报告 嵌入式系统 课件 26 利用等待队列实现阻塞型I o EV KEY事件 主要由按键和按钮等设备触发 通过input report key struetinputdev dev intcode intvalue 函数把发生的事件通报给内核 EV REL事件 主要由鼠标等设备触发 通过input report rel structinput dev dev intcode intvalue 函数把发生的事件通报给内核 EV ABS事件 主要由触摸屏这类能产生绝对值数据的设备触发 通过input report abs structinput dev dev intcode intvalue 函数把产生的数据报给内核 嵌入式系统 课件 27 利用等待队列实现阻塞型I o 驱动程序报告的数据用结构体封装后放到一个先人先出队列 FIFO 中 内核对存入这个FIFO的数据是有选择的 若有前后数据完全相同的情况 则内核只会选择第一个数据送入缓存 这样可以避免冗余的数据占用队列空间 这种措施可以避免用户将触笔按在一点不动的情况下 产生大量冗余数据 嵌入式系统 课件 28 触摸屏的中断处理用到了工作推后执行机制 它采用内核守护线程来完成须推后执行的工作 Linux内核守护线程是一段一直运行在内核的特殊程序 它可以认为是一个特殊的进程 也使用进程的任务结构体进行管理 使用内核守护线程的目的是要在内核中开启一段代码为特定的任务服务 它也可以作为一种工作推后执行机制用于代替第7章提到的工作队列机制 11 4 4中断处理 嵌入式系统 课件 29 触摸屏事件守护线程是整个触摸屏驱动最为核心的一段代码 它在open 函数中被开启后便一直运行在内核当中 它的任务是不断监测触笔的状态 并根据触笔状态判断是否读取坐标数据 若触笔处于按下状态就以一定时间间隔把触笔的坐标数据送人内核 否则线程自动进入睡眠态 具体的源代码如P268 嵌入式系统 课件 30 内核守护线程在触摸屏未工作时处于休眠态 当触笔按下时 线程由中断服务程序唤醒 它从ADS7843触屏控制器读取数据并向内核报告触笔位置 一旦触笔松开 线程马上会进入休眠态 唤醒线程的中断服务程序如P269 11 5基于触摸屏驱动的应用实例 为了便于理解这里只给出一个简单的触摸

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论