首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于μClinux的触摸屏设计与关键技术分析 02

基于μClinux的触摸屏设计与关键技术分析 02

制字,转换完成后再通过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()来设定,本文将在参数分析中具体分析这些参数的意义。
返回列表