您当前的位置:五五电子网电子知识电器控制触摸技术μClinux的触摸屏软硬件设计与关键技术分析 正文
μClinux的触摸屏软硬件设计与关键技术分析

μClinux的触摸屏软硬件设计与关键技术分析

点击数:7274 次   录入时间:03-04 11:41:32   整理:http://www.55dianzi.com   触摸技术

1.1背景介绍 

    随着信息技术的发展,嵌入式系统越来越广泛地应用到航空航天、通讯设备、工业控制等领域。由于尺寸的限制,触摸屏代替键盘和鼠标成为嵌入式系统首选的输入工具。同时嵌入式系统也逐渐摒弃了传统的循环控制模式,而是引入操作系统完成进程间切换和任务调度。μClinux就是一种优秀的开放源代码的嵌入式操作系统。它经过各方面的小型化改造,形成了一个高度优化的、代码紧凑的嵌入式Linux,虽然它的体积很小,μClinux仍然保留了Linux的大多数优点:稳定良好的移植性、优秀的网络功能、完备的对各种文件系统的支持以及标准丰富的API。比较起其它几种应用较多的嵌入式操作系统,像vxworks、winCE等,它较为低廉的价格以及方便的用户程序开发,无疑是其巨大的优势。用户可以方便地从互联网上找到最新内核版本、编译器以及其它必需的软件环境,这也促使众多爱好者加盟。 

    1.2研究现状 

    由于触摸屏使用得越来越广泛,所以相应的研究与工程实践比较多。在现有的工作中,已有很多工程师对触摸屏控制器ADS7846与StrongARM平台的硬件连接以及在WinCE操作系统中软件驱动程序开发进行了研究,并对改进触摸屏控制器硬件精度上做了一定探索。而本文的主要贡献在于详细描述了在μClinux这一嵌入式操作系统中触摸屏驱动程序硬件及软件设计。实践证明,这一设计具有比较高的精度、稳定性和开放性,而且跨平台性也较好,因此必将给嵌入式设备提供更多选择。 

    2 硬件设计 

    本设计中硬件平台微处理器选用Motorola公司的MC68VZ328,它是一款M68k体系的32位低功耗微处理器,采用SoC技术设计,具有典型的嵌入式微处理器的特征;触摸屏选用TI(原为Burr-Brown公司的产品,由于该公司已被TI公司收购,所以下文均用TI公司)公司的ADS7843。在本设计中,CPU与触摸屏以主从方式工作,触摸屏工作于从设备(slave)状态。本设计中硬件电路不同于传统设计,而是充分利用了ADS7843中的BUSY信号线,如图1所示。 

    ADS7843是一款四线电阻式触摸屏控制芯片,它主要完成两件事情:其一,是完成电极电压的切换;其二,是采集接触点处的电压值。它由两层透明的阻性导体层组成,在导体层中间充满了用粘性绝缘液体材料做成的隔离层和由导电性能极好的材料构成的电极。 

    触摸屏工作时,上下导体层相当于电阻网络,如图2所示。当某一层电极加上电压时,会在该网络上形成电压梯度。若有外力使得上下两层在某一点接触,则在电极未加电压的另一层可以测得接触点处的电压,从而知道接触点处的坐标。比如,若在顶层的电极(X+、X-)上加上电压,则在顶层导体层上形成电压梯度;当有外力使得上下两层在某一点接触,在底层就可以测得接触点处的电压,再根据该电压与电极(X+)之间的距离关系,知道该处的X坐标。然后,将电压切换到底层电极(Y+、Y-)上,并在顶层测量接触点处的电压,从而知道Y坐标。对电压在横向和纵向导体层之间的切换以及A/D转换,需要先通过串行外设接口(SPI)往ADS7843发送控制字,转换完成后再通过SPI读出电压转换值。 

    3 软件设计 

    3.1μClinux下驱动程序的特点 

    μClinux继承了Linux的设备管理方法,将所有的设备看做具体的文件,通过文件系统层对设备进行访问。所以在Clinux的框架结构中,和设备相关的处理可以分为两个层次——文件系统层和设备驱动层。设备驱动层屏蔽具体设备的细节,文件系统层则向用户提供一组统一的规范的用户接口。这种设备管理方法可以很好地做到“与设备无关性”,使Clinux可以根据硬件外设的发展进行方便的扩展,比如要实现一个设备驱动程序,只要根据具体的硬件特性向文件系统提供一组访问接口即可。 

    μClinux中的设备可以分为3类:字符设备、块设备和网络设备。其中字符设备没有缓冲区,数据的处理是以字节为单位按顺序进行的,它不支持随机读写,触摸屏即属于字符设备的一种。 

    驱动程序在内核中装载的方式有两种:一种是直接编译进内核,在系统初始化的时候就对设备进行注册;一种是模块化加载的方法,将驱动程序编译成目标文件(*.o),需要添加设备时,使用insmod命令向系统注册,停止使用时,用rmmod命令卸载。对于触摸屏这种基本的输入工具,建议采取直接编译进内核的方式,这样系统一启动就可以使用了。 

    向内核注册一个字符设备的函数为:externintregister_chrdev(unsignedintmajor,constchar*name, structfile_operations*fops);内核用主设备号和次设备号惟一地标识一个设备。参数major对应所请求的主设备号,name对应设备的名字,fops是一个指向file_operations结构的指针,它是Clinux下编写驱动程序用到的一个关键的数据结构,它提供了应用空间与驱动程序的调用接口。这个数据结构的每一项都指向驱动程序完成的一个功能。 

    在2.4版本内核中对该结构采取标记结构初始化语法(TaggedStructureInitializationSyntax),与2.0内核比较,这种语法可移植性更好,程序的可读性和代码的紧凑性都比较好。以触摸屏为例: 

    static struct file_operations ts_fops={ 
           owner:THIS_MODULE, 
           read:ts_read,  //读数据操作 
           poll:ts_poll,  //非阻塞操作 
           ioctl:ts_ioctl,  //I/O控制操作 
           open:ts_open,  //打开设备 
           release:ts_release,  //释放设备 
           fasync:ts_fasync,  //异步触发} 

    完整的结构还包括llseek、readdir等函数指针,只是由于在本程序中没有用到,所以省略不写,内核把它们默认为空(NULL)。 

    3.2触摸屏驱动程序的流程及关键函数

    在本设计中,我们使用μClinux2.4内核。驱动程序主要设计思想是:驱动程序在初始化结束后,进入空闲状态,等待中断的到来。一旦笔中断(pen_irq)发生,则进入中断处理程序,进行数据采样、转换和传输,同时,程序对各种不同的情况进行鉴别和异常处理。 

    触摸屏软件流程如图3所示。在驱动程序中设定了触摸屏所处的7个不同状态,分别用从-1到5的数字表征,这7个状态构成了一个触摸屏状态机,系统根据当前状态做出下一步的处理,如表1所示。整个软件设计根据功能可以划分为5个部分,分别是初始化、设备打开、读操作、中断处理以及I/O控制,下面具体介绍每一部分。 

    3.2.1驱动程序初始化 

    在mc68328digi_init()中向内核注册设备驱动函数:err=misc_register(&mc68328_digi),在init_ts_settings()中设定触摸屏的当前参数:内核版本号、笔移动判别阈值、采样时间、消除抖动开关、消除抖动时间等参数,这些均由用户根据自己的液晶屏以及精度要求来定制,也可以在应用程序中用I/O控制函数ioctl()来设定,本文将在参数分析中具体分析这些参数的意义。 

    3.2.2打开设备 

    在ts_open()函数中,驱动程序向内核注册中断。中断也可以在系统初始化的时候向内核注册,但是一般不建议这样做,因为在加载的设备比较多时,这样做有可能造成中断的冲突。打开一个设备,才让该设备占用中断,是一个较好的策略。向内核注册中断处理程序主要实现两个功能,一是注册中断号,二是注册中断处理函数。 

[1] [2]  下一页


本文关键字:暂无联系方式触摸技术电器控制 - 触摸技术