第11章 触摸屏电路设计及驱动开发
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
22
·如果用到设备的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成员变量。
《嵌入式系统》课件
16
17
11.4.2 硬件操控原理
硬件操控层属于驱动程序的最底层,主要的功能是 判断设备的状态、控制设备工作以及实现设备原始数据 的读/写。设备所有的硬件细节基本由这层的程序处理。 编写硬件操控层的程序要考虑器件的物理电气特性和数 字逻辑特性,以准确实现对设备的各种基本操作。在模 块化程序设计中,根据实现功能的独立性一般将对硬件 的基本操作编写为若干函数。例如可以将设备状态的判 断写成一个函数,设备运转的控制写成一个函数,对设 备数据的读/写又写成另外一个函数。这样将所有硬件的 底层特性利用模块化的方法封装起来。 触摸屏驱动程序硬件操控层要处理的关键问题有: 设备的初始化、触笔状态的判断和触点原始坐标数据的 读/写。
《嵌入式系统》课件
6
ADS7843的各引脚定义如P259表11-1所列。
芯片包含一个多路模拟开关组成的供电-测量电路 网络和一个12位的A/D转换器(参见图11-3)。 ADS7843 根据处理器发来的不同命令导通不同的模拟开关,向一 个工作面电极对提供参考电压,并把另一个工作面测量 电极上的代表触点坐标位置的电压模拟量引入A/D转换 器。 ADS7843的电压的测量方式有单端方式和差分方式 两种,这两种测量方式可以通过命令控制字选择。当通 过命令控制字,将Vcc设置为参考电压时,ADS7843工作 在单端方式;当将Y+/Y-或者X+/X-电极对设置为参考电 压时,ADS7843就工作在差分方式。
19
2. 状态判断函数
状态判断函数程序如下:
这个函数用于探测触笔的状态。若触笔按下,则函数返回1; 若触笔没按下,则函数返回O。函数中的GPLR0是个宏定义,它读 取GPLR0寄存器的值,它的值反映0~31号GPIO口的电平状态。由 前面的硬件描述可知,当触笔没有按下时,ADS7843的PENIRQ引 脚为高电平,只有当触笔按下时其引脚电平才变低。从图ll-5可 知,PENIRQ与GPIO5相连,因此, GPLR0&GPIO_bit(ADS784_PENIRQ))的值就能反映触笔的状态。
触摸屏驱动的初始化的源代码如P266。
24
2. 硬件输入数据的报告
驱动接收到用户输入的数据后,须使用事 件报告函数将数据发送到输入设备子系统。根 据事件类型的不同,使用到的事件报告函数也 略有不同。这些事件共有3种基本类型,下面对 它们及相应的事件报告函数分别给予说明:
25
·EV_KEY事件。主要由按键和按钮等设备 触发,通过input_report_key(struet input 利用等待队列实现阻塞型 I/o dev *dev,int code,int value)函数把发生 的事件通报给内核。 ·EV_REL事件。主要由鼠标等设备触发, 通过input_report_rel(struct input_dev *dev,int code,int value)函数把发生的事 件通报给内核。 ·EV_ABS事件。主要由触摸屏这类能产生 绝对值数据的设备触发,通过input_report_ abs(struct input_dev *dev,int code,int value)函数把产生的数据报给内核。
《嵌入式系统》课件
10
11.3 处理器与ADS7843的接口设计 11.3.1 电路接口设计
PXA255处理器与ADS7843的接口电路涉及PXA255 的GPIO口以及地址总线和数据总线,它的电路设计如 图11-5所示。
《嵌入式系统》课件
11
ADS7843具体外围电路设计,参见图11-6
12
11.3.2 Microwire数据帧结构
15
11.4 触摸屏软件驱动原理
11.4.1 Linux内核输入设备子系统驱动架构
Linux内核的输入(Input)设备子系统为按键、鼠 标、游戏控制杆、触摸屏等设备提供了设备驱动接口。 采用这个接口可简化设备驱动的设计,它的分层结构 如图11-8所示。其中硬件操控层负责处理设备所有的 底层硬件细节,这也是输入设备驱动须实现的部分; 输入设备接口负责接收硬件操控层获取的原始数据并 对其进行处理后送人输入设备子系统,输入设备 子系统通过Input-Event编程接口向用户程序提供设 备的输入信息。 触摸屏的驱动采用输入设备驱动接口设计,需要 完成的就是硬件操控层的编写。
《嵌入式系统》课件
18
1. 设备初始化
设备初始化程序如下:
触摸屏设备初始化所作的工作很简单,就是对相关硬件寄存 器的设置。这里用到的GPDR0是PXA255 GPIO口的控制寄存器,用 于控制GPIO0~GPIO31口的输入/输出模式。若GPDR0某位为O,则 对应的GPIO口设为输入,反之设为输出。GPIO_bit(ADS7843-BUSY) 用于取得ADS7843的BUSY脚在32位GPDR0寄存器中的对应位 (0x00000002)。ADS7843_Enable_IRQ()函数通过向ADS7843发送命 令控制字0X00使该触屏控制器中断使能(参见表11-1)。
《嵌入式系统》课件
2
3
触摸屏按其技术原理可分为矢量压力传感式、电阻式、 电容式、红外线式和表面声波式类,其中电阻式触摸屏在 嵌入式系统中使用较多。 如图11-2所示,电阻式 触摸屏由4层透明的复合薄膜 组成。最上面一层是外表面 经过硬化处理、光滑防刮的 塑料层;最下面一层是玻璃 或有机玻璃构成的基层;在 基层之上和塑料层内表面中 间是两层金属导电层,两导 电层之间有许多细小的透明 隔离点把这两层隔开。当手 指触摸屏幕时,两导电层在 触摸点处接触。
5
11.2 ADS7843触摸屏控制器简介
如前所述,触摸屏产生的是模拟信号,将这个模 拟信号转换为计算机能处理的数字信号需要通过触摸 屏控制器完成。 本章所用的触摸屏控制器ADS7843是BB公司生产 一款专用的触摸屏控制芯片,它采用16引脚小型薄型 封装。该芯片有一个12位的A/D转换器,它作为触摸 屏与CPU之间通信的桥梁,能将触摸屏上触点的模拟 电压转换成数字信号,从而准确判断出触点的坐标位 置。ADS7843的供电电压Vcc为2.7~5V,参考电压VREF, 为1V~+Vcc,转换电压的输入范围为0~ VREF。它支 持单端和差分两种测量方式,最高转换速率可达到 125kHz。
第十一章 触摸屏电路设计与驱动开发
本章要点
● 触摸屏的工作原理
● ADS7843触摸屏控制芯片的工作原理 ● 基于Linux输入设备子系统框架的驱动设计 ● 触摸屏硬件的软件操控原理 ● Linux内核线程的作用
《嵌入式系统》课件
1
11.1 触摸屏的工作原理
触摸屏是一种简单、方便的输入设备,它的应用 随着信息社会的发展越来越普遍。为了操作方便,人 们用触摸屏代替鼠标或键盘,根据触笔点击的位置来 定位选择信息输入。目前在高档PDA上,绝大部分都 使用触摸屏作为输入设备。触摸屏附着在显示器的表 面,检测用户点击的位置。触摸屏在用户输入时产生 一个反映用户点击位置的信号。这个信号通常是模拟 信号,它需要通过触摸屏控制器将模拟信号转换为数 字信号(也就是用户点击的坐标),再送给处理器进行 处理。图11-1所示的是触摸屏、触摸屏控制器与处理 器连接的示意图。本章采用BB公司生产的ADS7843触 摸屏控制器进行硬件电路设计,将触摸屏与处理器连 接起来。
4
触摸屏的两个金属导电层是触摸屏的两个工作面(通 常分别称为X工作面和Y工作面),在每个工作面的两端各 涂有一条银胶,称为该工作面的一对电极。若对一个工 作面的电极对施加电压,则该在工作面上会产生均匀、 连续的平行电压分布。
四线式触摸屏的X工作面和Y工作面共有4根引出线, 分别连到触摸屏的X电极对和Y电极对上。结合图11-1, 当在X方向的电极对施加一个确定的电压,而Y方向电极 对不加电压时,在X平行电压场中,触点处的电压值可以 在Y+(或Y-)电极上反映出来,通过测量Y+电极对地的电 压大小,便可得知触点的X坐标值。同理,当在Y电极对 加电压,而X电极对不加电压时,通过测量X+电极的电压, 便可得知触点的Y坐标。
微处理PXA255与ADS7843的数字接口通过 Microwire的数据帧进行通信。芯片完成一次 A/D转换要24个时钟周期,前8个时钟周期从DIN 引脚输入8位命令控制字,然后等待一个时钟的 BUSY周期(此时BUSY引脚会变高),最后用15个 时钟周期从高位到低位从DOUT引脚逐位输出A/D 转换结果。具体时序如图11-7所示。
20
3. 触点坐标读取函数
触点坐标读取函数程序如P264:
21
11.4.3 输入设备驱动接口的使用 1.接口的初始化
使用输入设备驱动接口之前要做一些接口的初始 化工作,设定该接口的工作模式并告之对应设备的事 件类型,此外还要设定整个驱动的open()函数和 close()函数。这些工作是通过对struct input_dev类 型的结构体的成员变量的设置实现的。 具体的工作如下:
13
14
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坐标值。
26
利用等待队列实现阻塞型I/o
驱动程序报告的数据用结构体封装后放到
一个先人先出队列(FIFO)中,内核对ห้องสมุดไป่ตู้入这个
《嵌入式系统》课件
7
8
本书所使用的工 作方式是差分方式。 这主要是因为采用单 端方式时,Vcc的波动 会引起参考电压的波 动,这将引起测量的 误差。而在差分方式 下,即使Vcc发生波动, 测量点电压(X+电压) 和参考电压(Y+、Y-引 脚之间的电压)的比例 也依然保持不变,测 量结果不会发生波动, 这样可以大大提高测 量的精度。
9
以测量触摸点的Y坐标为例,首先通过 命令控制字控制ADS7843内部的模拟开关, 将Y+、Y-引脚置为参考电压,X+引脚置为芯 片内部A/D模拟输入。此时测量到的电压和 参考电压的比例反映了Y轴坐标的大小。图 11-4所示的就是测量触摸点的Y坐标的等效 电路。 同理,若要测量触点X轴坐标值,只要 将X+、X-引脚置为与参考电压,Y+引脚置为 芯片内部A/D的模拟输入即可。
23
做完这些工作之后就可以调用 input_device_register(struet input_dev dev) 向内核注册设备。这个注册函数除了实现通用的 设备注册功能外,还会将内核中特定的设备文件 操作接口函数(如read(),write()等函数)映射 到驱动程序中去。这样就简化了驱动的设计,不 用在驱动程序中编写这些操作接口函数。