产品推荐:水表|流量计|压力变送器|热电偶|液位计|冷热冲击试验箱|水质分析|光谱仪|试验机|试验箱


仪表网>技术中心>使用指南>正文

欢迎联系我

有什么可以帮您? 在线咨询

基于嵌入式触摸屏驱动程序的研究与开发

   2012年03月21日 15:43  
  引言
  
  WindowsCE.NET是一个抢先式多任务并具有强大通信能力的Windows32位嵌入式操作系统,是微软专门为信息设备、移动应用、消费类电子产品、嵌入式应用等非PC领域而从头设计的战略性操作系统产品。可以看出WindowsCE并不是Windows桌面操作系统的一部分或缩减版本。CE系统与其它操作系统一样,也提供了设备驱动程序,以驱动内部或者外围硬件设备。驱动程序将操作系统和设备链接起来,使得操作系统能够识别设备,并为应用程序提供相应的服务。要想真正了解驱动程序必须结合一些驱动程序的实际开发,本文以基于ARM9核心硬件平台的触摸屏驱动程序为例,讲解如何在不同的硬件设备上实现WindowsCE的驱动开发。
  
  1、WindowsCE的体系结构
  
  WindowsCE是由许多离散模块组成的,每一模块都提供特定的功能。这些模块中的一部分被划分成组件。组件使WindowsCE变得非常紧凑,只占不到200KB的RAM,因此只占用了运行设备所需的zui小的ROM、RAM以及其它的硬件资源。
  
  图1WindowsCE的体系结构
  
  WindowsCE包含提供操作系统zui关键功能的4个模块:内核模块;对象存储模块;图形、窗口和事件子系统(GWES)模块以及通信模块。WindowsCE还包含一些附加的可选择模块,这些模块可支持的任务有管理流设备驱动程序、支持COM等。
  
  内核是OS的核心,通过CoreDll模块表示。它提供在所有设备中都出现的基本操作系统功能。内核负责内存管理、进程管理、以及特定文件管理等功能。它还管理虚拟内存、调度、多重任务处理以及例外处理等。
  
  对象存储可将用户数据和应用程序数据存入文件或注册器。在操作系统构造进程的过程中,对于这些不同的对象存储组件,可以选取,也可以忽略。
  
  GWES是用户、应用程序和OS之间的图形用户接口。GWES通过处理键盘、笔针动作来接受用户输入,并选择传送到应用程序和OS的信息。GWES通过创建并管理在显示设备和打印机上显示的窗口、图形以及文本来处理输出。
  
  通信组件提供对下列通信硬件和数据协议的支持:串行I/O支持,远程访问服务(RAS),传输控制协议/Internet协议(TCP/IP),局域网(LAN),技术API,WindowsCE的无线服务。WindowsCE的整体架构如图1。
  
  2、设备驱动的中断处理
  
  中断是硬件与软件打交道的重要方法,所以大多数驱动程序都涉及到中断处理。要想了解驱动的开发过程,必须先了解WindowsCE中断机制。在CE的中断处理中,一部分工作是由CEKernel完成的,一部分是由OEM完成的,WindowsCE的中断服务例程是由OAL(对象抽象层)实现的。硬件中断被发送到内核的异常处理器,内核的中断支持处理器调用OAL函数OEMInterruptDisable来屏蔽此硬件的特定中断,然后内核调用ISR来进行物理中断,以中断标志符的形式返回逻辑中断给系统的任务调度程序。系统得到该中断号后,就会找到该中断号对应的事件,并唤醒等待相应事件的线程(IST),然后IST就可以在用户模式下进行中断处理。处理完成后,IST需要调用InterruptDone来通知操作系统中断处理结束,操作系统再次调用OAL中的OEMInterruptDone函数来完成zui后的中断处理。其中断的详细处理过程如图2所示。
  
  图2中断处理过程
  
  3、WinCE下驱动程序模型
  
  要编写驱动程序还要确定它是属于哪种驱动。WindowsCE驱动程序分本机设备驱动和流设备驱动。本机设备驱动程序是被静态地链接到GWES,它们不作为一个单独的DLL存在。有一些类型的设备,如键盘、显示器和PC卡插槽等对操作系统都有一定的接口,是专门用于WindowsCE.NET的,所以它们都属本机设备驱动。若是按照结构分,又可分为分层的驱动程序和不分层的驱动程序。分层的驱动程序由两个设置好的层组成:上层是模型设备驱动程序(MDD),下层是依赖平台的驱动程序(PDD)。流接口驱动程序是以动态链接库形式存在的,由设备管理器统一加载、管理和卸载。其驱动模型见图3。本文采用分层的驱动程序来完成基于S3C2410的触摸屏驱动。
  
  图3WinCE下驱动程序模型
  
  4、WindowsCE下触摸屏驱动程序的实现
  
  4.1配置硬件
  
  对于分层的驱动程序只需要编写对应于特定硬件平台的PDD层代码。首先是配置控制器硬件,这是完成驱动程序的*件事,即对触摸屏进行硬件初始化。也就是通过向映射到存储器的寄存器中写入数据将触摸屏控制器设置成某个确定的状态。配置硬件之前,我们需要事先决定是否采用中断驱动,这里我们采用中断驱动方式。要说明的是,并不是采用中断永远是的设计方式。配置硬件这一过程是由TouchPanalPowerOn()函数完成的。下面是部分实现代码:
  
  TouchPanelPowerOn()
  
  {
  
  ......
  
  //SetupGPIOsfortouch为触摸屏设置输入/输出口
  
  v_pIOPregs->rGPGCON&=~((0x03<<30)|(0x03<<28)|(0x03<<26)|(0x03<<24));
  
  //SetGPG15touseasnYPON,GPG14touseasYMON,GPG13touseasnXPON,GPG12touseasXMON配置PORTG的管脚
  
  ......
  
  //SetupADCregister
  
  //DownInt,YMON:0,nYPON:1,XMON:0;nXPON:1,Pullup:1,AutoConv.,Waiting.
  
  v_pADCregs->rADCTSC=(0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);
  
  ......
  
  }
  
  4.2设置中断判断被触摸情况
  
  对触摸屏基本的硬件进行正确设置完成后,接下来就要采用一种可靠的方法来判断屏幕是否被触摸了。在其驱动中采用了两个逻辑中断:
  
  1.SYSINTR_TOUCH,用于触摸笔点击触摸屏时产生相应的中断;
  
  2.SYSINTR_TOUCH_CHANGE,用于触摸笔离开时产生相应的中断。
  
  该过程有几个判断要点:检查屏幕是否被触摸;采集每个轴上的多个原始数据用于以后的过滤;检查屏幕是否仍在被触摸。
  
  4.3读取数据并去抖
  
  当屏幕被触摸时,我们首先读取X轴和Y轴的原始数据并进行去抖处理,然后判断得到的数据是否稳定,如果不稳定,继续读取数据并去抖,直到得到稳定的数据为止。读取触摸点的坐标是由DdsiTouchPanalGetPoint()函数实现的。部分实现代码如下:
  
  DdsiTouchPanelGetPoint(TOUCH_PANEL_SAMPLE_FLAGS*pTipStateFlags,INT*pUncalX,INT*pUncalY)//取得样本点信息
  
  {
  
  ......
  
  if(status==TOUCH_PEN_UP){......}//设置中断
  
  elseif(status==TOUCH_PEN_DOWN){......}//设置中断
  
  ......
  
  }
  
  4.4触摸屏校准
  
  完成前面繁琐的工作后,驱动程序的各种功能就都已经准备就绪了,现在就可以实际触摸屏幕了。电阻触摸屏在操作前需要校准。这需要一些参考值,以便我们能够将接收到的原始模数转换值转换成高层软件所需的屏幕像素坐标。一般情况下我们只需要测得两组原始数据(X和Y),即在屏幕对角处读取的zui小值和zui大值,由于许多电阻触摸屏存在着显著的非线性,所以如果在zui大值和zui小值之间简单的插入几个位置数值会导致驱动程序非常不。通常触摸驱动程序在一启动时就运行校准程序,但要记住一定要把这些参考值保存起来,以免我们在以后的加电启动期间再做校准。校正后的坐标必须保证报告到zui近的1/4像素。下面是校正算法代码:
  
  TouchPanelEnable(...);//启动面板
  
  TouchPanelGetDeviceCaps(...);//询问校正点数
  
  for(i=0;i<#points;i++)
  
  {
  
  TouchPanelGetDeviceCaps(...);//取校正坐标
  
  TouchPanelReadCalibrationPoint(...);//取校正数据
  
  }
  
  TouchPanelSetCalibration(...);//计算校正系数
  
  做出准确判断的*途径就是进行大量反复的测试。经过大量试验表明,选取的校准点越多,内插窗口的间距越小,所得到的校准精度就越高。校准完成之后,便可以开始正常的操作了,并开始向更高层的软件发送触摸事件。zui后一步,我们利用PlatformBuilder把编制好的驱动程序加载到WinCE内核中,然后烧录到目标设备。启动后我们就会得到一个友好的触摸屏界面,就能检验该驱动程序是否成功了。
  
  5、结束语
  
  设计WindowsCE驱动程序时,首先要选好驱动程序的类型。本文选取的是分层的本机设备驱动,开发的效率比较高,其它的驱动程序可以根据实际情况选择合适的驱动模型。此外,WindowsCE的驱动程序可以针对不同的硬件平台进行移植,只要掌握了上述核心思想就能成功实现移植。

免责声明

  • 凡本网注明“来源:仪表网”的所有作品,均为浙江兴旺宝明通网络有限公司-仪表网合法拥有版权或有权使用的作品,未经本网授权不得转载、摘编或利用其它方式使用上述作品。已经本网授权使用作品的,应在授权范围内使用,并注明“来源:仪表网”。违反上述声明者,本网将追究其相关法律责任。
  • 本网转载并注明自其它来源(非仪表网)的作品,目的在于传递更多信息,并不代表本网赞同其观点或和对其真实性负责,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品第一来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
联系我们

客服热线: 15267989561

加盟热线: 15267989561

媒体合作: 0571-87759945

投诉热线: 0571-87759942

关注我们
  • 下载仪表站APP

  • Ybzhan手机版

  • Ybzhan公众号

  • Ybzhan小程序

企业未开通此功能
详询客服 : 0571-87759942