《第11章触摸屏电路设计与驱动开发精选PPT.ppt》由会员分享,可在线阅读,更多相关《第11章触摸屏电路设计与驱动开发精选PPT.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第11章触摸屏电路设计与驱动开发第1页,此课件共32页哦11.1 触摸屏的工作原理 触摸屏是一种简单、方便的输入设备,它的应用随着触摸屏是一种简单、方便的输入设备,它的应用随着信息社会的发展越来越普遍。为了操作方便,人们用触摸信息社会的发展越来越普遍。为了操作方便,人们用触摸屏代替鼠标或键盘,根据触笔点击的位置来定位选择信息屏代替鼠标或键盘,根据触笔点击的位置来定位选择信息输入。目前在高档输入。目前在高档PDAPDA上,绝大部分都使用触摸屏作为输上,绝大部分都使用触摸屏作为输入设备。触摸屏附着在显示器的表面,检测用户点击的位入设备。触摸屏附着在显示器的表面,检测用户点击的位置。触摸屏在用户输入
2、时产生一个反映用户点击位置的信置。触摸屏在用户输入时产生一个反映用户点击位置的信号。这个信号通常是模拟信号,它需要通过触摸屏控制器号。这个信号通常是模拟信号,它需要通过触摸屏控制器将模拟信号转换为数字信号将模拟信号转换为数字信号(也就是用户点击的坐标也就是用户点击的坐标),再,再送给处理器进行处理。图送给处理器进行处理。图11-111-1所示的是触摸屏、触摸屏控所示的是触摸屏、触摸屏控制器与处理器连接的示意图。本章采用制器与处理器连接的示意图。本章采用BBBB公司生产的公司生产的ADS7843ADS7843触摸屏控制器进行硬件电路设计,将触摸屏与处触摸屏控制器进行硬件电路设计,将触摸屏与处理器
3、连接起来。理器连接起来。第2页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件3第3页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件4 触摸屏按其技术原理可分为矢量压力传感式、电阻式、电容触摸屏按其技术原理可分为矢量压力传感式、电阻式、电容式、红外线式和表面声波式类,其中电阻式触摸屏在嵌入式系统式、红外线式和表面声波式类,其中电阻式触摸屏在嵌入式系统中使用较多。中使用较多。如图如图11-211-2所示,电阻式触摸所示,电阻式触摸屏由屏由4 4层透明的复合薄膜组成。最层透明的复合薄膜组成。最上面一层是外表面经过硬化处理、上面一层是外表面经过硬
4、化处理、光滑防刮的塑料层;最下面一层光滑防刮的塑料层;最下面一层是玻璃或有机玻璃构成的基层;是玻璃或有机玻璃构成的基层;在基层之上和塑料层内表面中间在基层之上和塑料层内表面中间是两层金属导电层,两导电层之是两层金属导电层,两导电层之间有许多细小的透明隔离点把这间有许多细小的透明隔离点把这两层隔开。当手指触摸屏幕时,两层隔开。当手指触摸屏幕时,两导电层在触摸点处接触。两导电层在触摸点处接触。第4页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件5 触摸屏的两个金属导电层是触摸屏的两个工作面触摸屏的两个金属导电层是触摸屏的两个工作面(通常通常分别称为分别称为X X工作面和
5、工作面和Y Y工作面工作面),在每个工作面的两端各涂有,在每个工作面的两端各涂有一条银胶,称为该工作面的一对电极。若对一个工作面的一条银胶,称为该工作面的一对电极。若对一个工作面的电极对施加电压,则该在工作面上会产生均匀、连续的平电极对施加电压,则该在工作面上会产生均匀、连续的平行电压分布。行电压分布。四线式触摸屏的四线式触摸屏的X X工作面和工作面和Y Y工作面共有工作面共有4 4根引出线,分根引出线,分别连到触摸屏的别连到触摸屏的X X电极对和电极对和Y Y电极对上。结合图电极对上。结合图11-111-1,当在,当在X X方向的电极对施加一个确定的电压,而方向的电极对施加一个确定的电压,而
6、Y Y方向电极对不加电方向电极对不加电压时,在压时,在X X平行电压场中,触点处的电压值可以在平行电压场中,触点处的电压值可以在Y+(Y+(或或Y-)Y-)电极上反映出来,通过测量电极上反映出来,通过测量Y+Y+电极对地的电压大小,便可电极对地的电压大小,便可得知触点的得知触点的X X坐标值。同理,当在坐标值。同理,当在Y Y电极对加电压,而电极对加电压,而X X电极电极对不加电压时,通过测量对不加电压时,通过测量X+X+电极的电压,便可得知触点的电极的电压,便可得知触点的Y Y坐标。坐标。第5页,此课件共32页哦11.2 ADS7843触摸屏控制器简介 如前所述,触摸屏产生的是模拟信号,将这
7、个模拟信号转如前所述,触摸屏产生的是模拟信号,将这个模拟信号转换为计算机能处理的数字信号需要通过触摸屏控制器完成。换为计算机能处理的数字信号需要通过触摸屏控制器完成。本章所用的触摸屏控制器本章所用的触摸屏控制器ADS7843ADS7843是是BBBB公司生产一款专用公司生产一款专用的触摸屏控制芯片,它采用的触摸屏控制芯片,它采用1616引脚小型薄型封装。该芯片有一引脚小型薄型封装。该芯片有一个个1212位的位的A/DA/D转换器,它作为触摸屏与转换器,它作为触摸屏与CPUCPU之间通信的桥梁,能之间通信的桥梁,能将触摸屏上触点的模拟电压转换成数字信号,从而准确判断出将触摸屏上触点的模拟电压转换
8、成数字信号,从而准确判断出触点的坐标位置。触点的坐标位置。ADS7843ADS7843的供电电压的供电电压VccVcc为为2.72.75V5V,参考电,参考电压压V VREFREF,为,为1V1V+Vcc+Vcc,转换电压的输入范围为,转换电压的输入范围为0 0 V VREFREF。它支持单端和差分两种测量方式,最高转换速率可达到它支持单端和差分两种测量方式,最高转换速率可达到125kHz125kHz。第6页,此课件共32页哦 ADS7843 ADS7843的各引脚定义如的各引脚定义如P259P259表表11-111-1所列。所列。芯片包含一个多路模拟开关组成的供电芯片包含一个多路模拟开关组成
9、的供电-测量电路网测量电路网络和一个络和一个1212位的位的A AD D转换器转换器(参见图参见图11-3)11-3)。ADS7843 ADS7843根据根据处理器发来的不同命令导通不同的模拟开关,向一个工作处理器发来的不同命令导通不同的模拟开关,向一个工作面电极对提供参考电压,并把另一个工作面测量电极上的面电极对提供参考电压,并把另一个工作面测量电极上的代表触点坐标位置的电压模拟量引入代表触点坐标位置的电压模拟量引入A AD D转换器。转换器。ADS7843 ADS7843的电压的测量方式有单端方式和差分方式两种,的电压的测量方式有单端方式和差分方式两种,这两种测量方式可以通过命令控制字选择
10、。当通过命令控制这两种测量方式可以通过命令控制字选择。当通过命令控制字,将字,将VccVcc设置为参考电压时,设置为参考电压时,ADS7843ADS7843工作在单端方式;当工作在单端方式;当将将Y+/Y-Y+/Y-或者或者X+/X-X+/X-电极对设置为参考电压时,电极对设置为参考电压时,ADS7843ADS7843就工就工作在差分方式。作在差分方式。第7页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件8第8页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件9 本书所使用的工作本书所使用的工作方式是差分方式。这主方式是差分方式。这主要是因
11、为采用单端方式要是因为采用单端方式时,时,VccVcc的波动会引起的波动会引起参考电压的波动,这将参考电压的波动,这将引起测量的误差。而在引起测量的误差。而在差分方式下,即使差分方式下,即使VccVcc发生波动,测量点电压发生波动,测量点电压(X+(X+电压电压)和参考电压和参考电压(Y+(Y+、Y-Y-引脚之间的电引脚之间的电压压)的比例也依然保持的比例也依然保持不变,测量结果不会发不变,测量结果不会发生波动,这样可以大大生波动,这样可以大大提高测量的精度。提高测量的精度。第9页,此课件共32页哦 以测量触摸点的以测量触摸点的Y Y坐标为例,首先通过命令坐标为例,首先通过命令控制字控制控制字
12、控制ADS7843ADS7843内部的模拟开关,将内部的模拟开关,将Y+Y+、Y-Y-引脚置为参考电压,引脚置为参考电压,X+X+引脚置为芯片内部引脚置为芯片内部A/DA/D模模拟输入。此时测量到的电压和参考电压的比例拟输入。此时测量到的电压和参考电压的比例反映了反映了Y Y轴坐标的大小。图轴坐标的大小。图11-411-4所示的就是测量所示的就是测量触摸点的触摸点的Y Y坐标的等效电路。坐标的等效电路。同理,若要测量触点同理,若要测量触点X X轴坐标值,只要将轴坐标值,只要将X+X+、X-X-引脚置为与参考电压,引脚置为与参考电压,Y+Y+引脚置为芯片内部引脚置为芯片内部A/DA/D的模拟输入
13、即可。的模拟输入即可。第10页,此课件共32页哦11.3 处理器与ADS7843的接口设计 PXA255 PXA255处理器与处理器与ADS7843ADS7843的接口电路涉及的接口电路涉及PXA255PXA255的的GPIOGPIO口以及地址总线和数据总线,它的电路设计如图口以及地址总线和数据总线,它的电路设计如图11-511-5所示。所示。11.3.1 11.3.1 电路接口设计电路接口设计第11页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件12ADS7843ADS7843具体外围电路设计,参见图具体外围电路设计,参见图11-611-6第12页,此课件共32页
14、哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件13 微处理微处理PXA255PXA255与与ADS7843ADS7843的数字接口通过的数字接口通过MicrowireMicrowire的数据帧进行通信。芯片完成一次的数据帧进行通信。芯片完成一次A/DA/D转换转换要要2424个时钟周期,前个时钟周期,前8 8个时钟周期从个时钟周期从DINDIN引脚输入引脚输入8 8位命位命令控制字,然后等待一个时钟的令控制字,然后等待一个时钟的BUSYBUSY周期周期(此时此时BUSYBUSY引引脚会变高脚会变高),最后用,最后用1515个时钟周期从高位到低位从个时钟周期从高位到低位从DOUTDO
15、UT引脚逐位输出引脚逐位输出A/DA/D转换结果。具体时序如图转换结果。具体时序如图11-711-7所示。所示。11.3.2 11.3.2 MicrowireMicrowire数据帧结构数据帧结构第13页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件14第14页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件15 Microwire Microwire数据传输可以分两个阶段:数据传输可以分两个阶段:处理器向处理器向ADS7843ADS7843发送命令控制字。该阶段将决定发送命令控制字。该阶段将决定ADS7843ADS7843的工作方式和状态
16、。该命令控制字一共的工作方式和状态。该命令控制字一共8 8位,每一位,每一位都有特定的作用和含义,它们分别决定位都有特定的作用和含义,它们分别决定ADCADC输入通道、输入通道、A/DA/D转换精度、参考电压输人模式、省电模式、中断允许等,转换精度、参考电压输人模式、省电模式、中断允许等,具体含义如具体含义如P262P262表表11-211-2所列。所列。处理器接收从处理器接收从ADS7843ADS7843发送过来的发送过来的A/DA/D转换结果。该转换结果。该结果是个结果是个1212位数据,它反映了触摸屏位数据,它反映了触摸屏X X方向或方向或Y Y方向的逻辑方向的逻辑坐标值。这两个逻辑坐标
17、经过处理后可转成屏幕坐标。坐标值。这两个逻辑坐标经过处理后可转成屏幕坐标。触笔坐标的读取要经过触笔坐标的读取要经过2 2次次A/DA/D转换。微处理器前后转换。微处理器前后要通过发送不同命令字要通过发送不同命令字,分别选通触摸屏控制器片内分别选通触摸屏控制器片内A/DA/D转换器转换器(ADC)(ADC)模块的模块的X X输入通道和输入通道和Y Y输入通道,分别读取触输入通道,分别读取触笔的笔的X X坐标值和坐标值和Y Y坐标值。坐标值。第15页,此课件共32页哦11.4 触摸屏软件驱动原理 Linux Linux内核的输入内核的输入(Input)(Input)设备子系统为按键、鼠标、设备子系
18、统为按键、鼠标、游戏控制杆、触摸屏等设备提供了设备驱动接口。采用游戏控制杆、触摸屏等设备提供了设备驱动接口。采用这个接口可简化设备驱动的设计,它的分层结构如图这个接口可简化设备驱动的设计,它的分层结构如图11-811-8所示。其中硬件操控层负责处理设备所有的底层硬所示。其中硬件操控层负责处理设备所有的底层硬件细节,这也是输入设备驱动须实现的部分;输入设备件细节,这也是输入设备驱动须实现的部分;输入设备接口负责接收硬件操控层获取的原始数据并对其进行处接口负责接收硬件操控层获取的原始数据并对其进行处理后送人输入设备子系统,输入设备理后送人输入设备子系统,输入设备子系统通过子系统通过Input-Ev
19、entInput-Event编程接口向用户程序提供设备编程接口向用户程序提供设备的输入信息。的输入信息。触摸屏的驱动采用输入设备驱动接口设计,需要完成的就触摸屏的驱动采用输入设备驱动接口设计,需要完成的就是硬件操控层的编写。是硬件操控层的编写。11.4.1 11.4.1 LinuxLinux内核输入设备子系统驱动架内核输入设备子系统驱动架构构第16页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件17第17页,此课件共32页哦 硬件操控层属于驱动程序的最底层,主要的功能是判断硬件操控层属于驱动程序的最底层,主要的功能是判断设备的状态、控制设备工作以及实现设备原始数据的
20、读设备的状态、控制设备工作以及实现设备原始数据的读/写。写。设备所有的硬件细节基本由这层的程序处理。编写硬件操控设备所有的硬件细节基本由这层的程序处理。编写硬件操控层的程序要考虑器件的物理电气特性和数字逻辑特性,以准层的程序要考虑器件的物理电气特性和数字逻辑特性,以准确实现对设备的各种基本操作。在模块化程序设计中,根据确实现对设备的各种基本操作。在模块化程序设计中,根据实现功能的独立性一般将对硬件的基本操作编写为若干函数。实现功能的独立性一般将对硬件的基本操作编写为若干函数。例如可以将设备状态的判断写成一个函数,设备运转的控制例如可以将设备状态的判断写成一个函数,设备运转的控制写成一个函数,对
21、设备数据的读写成一个函数,对设备数据的读/写又写成另外一个函数。这写又写成另外一个函数。这样将所有硬件的底层特性利用模块化的方法封装起来。样将所有硬件的底层特性利用模块化的方法封装起来。触摸屏驱动程序硬件操控层要处理的关键问题有触摸屏驱动程序硬件操控层要处理的关键问题有:设备的初始化、触笔状态的判断和触点原始坐标数据的读设备的初始化、触笔状态的判断和触点原始坐标数据的读/写。写。11.4.2 11.4.2 硬件操控原理硬件操控原理第18页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件19设备初始化程序如下:设备初始化程序如下:1.1.设备初始化设备初始化触摸屏设备初
22、始化所作的工作很简单,就是对相关硬件寄存器的设触摸屏设备初始化所作的工作很简单,就是对相关硬件寄存器的设置。这里用到的置。这里用到的GPDR0GPDR0是是PXA255 GPIOPXA255 GPIO口的控制寄存器,用于控制口的控制寄存器,用于控制GPIO0GPIO0GPIO31GPIO31口的输入口的输入/输出模式。若输出模式。若GPDR0GPDR0某位为某位为O O,则对应的,则对应的GPIOGPIO口设为口设为输入,反之设为输出。输入,反之设为输出。GPIO_bit(ADS7843-BUSY)GPIO_bit(ADS7843-BUSY)用于取得用于取得ADS7843ADS7843的的BU
23、SYBUSY脚在脚在3232位位GPDR0GPDR0寄存器中的对应位寄存器中的对应位(0 x00000002)(0 x00000002)。ADS7843_Enable_IRQ()ADS7843_Enable_IRQ()函数通过向函数通过向ADS7843ADS7843发送命令控制字发送命令控制字0X000X00使该触屏控制器中断使能使该触屏控制器中断使能(参见参见表表11-1)11-1)。第19页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件20状态判断函数程序如下:状态判断函数程序如下:2.2.状态判断函数状态判断函数这个函数用于探测触笔的状态。若触笔按下,则函数返
24、回这个函数用于探测触笔的状态。若触笔按下,则函数返回1 1;若触;若触笔没按下,则函数返回笔没按下,则函数返回O O。函数中的。函数中的GPLR0GPLR0是个宏定义,它读取是个宏定义,它读取GPLR0GPLR0寄寄存器的值,它的值反映存器的值,它的值反映0 03131号号GPIOGPIO口的电平状态。由前面的硬件描述口的电平状态。由前面的硬件描述可知,当触笔没有按下时,可知,当触笔没有按下时,ADS7843ADS7843的的PENIRQPENIRQ引脚为高电平,只有当触引脚为高电平,只有当触笔按下时其引脚电平才变低。从图笔按下时其引脚电平才变低。从图ll-5ll-5可知,可知,PENIRQP
25、ENIRQ与与GPIO5GPIO5相连,因相连,因此,此,GPLR0&GPIO_bit(ADS784_PENIRQ)GPLR0&GPIO_bit(ADS784_PENIRQ)的值就能反映触笔的状态。的值就能反映触笔的状态。第20页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件21 触点坐标读取函数程序如触点坐标读取函数程序如P264:3.3.触点坐标读取函数触点坐标读取函数第21页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件22 1 1接口的初始化接口的初始化 使用输入设备驱动接口之前要做一些接口的初始化工作,使用输入设备驱动接口之前要
26、做一些接口的初始化工作,设定该接口的工作模式并告之对应设备的事件类型,此外还要设定该接口的工作模式并告之对应设备的事件类型,此外还要设定整个驱动的设定整个驱动的open()open()函数和函数和close()close()函数。这些工作是通过对函数。这些工作是通过对struct input_devstruct input_dev类型的结构体的成员变量的设置实现的。类型的结构体的成员变量的设置实现的。具体的工作如下:具体的工作如下:11.4.3 11.4.3 输入设备驱动接口的使用输入设备驱动接口的使用第22页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件23 如果
27、用到设备的如果用到设备的EV_ABSEV_ABS事件,则要设定结构体的事件,则要设定结构体的absminABS_XabsminABS_X、absmaxABS_XabsmaxABS_X、absminABS_YabsminABS_Y和和absmaxABS_YabsmaxABS_Y域。它们用来确定从设备接收数据的允许取值域。它们用来确定从设备接收数据的允许取值范围。范围。设备注册之前必须设定好结构体的设备注册之前必须设定好结构体的namename、Id.productId.product、Id.vendorId.vendor和和Id.versionId.version等域。这些成员变等域。这些成员变
28、量用于存储设备的产品信息。量用于存储设备的产品信息。调用调用_set_bit()_set_bit()函数设置函数设置evbitevbit域的对应位,告诉内核的域的对应位,告诉内核的输入设备子系统该设备会产生哪些类型的事件;设置输入设备子系统该设备会产生哪些类型的事件;设置absbitabsbit域域的对应位,告诉内核设备会产生哪些类型的绝对值;设置的对应位,告诉内核设备会产生哪些类型的绝对值;设置keybitkeybit域的对应位,告诉内核设备会产生哪些类型的按键值。域的对应位,告诉内核设备会产生哪些类型的按键值。编写好驱动程序的编写好驱动程序的open()open()操作接口函数和操作接口函
29、数和close()close()操作接口函数,并把它们的函数指针赋给操作接口函数,并把它们的函数指针赋给dev.opendev.open和和dev.closedev.close成员变量。成员变量。第23页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件24 做完这些工作之后就可以调用做完这些工作之后就可以调用input_device_register(struet input_dev dev)input_device_register(struet input_dev dev)向内向内核注册设备。这个注册函数除了实现通用的设备注册功核注册设备。这个注册函数除了实现通用
30、的设备注册功能外,还会将内核中特定的设备文件操作接口函数能外,还会将内核中特定的设备文件操作接口函数(如如readread()(),write()write()等函数等函数)映射到驱动程序中去。这样就简化映射到驱动程序中去。这样就简化了驱动的设计,不用在驱动程序中编写这些操作接口函了驱动的设计,不用在驱动程序中编写这些操作接口函数。数。触摸屏驱动的初始化的源代码如触摸屏驱动的初始化的源代码如P266P266。第24页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件25 驱动接收到用户输入的数据后,须使用事件报驱动接收到用户输入的数据后,须使用事件报告函数将数据发送到输
31、入设备子系统。根据事件类告函数将数据发送到输入设备子系统。根据事件类型的不同,使用到的事件报告函数也略有不同。这型的不同,使用到的事件报告函数也略有不同。这些事件共有些事件共有3 3种基本类型,下面对它们及相应的事件种基本类型,下面对它们及相应的事件报告函数分别给予说明:报告函数分别给予说明:2.2.硬件输入数据的报告硬件输入数据的报告第25页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件26利用等待队列实现阻塞型利用等待队列实现阻塞型Io EV_KEY EV_KEY事件。主要由按键和按钮等设备触发,事件。主要由按键和按钮等设备触发,通过通过input_report
32、_key(struet input dev*devinput_report_key(struet input dev*dev,int codeint code,int value)int value)函数把发生的事件通报给内核。函数把发生的事件通报给内核。EV_REL EV_REL事件。主要由鼠标等设备触发,通过事件。主要由鼠标等设备触发,通过input_report_rel(struct input_dev *devinput_report_rel(struct input_dev *dev,int codeint code,int value)int value)函数把发生的事件通报给内函
33、数把发生的事件通报给内核。核。EV_ABS EV_ABS事件。主要由触摸屏这类能产生绝事件。主要由触摸屏这类能产生绝对值数据的设备触发,通过对值数据的设备触发,通过input_report_ input_report_ abs(struct input_dev*devabs(struct input_dev*dev,int codeint code,int int value)value)函数把产生的数据报给内核。函数把产生的数据报给内核。第26页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件27利用等待队列实现阻塞型利用等待队列实现阻塞型Io 驱动程序报告的数据用
34、结构体封装后放到一个驱动程序报告的数据用结构体封装后放到一个先人先出队列先人先出队列(FIFO)(FIFO)中,内核对存入这个中,内核对存入这个FIFOFIFO的数的数据是有选择的,若有前后数据完全相同的情况,则据是有选择的,若有前后数据完全相同的情况,则内核只会选择第一个数据送入缓存。这样可以避免内核只会选择第一个数据送入缓存。这样可以避免冗余的数据占用队列空间。这种措施可以避免用户冗余的数据占用队列空间。这种措施可以避免用户将触笔按在一点不动的情况下,产生大量冗余数据。将触笔按在一点不动的情况下,产生大量冗余数据。第27页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系
35、统课件28 触摸屏的中断处理用到了工作推后执行机制触摸屏的中断处理用到了工作推后执行机制,它采,它采用用内核守护线程来完成须推后执行的工作。内核守护线程来完成须推后执行的工作。Linux Linux内核守护线程是一段一直运行在内核的特内核守护线程是一段一直运行在内核的特殊程序。它可以认为是一个特殊的进程,也使用进程殊程序。它可以认为是一个特殊的进程,也使用进程的任务结构体进行管理。使用内核守护线程的目的是的任务结构体进行管理。使用内核守护线程的目的是要在内核中开启一段代码为特定的任务服务。它也可要在内核中开启一段代码为特定的任务服务。它也可以作为一种工作推后执行机制用于代替第以作为一种工作推后
36、执行机制用于代替第7 7章提到的章提到的工作队列机制。工作队列机制。11.4.4 11.4.4 中断处理中断处理第28页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件29 触摸屏事件守护线程是整个触摸屏驱动最为触摸屏事件守护线程是整个触摸屏驱动最为核心的一段代码,它在核心的一段代码,它在open()open()函数中被开启后便函数中被开启后便一直运行在内核当中。它的任务是不断监测触笔一直运行在内核当中。它的任务是不断监测触笔的状态,并根据触笔状态判断是否读取坐标数据。的状态,并根据触笔状态判断是否读取坐标数据。若触笔处于按下状态就以一定时间间隔把触笔的若触笔处于按下
37、状态就以一定时间间隔把触笔的坐标数据送人内核,否则线程自动进入睡眠态。坐标数据送人内核,否则线程自动进入睡眠态。具体的源代码如具体的源代码如P268P268第29页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件30 内核守护线程在触摸屏未工作时处于休眠态。当内核守护线程在触摸屏未工作时处于休眠态。当触笔按下时,线程由中断服务程序唤醒,它从触笔按下时,线程由中断服务程序唤醒,它从ADS7843ADS7843触屏控制器读取数据并向内核报告触笔位置;一旦触触屏控制器读取数据并向内核报告触笔位置;一旦触笔松开,线程马上会进入休眠态。笔松开,线程马上会进入休眠态。唤醒线程的中
38、断服务程序如唤醒线程的中断服务程序如P269P269第30页,此课件共32页哦11.5 基于触摸屏驱动的应用实例 为了便于理解这里只给出一个简单的触摸屏驱动应用为了便于理解这里只给出一个简单的触摸屏驱动应用实例。该应用示例的功能是读取触笔的逻辑坐标值并将其实例。该应用示例的功能是读取触笔的逻辑坐标值并将其在终端显示出来。程序中用到两个结构体:一个是在终端显示出来。程序中用到两个结构体:一个是struct struct input_eventinput_event,这个结构体可将坐标数据的从输人设备子,这个结构体可将坐标数据的从输人设备子系统的缓存中读出;另一个是系统的缓存中读出;另一个是str
39、uct xyposition struct xyposition positionposition,这是个自定义结构体可保存触摸屏的逻辑坐标,这是个自定义结构体可保存触摸屏的逻辑坐标对。程序主要利用一个对。程序主要利用一个switchswitch的分支结构通过读取的分支结构通过读取struct struct input_eventinput_event结构体的事件代号,判断从驱动中读取数据结构体的事件代号,判断从驱动中读取数据的含义并将其赋给的含义并将其赋给positionposition对应的成员变量。如果一对坐对应的成员变量。如果一对坐标值的读取已经完成,就将其在终端显示出来。标值的读取已经完成,就将其在终端显示出来。程序的具体代码见程序的具体代码见P270P270第31页,此课件共32页哦嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件32OVER!第32页,此课件共32页哦