嵌入式系统原理及应用
《嵌入式系统原理及应用》结课论文
学生姓名 艾力江
学 号 5021212126
所属学院 信息工程学院
专 业 通信工程专业
班 级 通信17-1
塔里木大学教务处制
目录
摘要 ....................................................................1
1 前言 ..................................................................1
1.1触摸屏简介 .......................................................1
1.2系统组成原理 .....................................................2
1.3触摸屏工作原理 ...................................................2
1.4 LCD触摸屏的应用及发展前景 .......................................4
1.5 A\RM嵌入式处理器 ................................................4
2 系统整体方案设计 ......................................................7
2.1 系统硬件及整体功能 ...............................................7
2.2 系统软件设计方案的选择 ...........................................7
2.3 硬件实现处理器的选择 .............................................8
2.4 外围芯片的选择 ...................................................9
2.5 硬件原理图 ......................................................11
3. LCD触摸屏软件设计 ...................................................16
3.1 界面的定制与显示.................................................16
3.2 触摸屏信息的处理................................................16
3.3 主函数初始化 ....................................................16
4 分析驱动 .............................................................16
4.1 触摸屏设备驱动中数据结构 ........................................16
4.2 触摸屏驱动模块加载和卸载函数 ....................................17
4.3 触摸屏设备驱动的读函数 ..........................................18
4.4 触摸屏设备驱动的轮询与异步通知 ..................................18
5 结论 .................................................................19
参考文献 ...............................................................20
基于嵌入式LCD 的触摸屏
摘要:
如今LCD 触摸屏应用已成为生活中很常见的现象,通过利用这种装置,改变了传统的较为复杂呆板的机械人机交互方式。使得人际之间信息的交互变得简单,快捷,而且更具形象化。本文针对基于ARM 系统LCD 触摸屏设计的介绍,分析LCD 触摸屏的工作原理及硬件结构,然后进一步开发除了触摸屏的驱动程序。通过软硬件的结合,可以实现利用触摸屏完成人际之间信息的交互,同时也可以将该设计运用到同类人机交互系统中缩短产品的开发周期,降低产品的开发成本。 关键词:LCD 触摸屏;ARM ;人机交换系统
1. 前言
随着嵌进式系统技术的飞速发展,产业设备产品也越来越现代化,普遍要求可视化,LCD 触摸屏低耗能.散热小,本钱低,纤薄轻巧,外形尺寸小,安装轻易。使用LCD 触摸屏作为产业设备的输进输出设备既能达到可视化的要求,方便现场操纵,又能降低产品的本钱。
而在产品的整体设计过程中,人机交互界面的设计往往占据着很大一部分工作,这样,不但极大地增加了产品的开发本钱并且延长了产品的上市周期。本文设计的基于S3C44BOX 的人机交互界面是一种可定制、简单易用、性能优良的通用型人机交互界面,能很好地解决上述问题。
1.1 触摸屏简介
触摸屏起源于20世纪70年代,早期多被装于工控计算机、POS 机终端等工业或商用设备之中。2007年Phone 手机的推出,成为触控行业发展的一个里程碑。苹果公司把一部至少需要20个按键的移动电话,设计得仅需三四个键就能搞定,剩余操作则全部交由触控屏幕完成。除赋予了使用者更加直接、便捷的操作体验之外,还使手机的外形变得更加时尚轻薄,增加了人机直接互动的亲切感,引发消费者的热烈追捧,同时也开启了触摸屏向主流操控界面迈进的征程。
触摸屏(touch screen)又称为“触控屏”“触控面板”,是一种可接收触头等输入讯号的感应式液晶显示装置,当接触了屏幕上的图形按钮时,屏幕上的触觉反馈系统可根据预先编程的程式驱动各种连结装置,可用以取代机械式的按钮面板,并借由液晶显示画面制造出生动的影音效果。触摸屏作为一种最新的电脑输入设备,它是目前最简单、方便、自然的一种人机交互方式。它赋予了多媒体以崭新的面貌,是极富吸引力的全新多媒体交互设备。
1.2系统组成原理
触摸屏输入系统由触摸屏、触摸屏控制器和微控制器三部分组成。图1示出了一个实际的触摸屏输入系统,在该系统中触摸屏采用信利公司的四线电阻式触摸屏,触摸屏控制器采用BB 公司的ADS7846,微控制器为Motorola M·CORE 系列的MMC2107。
图1 触摸屏输入系统的组成
图2触摸屏的触摸示意图
1.3触摸屏工作原理
触摸屏附着在显示器的表面,与显示器相配合使用,如果能测量出触摸点在屏幕上的坐标位置,则可根据显示屏上对应坐标点的显示内容或图符获知触摸者的意图。触摸屏按其技术原理可分为五类:矢量压力传感式、电阻式、电容式、红外线式、表面声波式,其中电阻式触摸屏在嵌入式系统中用的较多。电阻触摸屏是一块4层的透明的复合薄膜屏,如图2所示,最下面是玻璃或有机玻璃构成的基层,最上面是一层外表面经过硬化处理从而光滑防刮的塑料层,中间是两层金属导电层,分别在基层之上和塑料层内表面,在两导电层之间有许多细小的透明隔离点把它们隔开。当手指触摸屏幕时,两导电层在触摸点处接触。
触摸屏的两个金属导电层是触摸屏的两个工作面,在每个工作面的两端各涂有一条银胶,称为该工作面的一对电极,若在一个工作面的电极对上施加电压,则在该工作面上就会形成均匀连续的
平行电压分布。如图1所示,当在X 方向的电极对上施加一确定的电压,而Y 方向电极对上不加电压时,在X 平行电压场中,触点处的电压值可以在Y+(或Y-) 电极上反映出来,通过测量Y+电极对地的电压大小,便可得知触点的X 坐标值。同理,当在Y 电极对上加电压,而X 电极对上不加电压时,通过测量X+电极的电压,便可得知触点的Y 坐标。电阻式触摸屏有四线和五线两种。四线式触摸屏的X 工作面和Y 工作面分别加在两个导电层上,共有四根引出线,分别连到触摸屏的X 电极对和Y 电极对上。五线式触摸屏把X 工作面和Y 工作面都加在玻璃基层的导电涂层上,但工作时,仍是分时加电压的,即让两个方向的电压场分时工作在同一工作面上,而外导电层则仅仅用来充当导体和电压测量电极。因此,五线式触摸屏的引出线需为5根。
触摸屏接口工作模式:
(1)普通转换模式
普通转换模式(AUTO_PST = 0,XY_PST = 0)是用作一般目的下的ADC 转换。这个模式可以通过设置ADCCON 和ADCTSC 来进行对AD 转换的初始化;而后读取ADCDAT0(ADC 数据寄存器0)的XPDATA 域(普通ADC 转换)的值来完成转换。
(2)分离的X/Y轴坐标转换模式:X 轴坐标转换和Y 轴坐标转换。
X 轴坐标转换(AUTO_PST=0且XY_PST=1)将X 轴坐标转换数值写入到ADCDAT0寄存器的XPDATA 域。转换后,触摸屏接口将产生中断源(INT_ADC)到中断控制器。
Y 轴坐标转换(AUTO_PST=0且XY_PST=2)将X 轴坐标转换数值写入到ADCDAT1寄存器的YPDATA 域。转换后,触摸屏接口将产生中断源(INT_ADC)到中断控制器。
(3)自动(连续)X/Y轴坐标转换模式。
自动(连续)X/Y轴坐标转换模式(AUTO_PST=1且XY_PST= 0)以下面的步骤工作:
触摸屏控制器将自动地切换X 轴坐标和Y 轴坐标并读取两个坐标轴方向上的坐标。触摸屏控制器自动将测量得到的X 轴数据写入到ADCDAT0寄存器的XPDATA 域,然后将测量到的Y 轴数据到ADCDAT1的YPDATA 域。自动(连续)转换之后,触摸屏控制器产生中断源(INT_ADC)到中断控制器。
(4)等待中断模式
当触摸屏控制器处于等待中断模式下时,它实际上是在等待触摸笔的点击。在触摸笔点击到触摸屏上时,控制器产生中断信号(INC_TC)。中断产生后,就可以通过设置适当的转换模式(分离的X/Y轴坐标转换模式或自动X/Y轴坐标转换模式)来读取X 和Y 的位置。
(5)静态(Standby )模式
当ADCCON 寄存器的STDBM 位被设为1时,Standby 模式被激活。在该模式下,A/D转换操作停止,ADCDAT0寄存器的XPDATA 域和ADCDAT1寄存器的YPDATA (正常ADC )域保持着先前转换所得的值。
1.4 LCD触摸屏的应用及发展前景
目前,触摸屏应用范围正在变得越来越广泛,从工业用途的工厂设备的控制/操作系统、公共信息查询的电子查询设施、商业用途的提款机,到消费性电子的移动电话、PDA 、数码相机等都可看到触控屏幕的身影。当然,这其中应用最为广泛的仍是手机。2008年采用触控式屏幕的手机出货量将超过1亿部,如今,安装触控界面的手机出货量已超过5亿部。而且有迹象表明,触摸屏在消费电子产品中的应用范围正从手机屏幕等小尺寸领域向具有更大屏脑拓展。目前,戴尔、惠普、富士通、华硕等一线笔记本电脑品牌厂商都计划推出具备触摸屏的笔记本电脑或UMPC 。由此可以看出,触摸屏市场未来的发展前景也十分诱人。根据市场调研机构的预测,到2017年触摸屏产值将达到239亿美元。
1.5 A\RM嵌入式处理器
RISC 嵌入式处理器是目前高中端嵌入式设计和应用的主流,现今比较流行的RISC
处理器有PowerPC 、MIPS 和ARM 。其中ARM 嵌入式处理器以其小体积、低功耗、低成本和高性能等特点占据了业界领先地位,已经成为一种事实上的标准。
目前市场上常用的基于ARM 体系结构的通用嵌入式处理器系列有ARM7 和ARM9 系列。ARM7系列处理器包括ARM7TDMI 、ARM7TDMI-S 、ARM720T 、ARM7EJ 等几种类核是低功耗的32位RISC 架构处理器,三级流水线,主频达到66MHz 。ARM9系列处理器包括
ARM920TDMI 、ARM922T 、ARM940T 等几种类型的核,采用五级流水线,主频达到533MHz 。此外,ARM 系列处理器还包括ARM9E 、ARM10E 和ARM11等几个系列。SAMSUNG 公司推出的一系列采用ARM 处理器和微控制器的产品,性能良好,数据手册丰富,配套应用方案完善,因此迅速在通信产品民用市场上获得了广泛的应用,在ARM 处理器产品中极具代表性。如ADS7846.
(1)ADS7846触摸屏控制器的工作原理
各种类型的触摸屏均有其相应的控制器,如:ADS7846是四线式触摸屏的控制器,而ADS7845是五线式触摸屏的控制器。控制器的主要功能是分时向X 、Y 电极对施加电压,并把测量电极上的电压信号转换为相应触摸点的X 、Y 坐标。
ADS7846内部有一个由多个模拟开关组成的供电-测量电路网络和12位的A/D转换器(参见图
3)。ADS7846根据微控制器发来的不同测量命令导通不同的模拟开关,以便向工作面电极对提供电压,并把相应测量电极上的触点坐标位置所对应的电压模拟量引入A/D转换器。在触摸点X 、Y 坐标的测量过程中,测量电压与测量点的等效电路如图4所示,图中P 为测量点。
图3 ADS7846的功能框图
图4 测量关系
ADS7846与MMC2107之间通过标准的SPI 口相连,由MMC2107启动3次SPI 传送来完成转换,如图5所示。第一次SPI 传送由MMC2107向ADS846发控制字,包括起始位、通道选择、8/12位模式、差分/单端选择和掉电模式选择,接下来的两次SPI 传送则是MMC2107从ADS7846取A/D转换结果数据(最后四位自动补零),完成触摸屏控制器和微控制器之间的一次通信。
图5 转换时序
(4)笔中断(PENIRQ #)输出
ADS7846通过笔中断请求向MMC2107表示有触摸发生。如图6所示,当没有触摸时,MOSFET ①和②打开、③关闭,则笔中断输出引脚通过外加的上拉电阻输出为高。当有触摸时,①和③打开、②关闭,则笔中断输出引脚通过③内部连接到地而输出为低,从而向MMC2107提中断请求。
图6笔中断请求
2. 系统整体方案设计
本系统采用LCD 触摸屏模块OCMJ15x20D ,配以相应的外围硬件,通过ARM 芯片S3C44B0X 对触摸屏从外界采集的信息的处理,然后据此控制受控系统,并给与触摸屏信息确认及输出。
2.1 系统硬件及整体功能
系统硬件组成及整体功能系统主要包括三个部分,分别为PC 机、S3C4480X 微处理器和LCD 触摸屏模块。
该系统有三部分组成:PC 机,用于定制人机交互界面信息;S3C4480X 处理器,用于控制触摸模块接收到的外界信息;LCD 触摸屏模块,是直接参与人机交互的层面,通过它可以显示出虚拟按键,人们可以对其操作,然后配以处理器及外围硬件的协同工作,达到完成对一起的控制目的。
通过该系统可以给产业设备提供一个可视化的人机界面。来自PC 机的定制好的界面信息存储在ARM 的FLASH 存储器内。在应用当中,当微处理器接收到触摸屏按键信息时,对产业设备进行控制。同时微处理器也对LCD 进行界面的刷新,这样以完成人机交互。
2.2 系统软件设计方案的选择
为增强系统的稳定性和可靠性,在软件设计中将进行操作系统(Operating System ,OS )的移植,进而对应用程序进行设计。嵌入式OS 负责嵌入式系统全部软、硬件资源的分配、调度,控制
和协调各部件的工作,与普通OS 相比,嵌入式OS 在系统实时高效性、硬件依赖性、软件固化及应用的专用性方面具有较为突出的特点。
嵌入式OS 种类繁多,大体上分为商用型和免费型两大块,其中商用型功能稳定、可靠,有完善的技术支持和售后服务,但价格昂贵,典型的有VxWorks 、WinCE 等。免费型的源代码公开,性能也较良好,主要有嵌入式Linux 和μC/OS。
随着开源软件的迅速发展,Linux 和μC/OS已经具有非常广泛的应用。基于良好的性价比,本文将采用uClinux 作为触摸屏终端的操作系统。
uClinux 是一种优秀的嵌入式Linux 版本,它秉承了标准Linux 的优良特性,是经过各方面的小型化改造,形成的一个高度优化的、代码紧凑的嵌入式Linux 。虽然它的体积很小,但性能稳定,有良好的移植性。在操作系统移植完成后,本文将结合触摸屏终端所需实现的功能,给出其整体的软件设计方案。
2.3 硬件实现处理器的选择
本系统选择三星公司基于ARM7TDMI 的16/32位微处理器S3C44B0X 。该芯片为手持设备以及一般嵌入式应用提供了一个成本低廉、功能强大的微控制器解决方案。有丰富的内置部件,包括:8KB cache ,内部SRAM ,LCD 控制器,带自动握手的2通道UART ,4通道DMA ,系统管理器(片选辑,FP/EDO/SDRAM 控制器),代用PWM 功能的5通道定制器,
I/O端口,RTC 8通道10位ADC ,IIC-BUS 接口,IIS-BUS 接口,PLL 倍频器。
S3C44B0X 内部结构图
S3C44B0X 内部结构如图7所示:
图7 S3C44B0X内部结构图
S3C44B0X 引脚图
S3C44B0X 引脚情况如图8所示:
图8 S3C44B0X引脚图
由于S3C44B0X 引脚数量众多,此处不再对其详细说明,有关各引脚功能可以参阅相关资料。
2.4 外围芯片的选择
根据功能要求,该系统还需配置其他外围芯片,用于辅助完成要求功能。此处选用的外围芯片为FM7843,不过它已被集成在触摸屏模块OCMJ15x20D 中,它主要用来对触摸点进行检测,并把检测到的信息送出转换为相应的坐标,以供S3C44BOX 处理器读取。下面对该芯片结构及原理作简要介绍
模块FM7843是四线电阻式触摸屏输进控制芯片。它是一款具有同步串行接口的12位采样模数转换器。在125kHz 吞吐速率和2.7V 电压下的功耗为750μW .而在封闭模式下的功耗仅为0.5μW 。它具有低功耗和高速等特性,因此被广泛应用。引脚X+、Y+、X-、Y-是转换器模拟输进端,DCLK 是外部时钟输进;CS 是片选端:DIN 是串行输进,其控制数据通过该引脚输进;DOUT 是串行数据输出.用于输出转换后的触摸位置数据。最大数为二进制的4095;IN3、IN4是辅助输进;PENIRQ 是PEN 中断引脚。其中,S3C44BOX 共使用6条与FM7843接口相连。
其结构如图9所示:
图9 FM7843结构图
FM7843有关引脚介绍列表如下;
表1 FM7843引脚介绍
2.5 硬件原理图
图10
图11 触屏模块OCMJ15x20D
上图为触屏模块OCMJ15x20D 的实体图和外形尺寸图本系统显示部分采用的正是该模块系列中文液晶湿示模块,其中OCMJ 表示奥可拉中文集成模块。这是一个中英文文字与绘图模式的点阵液晶屁示模块,内建512KByte 的ROM 字形码,可以显示中文字型、数字符号、英日欧文等字母,
并且内建双图层(Two Page) 的显爪内存。在文字模式中,可接收标准中文文字内码直接显示中文,而不需要进进绘图模式以绘图方式描绘中文,提升液晶显示中文之效率。该模块整合了多项的实用界面,包含内建的10-Bit ADC.提供触控屏接口。OCMJ15X20D(V3.2)的触摸屏是用FM7843控制的,该控制器已集成在模块上,模块已留出FM7843的控制线供客户使用(OCMJ15X20D上的J5脚) ,可直接使用3V 供电而不需外接负电压。
该模块同时支持支持文字与绘图两种混和显示模式。
支持2 Page 显示模式(And, Or, Nor, Xor),内建两个4.8K / 9.6 K(15x20D )Byte 的显示RAM (Display Data RAM)共9.6K / 19.2 K(15x20D )Byte RAM并且可做成4 阶的显示效果。
内建512KByte ROM,控制IC 分带繁体字库IC 和带简体字库IC ,其中标准繁体中文BIG5 码,包含13,094个常用与次常用字型、408 个特殊字与两组ASCII CODE,简体字库储存7602 个标准GB 码的简体中文。
提供全角(16x16)与半角(8x16)文字显示模式。
支持4/8 位之6800/8080 MCU 接口。
内建8x8 键盘扫瞄界面(Key Scan)。
带光标、反白、闪烁功能,且光标高度与宽度可调。
支持屏幕水平卷动及垂直卷动功能。
内建512Byte SRAM 可自行造字。
提供中/英文文字对齐功能。
显示字型可放大到32x32、48x48 或64x64,以及混合显示模式。
支持可将字型由ROM 直接读出使用。
内建粗体字形与行距设定。
内建10-Bit ADC 支持触控屏幕应用(OCMJ4X15D 和OCMJ5X10D 屏蔽了此功能)。
OCMJ4X15D 和OCMJ5X10D 当为黄绿屏而不使用背光时,或者为蓝屏使用背光时,可使用3V 供电而。不需外接负电压。
OCMJ8X10D 和OCMJ8X15D 也可使用3V 供电但需外接负电压,除OCMJ8X10D 的蓝屏背光可使用。
3V 供电外,其他背光都要4.1V 以上供电。
OCMJ15X20D 可直接使用3V 供电而不需外接负电压,但其背光为CCFL 背光,需另外供电,一般要4~5V 。
对于触摸屏模块OCMJ15X20D 其直接参与人机交互的结构为电阻式触摸面板。电阻式触摸面板是由两层极薄的电阻面板组成,如图12所示,两层面板之间有一个很小的间距,当有外力在面板上的某一点压下去时,会在施力点造成两层电阻接触,也就是短路(Short),而两层电阻面板的端点都各有电极,如图13所示YU, YD, XL, XR因此配合一些开关就可侦测出面板上哪一相对位置被Touch 。
图12 电阻式触摸面板结构
图13 触摸面板与侦测开关
某一点压下去时,由于点取得电压接到ADC(Analog to Digital Converter),就可以得到被Touch 点的X 坐标相对位置。
图14 读取X 坐标
在图14 中,因为开关SW2 与SW3 是OFF ,因此YD 点是Floating ,所以当有外力在面板上的某一点压下去时,YU 上的电压事实上就是X 的Panel(也就是电阻) 上的分压结果,压在面板上的不同一点,就会得到不同的分压结果,如图15所示。
图15 Resistor-X的分压
在面板上的某一点压下去时,由XL 点取得电压接到ADC(Analog to Digital Converter) ,就可以得到被Touch 点的Y 坐标相对位置。一般说来许多触摸面板都是贴在LCD 面板上面,因此在程序设计上如果重复图14与16的读取步骤就可以顺利得知被touTouch 的点是在屏幕上的哪一位置。
图16 读取Y 坐标
图17 Resistor-Y的分压
在图16 中,因为开关SW0 与SW1 是OFF ,因此XR 点是Floating ,所以当有外力在面板上的某一点压下去时,XL 上的电压事实上就是Y 的Panel(也就是电阻) 上的分压果,压在面板上的不同一点,就会得到不同的分压值,如图17所示。
3.LCD 触摸屏软件设计
3.1 界面的定制与显示
界面的定制是通过建立网络链表的方式实现的。构建好链表网络后就进进应用程序阶段,即系统进进正常运行状态。通过系统中设定当前屏指针、当前项指针及已构建的链表网络等来实现人机交互界面的操纵。
同一屏幕的项构成双向循环链表、链接屏幕构成单向循环链表。实现方法:先以屏为单位建立每屏的横向双向循环链表;再遍历各屏的双向链表,为各屏的项建立链接关系,进而构成一个链表网络。通过遍历当前屏幕的横向双向循环链表来逐一显示屏幕的项。其巾对各类项的处理如下:①当屏幕项是文本时,直接读取并显示。②当屏幕项为整型、浮点时.通过向控制系统索取其值并显示。③当屏幕项为枚举时,通过向控制系统索取其值,再按值读取对应的字符串并显示。
3.2 触摸屏信息的处理
触摸屏按键分为数字键、换屏键、确认键和选择键。数字键用于键进所按的数字。换屏键用于切换屏幕内容,进进所选中项的链接屏幕,若当前屏幕没有选中项,则进进首项链接的屏幕。选择键主要是使下拉菜单的内容显示到屏幕上来。确认键是用于选择下拉菜单内容。
3.3 主函数初始化
该软件系统主函数采用的是等待触摸键值的死循环结构。
4 分析驱动
触摸屏驱动在/kernel/drivers/char/s3c2410-ts.c 文件中。
4.1 触摸屏设备驱动中数据结构
(1)触摸屏的file_operations
static struct file_operations s3c2410_fops={
owner: THIS_MODULE,
open: s3c2410_ts_open,
read: s3c2410_ts_read,
release: s3c2410_ts_release,
#ifdef USE_ASYNC
fasync: s3c2410_ts_fasync,//异步通知
#endif
poll: s3c2410_ts_poll,//轮询
};
(2)触摸屏设备结构体的成员与按键设备结构体的成员类似,也包含一个缓冲区,同时包括自旋锁、等待队列和fasync_struct指针。
typedef struct {
unsigned int penStatus; /* PEN_UP, PEN_DOWN, PEN_SAMPLE */
TS_RET buf[MAX_TS_BUF]; /* protect against overrun(环形缓冲区) */
unsigned int head, tail;/* head and tail for queued events (环形缓冲区的头尾)*/ wait_queue_head_t wq; //* 等待队列数据结构
spinlock_t lock; //* 自旋锁
#ifdef USE_ASYNC
struct fasync_struct *aq;
#endif
#ifdef CONFIG_PM
struct pm_dev *pm_dev; //友善之臂专有的,我后面的代码删除了这段
#endif
} TS_DEV;
(3)触摸屏结构体中包含的TS_RET值的类型定义,包含X 、Y 坐标和状态(PEN_DOWN、PEN_UP)等信息,这个信息会在用户读取触摸信息时复制到用户空间。
typedef struct {
unsigned short pressure; //* 压力,这里可定义为笔按下,笔抬起,笔拖曳
unsigned short x; //* 横坐标的采样值
unsigned short y; //* 纵坐标的采样值
unsigned short pad; //* 填充位
} TS_RET;
(4)在触摸屏设备驱动中,将实现open()、release()、read()、fasync()和poll()函数,因此,其文件操作结构体定义。
触摸屏驱动文件操作结构体:static struct file_operations s3c2410_fops={}
4.2 触摸屏驱动模块加载和卸载函数
(1)在触摸屏设备驱动的模块加载函数中,要完成申请设备号、添加cdev 、申请中断、设置触摸屏控制引脚(YPON 、YMON 、XPON 、XMON )等多项工作。
触摸屏设备驱动的模块加载函数
static int __init s3c2410_ts_init(void)
触摸屏设备驱动模块卸载函数
static void __exit s3c2410_ts_exit(void)
(2)可知触摸屏驱动中会产生两类中断,一类是触点中断(INT-TC ),一类是X/Y位置转换中断(INT-ADC )。在前一类中断发生后,若之前处于PEN_UP状态,则应该启动X/Y位置转换。另外,将抬起中断也放在INT-TC 处理程序中,它会调用tsEvent()完成等待队列和信号的释放。
触摸屏设备驱动的触点/抬起中断处理程序
static void s3c2410_isr_tc(int irq, void *dev_id, struct pt_regs *reg)
当X/Y位置转换中断发生后,应读取X 、Y 的坐标值,填入缓冲区
触摸屏设备驱动X/Y位置转换中断处理程序
static void s3c2410_isr_adc(int irq, void *dev_id, struct pt_regs *reg)
触摸屏设备驱动中获得X 、Y 坐标
static inline void s3c2410_get_XY(void)
(3)tsEvent 最终为tsEvent_raw(),这个函数很关键,当处于PEN_DOWN状态时调用该函数,它会完成缓冲区的填充、等待队列的唤醒以及异步通知信号的释放;否则(处于PEN_UP状态),将缓冲区头清0,也唤醒等待队列并释放信号。
触摸屏设备驱动的tsEvent_raw()函数
static void tsEvent_raw(void)
(4)在包含了对拖动轨迹支持的情况下,定时器会被启用,周期为10ms ,在每次定时器处理函数被引发时,调用start_ts_adc()开始X/Y位置转换过程。
触摸屏设备驱动的定时器处理函数
static void ts_timer_handler(unsigned long data)
(5)在触摸屏设备驱动的打开函数中,应初始化缓冲区、penStatus 和定期器、等待队列及tsEvent 时间处理函数指针。
触摸屏设备驱动的打开函数
static int s3c2410_ts_open(struct inode *inode, struct file *filp)
(6)触摸屏设备驱动的释放函数非常简单,删除为用于拖动轨迹所使用的定时器即可。 触摸屏设备驱动的释放函数
static int s3c2410_ts_release(struct inode *inode, struct file *filp)
4.3 触摸屏设备驱动的读函数
触摸屏设备驱动的读函数实现缓冲区中信息向用户空间的复制,当缓冲区有内容时,直接复制;否则,如果用户阻塞访问触摸屏,则进程在等待队列上睡眠,否则,立即返回-EAGAIN 。
触摸屏设备驱动的读函数
static ssize_t s3c2410_ts_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)
4.4 触摸屏设备驱动的轮询与异步通知
在触摸屏设备驱动中,通过s3c2410_ts_poll()函数实现了轮询接口,这个函数的实现非常简单。它将等待队列添加到poll_table,当缓冲区有数据时,返回资源可读取标志,否则返回0。
触摸屏设备驱动的poll()函数
static unsigned int s3c2410_ts_poll(struct file *filp, struct poll_table_struct *wait)
而为了实现触摸屏设备驱动对应用程序的异步通知,设备驱动中要实现s3c2410_ts_fasync()函数。
触摸屏设备驱动的fasync()函数
static int s3c2410_ts_fasync(int fd, struct file *filp, int mode)
5. 结论
本设计充分利用OCMJ15x20D 以及S3C44BOX 内置资源FM7843,设计了ARM 处理器控制LCD 触摸屏的软硬件系统,该系统具有可定制特性。它不仅仅能够方便用户的对机床等其它设备的操纵,而且也使得开发职员对界面的修改即对产品的升级变得简单、快捷。本设计只是人机交互技术运用之一,同样其设计理念及相关理论同样也可以应用其它嵌入式开发系统中。
参考文献
[1] 程昌南,方强等.《ARM Linux 入门与实践 》[M].北京:北京航空航天大学出版社,2008.10
[2] 张晓林等.《嵌入式系统设计与实践》[M].北京:北京航空航天大学出版社,2006.1
[3] 李俊等.《嵌入式Linux 设备驱动开发详解》[M].北京:北京人民邮电出版社,2008.3
[4] 黄智伟,邓月明,王彦.《ARM9嵌入式系统设计基础教程》[M].北京:北京航空航天大学出版社,2008.8
[5] 吕骏. 《嵌入式系统设计》[M]. 北京: 电子工业出版社, 2002
[6] 王田苗,魏洪兴. 《嵌入式系统设计实例与开发》[M].北京:清华大学出版社, 2008
[7] 于明《ARM 嵌入式系统设计与开发教程》[M].北京:电子工业出版社,2006
[8] 田泽. 《ARM 嵌入式Linux 开发实验与实践》[M].北京:北京航空航天大学出版社,2006 [ 9] 周立功. 《ARM&WinCE实验与实践—基于S3C2410》[M]. 北京:北京航空航天大学出版社,2007
[10] 魏洪兴. 《嵌入式系统设计师教程》[M]. 北京:清华大学出版社, 2006