嵌入式Linux触摸屏驱动开发_第1页
嵌入式Linux触摸屏驱动开发_第2页
嵌入式Linux触摸屏驱动开发_第3页
嵌入式Linux触摸屏驱动开发_第4页
嵌入式Linux触摸屏驱动开发_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、本栏目责任编辑:谢媛媛开发研究与设计技术 电脑知识与技术1引言触摸屏在嵌入式设备中的应用正在迅速普及开来,特别是新一代的智能手机(SmartPhone、个人多媒体娱乐设备(如iPod等手持设备都将提供人机交互的手写识别触摸屏功能。触摸屏正在随处可见,工业控制系统、消费电子产品,甚至医疗设备上很多都装备了触摸屏输入装置。2触摸屏工作原理2.1触摸屏坐标检测触摸屏在嵌入式系统中的应用需要高度集成的芯片以节省费用、减少能耗和空间。现在很多音频编解码芯片都集成了触摸屏控制功能(如Wolfson 的WM9712,也可以用单独的模数转换芯片实现触摸屏控制功能(如本文讲述的AD7887。最常见的触摸屏是电阻

2、式触摸屏,触摸屏是在一个显示屏上覆盖一个触感设备,或者触摸板。便携式应用中最常见的型号是电阻式四线触摸板,有两块透明的电阻层组成,分别是X 板和Y 板。如下图1所示。图1触摸屏原理图X 板的左端和右端有电接触,而Y 板的顶部和底部有电接触。当一个指点设备,例如一只笔或手指,接触触摸屏上的任何一点时,这一点就会在X 板和Y 板之间形成电接触。如上图所示。为了决定X 的坐标,一个电压被加到X 板上,电阻Rx+(从X 板的正电压边到接触点和Rx-(从接触点到负边形成一个电势差,接触点的电势和X 轴坐标是成比例的。此时,没有电流流经Y 板,可以在Y 板的任何一端测量接触点的电势。通常,Y 的两端被连在

3、一起然后连接到ADC 的输入端。获得Y 轴坐标的方法与X 轴坐标类似,只需要把X 板和Y 板交换即可。2.2触摸屏压力检测检测触摸屏的压力是非常有用的,可以实现一些功能,例如:用笔画线时,用的力越大,画的线就越粗。触摸屏压力检测是间接检测的,通过检测顶端和底端之间的电阻Rc 。随着压力和接触面积的增加,电阻Rc 会减小。然而,压力检测在许多便携式系统中不是首选项,是可选项,因为它消耗能量较多,而且需要很多计算。有一种方法,将顶端连到电源端,底端连接到地,通过检测流经触摸板的电流可知电阻Rc 的大小。如下图2所示。这种方法本质上是不精确的,因为它不是检测的电阻Rc ,而是Rc +R +R ,R

4、是X 板正端(X+和接触点顶端之间的电阻,R 是接触点底端到Y 板负端(Y-端之间的电阻。如果笔接触点的坐标和板电阻已知,Rc 可以估算出来,但是这需要计算能力和额外的检测板的电阻。这种方法的另一个缺点是当笔点到触摸屏的一个角落时,一个很大的电流可能流过,不必要的消耗大量的电量并引起散热难题。图2触摸屏压力检测3触摸屏控制电路触摸屏控制电路可以采用独立的模数转换芯片,本文采用的方案是StrongARM 芯片外接美国模拟器件公司的AD7887。AD7887是一个高速、低能耗、12位的模数转换芯片,直接输出二进制编码,转换速度可达2.5MHz 。AD7887支持两个通道,可以通过片上控制寄存器配置

5、为双通道或者单通道操作,触摸屏的坐标数据分为X 坐标和Y 坐标,因此需要把AD7887配置为双通道工作模式。双通道操作模式下,管脚V/AIN1是AIN1功能,提供第二个模拟输入通道。这种情况下,参考电压通过管脚V 提供,AIN0和AIN1模拟输入电压范围都是0到V 。AD7887主要功能管脚的介绍:收稿日期:2007-04-25基金项目:校级重点课程(4053010作者简介:郭小梅(1953-,女,江苏南京,副教授;高峰(1978-,男,河南,硕士,工程师。嵌入式Linux 触摸屏驱动开发郭小梅1,高峰2(1.南京晓庄学院计算机系,江苏南京210038;2.无锡矽太恒科电子有限公司,江苏无锡2

6、14000摘要:根据触摸屏坐标检测原理和压力检测方法,以AD7887芯片为例讲述了触摸屏控制电路的控制原理和方法;以Intel Stron-gAR M 嵌入式系统为平台,介绍Linux 下触摸屏驱动程序的开发方法。系统通过AD 转换芯片采样触摸屏数据,做模数转换后通过CPU 的串口送给系统.触摸屏驱动程序包括AD7887和SA1110相关控制寄存器的硬件初始化,驱动程序的流程和构架,引入内核定时器的重要意义,以及坐标数据的处理。关键词:触摸屏;Linux ;设备驱动程序;SA1110,AD7887中图分类号:TP316文献标识码:A 文章编号:1009-3044(200709-20766-03

7、Touch Screen Driver Development for Embedded LinuxGUO Xiaomei 1,GAO Feng 2(1.Nanjing Xiaozhuang Institute Department of Computer,Nanjing 210038,China;2.Wuxi SITEK HengKe Electronics CO.LTD,214000,ChinaAbstract:This paper introduces that touch screen how to work,how to check pressure and coordinates

8、with an AD IC chip:AD7887.The paper also introduces how to develop a touch screen driver for embedded Linux based on Intel StrongAR M1110platform.The touch screen da-ta are sampled through AD7887,then be converted from Analog to Digital and transferred to CPU through serial port.The points include i

9、ni-tializing touch screen hardware by setting registers,how to process coordinates data and the importance of using Linux kernel timer.Key words:Touch Screen;Linux;DeviceDriver;SA1110;AD7887766本栏目责任编辑:谢媛媛开发研究与设计技术*AIN1/V:模拟输入端1/参考电压输入端。双通道模式下,这个管脚作为AIN1。*AIN0:模拟输入0端。双通道模式下,模拟输入电压范围:0到V 。*DIN :数据输入端。

10、写给AD7887控制寄存器的数据通过这个管脚输入,在SCLK 时钟信号的上升沿写到寄存器中。*DOUT :数据输出端。AD7887的转换结果以串行数据流的格式从DOUT 端输出。在SCLK 时钟信号的下降沿触发。数据流以四个0开头,后面是12位的数据,最大字节优先(MSB 。*SCLK :串行时钟信号。从AD7887读数据,或者写串行数据给AD7887寄存器时都需要这个时钟。也作为AD7887模数转换过程的时钟源。AD7887的控制寄存器是一个8位的只写寄存器。在SCLK 的上升沿,数据从AD7887的DIN 管脚载入。MSB 表示数据流中的第一位,寄存器的内容加电初始化时都为0。下图3是寄存

11、器各位的功能。 图3AD7887寄存器功能*DONTC :Don't Care 。这一位的值没有意义,是0或1都没有关系。*ZERO :这一位赋值零才能保证AD7887的正确操作。*REF :参考位。0表示片上参考电压使能。1表示片上参考电压禁止。*SIN/DUAL :0表示单通道模式,1表示双通道模式。*CH :通道选择位。双通道模式时,这一位决定哪一个通道将作下一个模数转换。0表示选择AIN0,1表示选择AIN1。 单通道模式下,这一位总为0。*ZERO :为确保AD7887的正确操作,这一位必须为0。*PM1,PM0:电源管理位。表示AD7887的操作模式。大多数情况下,PM1和

12、PM0都为0,AD7887工作在电源管理的0模式,也就是正常工作模式。开发板的CPU 是Intel 的嵌入式处理器StrongARM1110,AD7887连接到SA1110的串口4,串口4工作在SSP (Synchronous Serial Port :同步串口模式,SA1110的LDD3-LDD0四个管脚设置为GPIO 功能。SA1110和AD7887以及触摸屏的管脚连接为:AD7887和触摸屏SA1110AD7887和触摸屏SA1110CS#<-SFRM_C DOUT ->RXD_C DIN <-TXD_C SCLK <-SCLK_C Pen Down INT -&

13、gt;GPIO23Y+<-LDD0Y-<-LDD1X+<-LDD2X-<-LDD3LDD3LDD2LDD1LDD00101禁止触摸屏检测电路(电源关闭1101使能触摸屏检测电路(电源开,等待笔的中断1001获取X 轴坐标0110获取Y 轴坐标SA1110的通用输入输出端口GPIO23必须设置为中断模式、输入、下降沿、以接收笔的中断。获取触摸屏信号的控制顺序为:(1通过设置LDD3-LDD0为1101,使能触摸屏检测电路;(2如果GPIO23收到下降沿触发的中断,先获取X 轴坐标,具体先设置LDD3-LDD0为1001,延迟20微秒后,通过SA1110的串口下命令转换AD

14、7887的AIN0值;(3然后再设置LDD3-LDD0为0110,延迟20微秒后,通过SA1110串口下命令转换AD7887的AIN1值,这是Y 轴的坐标。4触摸屏驱动程序设计触摸屏作为字符设备向Linux 内核注册,以设备文件的形式进行读写操作。这里分几个功能模块介绍触摸屏驱动程序,主要有:硬件初始化模块、定时器模块、坐标数据处理模块等。4.1init 和exit 函数触摸屏驱动可以编译进Linux 内核或者单独编译为一个模块,需要定义设备驱动的init 函数:int _init ad7887_init(void;init 函数主要完成的功能有:(1注册触摸屏设备节点:misc_regist

15、er(&ad7887_ts;(2初始化触摸屏硬件:init_chip(;(3初始化存放触摸屏坐标数据的缓冲区:init_buf(;(4为触摸屏申请中断:request_irq (IRQ_GPIO23,ts_ad7887_interrupt ,SA_INTERRUPT ,“ad7887",dev_id;(5等中断:waiting_touch(;4.2硬件初始化init_chip (硬件初始化主要有以下六个步骤:(1SA1110的LCD 控制寄存器0的bit0置0,禁止LCD 控制器功能,使LDD7-LDD0作为通用I/O 口。语句:LCCR0&=LCCR0_LEN ;(

16、2SA1110串口4的MCP (Multimedia Communication Port 控制寄存器的bit16置0,禁止串口4的MCP 功能,串口4工作在SSP 模式。语句:Ser4MCCR0&=MCCR0_MCE ;(3设置串口4的SSP 控制寄存器SSCR0和SSCR1,寄存器0如下图所示:有DSS ,FRF ,SSE ,SCR 四个字段,DSS 表示SSP 传输和接收的数据位数,设置为1111,表示16位数据;FRF 表示帧格式,设置为00,表示Motorola SPI 帧格式;SSE 表示同步串口使能,设置为1,表示使能SSP 操作,相应管脚作为SSP 功能管脚;SCR 表

17、示串行时钟速率,设置为00000111,十进制是7,SA1110片上晶振产生的时钟频率为3.6864MHz ,串行位时钟的计算公式是:计算结果,位时钟为:230.4KHz 。SSP 控制寄存器SSCR1的各位都采用默认值0,语句为:Ser4SSCR1=0;(4驱动使用4个LCD 管脚LDD3、LDD2、LDD1、LDD0作为通用I/O 端口,控制触摸屏的X-、X+、Y-、Y+四个输出端。设置LCD 端口管脚方向寄存器PPDR ,将四个管脚设置为输出;(5通过PPC 管脚状态寄存器PPSR 设置LDD3:LDD0的输出电平;按前面所述的获取触摸屏信号的控制顺序,首先设置LDD3:LDD0为110

18、1,使能触摸屏检测电路;(6设置SA1110的GPIO23中断方式为下降沿:set_GPI-O_IRQ_edge(GPIO_GPIO23,GPIO_FALLING_EDGE。SA1110的串口、LCD 管脚、中断等初始化完成后,就可以发命令读取坐标数据了。4.3定时器中断触摸屏驱动中要使用内核定时器。定时器用于调度函数(定时器处理程序在未来某个特定时间执行。在定时器注册的时间超时后,就执行一次内核定时器注册的处理函数。系统维护一个定时器双向链接表,这意味着可以加入任意多的定时器。定时器包括它的timeout (超时值(单位是jiffies 和超时时调用的函数。在ad7887_init(函数中,

19、为触摸屏申请中断时,引用了一个中断处理函数ts_ad7887_interrupt(。这个中断处理函数主要完成三项工作,首先禁止GPIO23端口的触摸屏中断;然后设置SA1110767本栏目责任编辑:谢媛媛开发研究与设计技术 电脑知识与技术(上接第763页点编号和本节点逻辑关系都存放在关系数据库了,在推理过程的搜索策略中可以采用堆栈的链表数据结构。具体知识搜索算法描述如下:图5正向推理程序流程图(1根据故障现象,选择故障分类point *P ,P=root 初始化堆栈InitStack(S;(2进入根节点的下层节点P=P 一>RChild ;(根节点在单分支故障树只有一个子节点,默认为右子

20、节点(3IF(当前节点是中间节点IF(P 在栈不存在,即P 一>Flag=false该节点入栈Push(S ,P;P 一>Flag=true ;ELSEIF 该节点知识和询问故障相匹配,转入(4;ELSE根据判断节点的询问内容和已知事实进行对比并作为回答;IF (回答=“是”进入下层左子节点P=P 一>Lchild 转入(3;IF (回答=“否”进入下层右子节点P=P 一>RChild ,转入(3;/end of ifELSE IF(当前节点是叶节点,转入(5;(4该节点出栈,返回该节点编码,系统成功搜索到相匹配的知识,结束。(5该节点提供的为故障处理措施,此时故障树搜

21、索完毕,没有找到相应的匹配知识,查找失败。在搜索的过程中由于采用了单分支故障树模式,使知识的搜索变得非常简单,只需要沿着树的左右分支对知识和事实进行匹配,直到右节点为叶子节点为止。若查找到相匹配的知识,根据返回的故障编码根据推理方式查找规则表得到结论码,从而给出诊断结论。4结束语利用120-1空气制动机故障诊断专家系统,可为设备维护人员对设备分析和诊断提供辅助决策,从而提高设备维修效率和速度。本文在故障树分析法基础上利用二叉树的转换理论建立了单分支故障树的故障模型,在故障诊断知识搜索时只对左右节点进行匹配,从而大大缩小了搜索范围,节省了内存空间,提高了诊断速度。在知识库设计上利用数据库的理论,

22、并结合了故障信息的编码技术完成了各个表结构的设计,在以后可逐步向库中添加知识。参考文献:1王仲生.智能故障诊断与容错控制M.西安:西北工业大学出版社,2005.2王永庆.人工智能原理与方法M.西安:西安交通大学出版社,1998.3夏寅荪,吴培元.120型空气制动机M.北京:中国铁道出版社,1995.4蔡子兴,约翰德尔金,龚涛.高级专家系统:原理设计及应用M.北京:科学出版社,2005.5余金山,林慧.数据库开发实例入门与提高M.北京:电子工业出版社,2006.的GEDR 和GFER 寄存器,将GPIO23端口设置为下降沿检测;最后将定时器插入定时器的全局队列,语句:add_timer(ts_timer;ts_timer 的定义为:static struct timer_list ts_timer =function:ts_timer_proc;ts_timer_proc 就是定时器处理函数,在这个函数中调用函数read_x(和read_y(分别读取X 坐标和Y 坐标。然

温馨提示

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

评论

0/150

提交评论