基于linux的触摸屏驱动程序的设计与实现.pdf

收藏

编号:20181110221924983222    类型:共享资源    大小:217.17KB    格式:PDF    上传时间:2019-02-16
  
2
金币
关 键 词:
的触摸屏驱动程序设计 触摸屏 的设计 Linux 软件驱 基于Linux的 驱动程序的设计 设计与Linux驱动程序 pdf 的设计与实现.pdf 驱动程序 LINUX 驱动程序的 Linux驱动程序设计
资源描述:
2009年第10期 仪表技术 ·43· 基于Linux的触摸屏驱动程序的设计与实现 刘亚尼 (攀技花学院计算机科学与技术系,四川攀枝花617000) 摘要:介绍Linux系统下触摸屏驱动程序开发的一般方法。针对SitSang开发板的触摸屏设备进行驱动程序的设计与开发,所 开发的触摸屏驱动程序在SitSang开发板上调试通过。 关键词:嵌入式;Linux;驱动程序;触摸屏 中图分类号:TP334 文献标识码:B 文章编号:1006—2394(2009 J 10—0043—02 Light-weighted Embedded GUI System and Its Implementation Based on Linux LIU Ya.ni (Department of ComputerScience,Panzhihua College,Panzhihua 617000,China) Abstract:A general developing method of the touch screen in Linux operating system is introduced in this paper. By taking touch screen drivers as the example,the design method of touch screen on Linux is discussed.The touch screen driving procedures are debugged on SitSang development board. Key words:embedded;Linux;driver;touch screen 0 引言 触摸屏是嵌入式系统最基本的用户交互设备之 一,触摸屏按工作原理的不同分为表面声波屏、电容 屏、电阻屏和红外屏几种。触摸屏设备的主要功能是 随时报告用户触摸,并标识触摸的坐标,在每次触摸 时,通过中断实现。通常该设备的驱动程序都是在 Windows系统中运行的,在嵌入式Linux系统中要使这 些设备能够正确运行,就要开发相应的驱动程序。 1 Linux下驱动程序结构及主要的数据结构 Linux的设备驱动程序分为自动配置和初始化子 程序、服务于I/0请求的子程序和中断服务子程序3 部分。其中自动配置和初始化子程序,主要是检测设 备是否正常及对正常设备进行相应的软件初始化工 作,该部分只在驱动程序对设备进行初始化时进行调 用。中断服务子程序又称为驱动程序的下半部分, Linux不通过中断向量表来处理中断事件,而是由 Linux系统直接接收来自硬件的中断,然后再调用中断 服务子程序,因此中断服务子程序的调用是独立于任 何运行进程的状态。服务于I/0请求的子程序,又称 为驱动程序的上半部分,它提供了系统操作和使用硬 件设备的访问接口。Linux系统访问设备就像访问文 收稿日期:2009一06 作者简介:刘亚尼(1981一),女,助教,研究方向为嵌入式系统。 件一样,使用一组通用的入口函数完成。例如打开设 备使用系统调用open(),关闭设备使用系统调用 close;Linux采用这些系统调用来实现对硬件的使用。 如何将这些系统调用与对硬件设备操作的控制函 数相关联,在Linux下通过重要的数据结构file—opera— tions来完成。在实现驱动程序时,要在驱动程序中将 硬件的控制函数注册到该结构相应的调用位置处。该 结构定义在linux/fs.h文件中,随着内核的升级该结 构的内容也会更新。该数据结构的主要内容如下: Struct file_opeations{ int(·lseek)(struct inede It inode,struct file·flip,off_t off,int p0B)1//移 动文件指针,针对随机存取设备 int(·read)(struct inode·inode,struct file·flip。char·buf。int count);I/ 从设备读取数据 int(·write)(struct inade·inode,stnlct file·flip。const char·buf,int count);//向设备写入数据 int(}readdir)(struct inede·inode,struct file It flip,struct dirent·dirent, int count);//读取目录,只对文件系统; int(ioetl)(struct inode·inede,struct file It flip,unsigned int crod,unsigned int arg);//除读写之外的操作 int(·mmap)(void);//将设备内存映射到内存空间 int(·open)(struct inode·inode,struct file·flip);//打开设备 int(·release)(struct inede·inode,struct file·flip);//释放结构体,关闭 设备 int(·fsync)(strUct inode It inode,struet file·flip);I/实现内存与设备的 同步 int(·fasync)(int,structfile,int)1//内存与设备之间的异步通信 万方数据 ·44· 仪表技术 2009年第10期 int(10ck)(strnctfile,iut,strnctfile,lock);//实现文件的锁定,用于共享 时的互斥访问 ssize-t(ready)(struct file,const struet iovec,unsigned long,loft·int);//验 证地址是否可读 ssizet—t(writev)(struct file,const strnct iovec,unsigned long,loft·int);// 验证地址是否可写 } 2 Linux设备中断的处理和驱动程序的加载方式 2.1中断处理 在Linux系统中,对中断的处理是属于系统的核 心部分。内核中断处理相关的重要函数是中断申请 request—irq()和中断释放free—irq()函数,这2个函数 的定义在include/linux/interrupt.h文件中声明。 Int request—irq(unsigned int irq,void(·handler)int irq,void dev—id, struct pt—regs+regs), Unsigned long flags,const char·device。void·dev—id); Void free—ira(unsigned int irq,void·dev—id); 其中,irq表示所要申请的硬件中断号;handler为 向系统登记的中断处理子程序,dev—id为申请时的设 备标识,deivce为设备名,flag是申请时的选项,它决定 中断处理程序的一些特性,其中最重要的是中断处理 程序是快速处理程序还是慢速处理程序。在快速处理 程序运行时,所有中断都被屏蔽,而慢速处理程序运行 时,除了正在处理的中断外,其他中断都没有被屏蔽。 2.2驱动程序的注册与卸载 设备驱动程序所提供的入口点,在设备驱动程序 初始化的时候向系统进行注册,以便系统在适当的时 候调用。在Linux系统中,通过调用register ehrdev向 系统注册字符型设备驱动程序。register—chrdev定义 为: #include #include int register_chrdev(unsigned int major,eonst char name,struct file—op· erations fops); 其中,Name是设备名;major是主设备号,如果为0,则 系统为此驱动程序动态地分配一个主设备号;fops为 各个调用的入口点说明。函数的返回值有.EINVAL和 EBUSY,一EINVAL表示申请主设备号非法,EBUSY表 示所申请的主设备号正在被其他设备驱动程序使用。 申请成功则返回主设备号,相应的设备名会出现在/ proe/devices文件中o Linux内核通过主设备号和从设备号来访问设备 驱动,每个驱动程序都要有惟一的主设备号,Linux Kernel 2.2和2.4支持256个主设备号(其中0和255 保留)。注册后Linux把设备名和主设备号联系起来, 访问该设备时,系统通过请求设备名得到主/次设备 号,然后根据设备号访问相应的设备驱动,驱动程序根 据相应的次设备号凋用不同的函数。 当设备驱动模块从内核中卸载时,对应的主设备 号必须被释放,通过以下函数来进行设备驱动的卸载。 int unregister chrdev(unsigned int major,eonst char name);卸载失败,该函数返回.EINVAL驱动程序的初 始部分,一般还负责给设备驱动程序申请系统资源,如 内存、中断、时钟、I/0端口等,这些资源也可以在open 子程序或其他地方申请。 3 SitSang板的触摸屏驱动的设计 触摸屏驱动的实现流程如图1所示。 触摸屏初始化。 设置延迟5ms 打开触摸屏,向内核注 册一个线程中断,维护 触摸屏事件的操作 ◇ 将剧啪电压值从SSDR中 读出放入相应的数据结构 :孥墨岁.笔是否仍按F?/\_/磊莲莉丽 行相应的转换处理l , 陌司 图1 触摸屏程序实现流程 触摸屏设备驱动程序主要内容如下: #include #include 设计触摸屏驱动程序,首先定义了一个ads7846 的结构,它包括重要的数据结构,包括打开的触摸屏设 备、等待队列、运行状态,具体定义如下: Struct ads7846() {struet input—dev idev; #ifdef CONFIG—PM Struct pm—dev+pmdev; #endif Int ref; Spinlock—t irq—lock; Wait—queue—head—t irq wait;/·触摸屏的等待队列·/ Struct completion init—exit; Struct task—struct·rtast; Int restart:I;} 触摸屏的初始化主要有ts—sitsang—init函数完成, 触摸屏的打开由ads7846一ts—open实现。 Static int ads7846一ts—open(strutet input—dev·idev){ ..init waitqueue—head(&ts一irq—wait); If((ret=request—irq(SITSANG—TOUCH—SCREEN—IRQ。ads7846一ts—irq, SA—SHIQRISA—INTERRUP,“ADS7846”,t8))0) ………./·注册触摸屏的中断服务程序·/ Bet=kernel—thread(ads7846一thread,ta,clone—fs clone—files);/,生成内 核线程控制触摸屏事件。·/} (下转第47页) 万方数据 2009年第10期 仪表技术 ·47· 分析,判断出汽车启动后或驾驶过程中汽车的各种检 测部件工作是否有需要主动安全稳定控制的要求。 (1)当判断出汽车没有需要主动安全稳定控制 的要求时,单片机将不干涉汽车的启动或行驶过程。 (2)当判断出汽车有需要主动安全稳定控制的 要求时,单片机通过节气门驱动放大器及接口、执行机 构驱动放大器及接口控制执行部分液压执行机构 (ESP机构)、节气门驱动机构进行相应地响应工作, 使汽车达到主动安全稳定控制的要求。 (3)同时单片机通过PCB板的内部通信是否需 要协助控制助力转向机构(EPS机构)进行相应地响 应工作。 (4)同时单片机还可以通过CAN收发器及接口 通知汽车发动机ECU也进行相应地响应协助工作。 (5)并且单片机通过控制指示器及信号灯驱动 放大器接口控制主动安全信息提示器、ESP警告灯、 ABS警告灯提示驾驶员汽车现在的安全状态。 (6)由单片机把当前主要的动态实时信息信号 数据写入动态结构状态数据库保存。 这样就可以使汽车在最短的时间、最好的控制方 法来达到主动安全稳定控制的要求和目的,还把当前 主要的动态实时信息信号数据保存以便查询。 如此就实现了汽车的电子主动安全稳定控制功 能,即ESP功能。 2.2.4当单片机判断出汽车行驶过程中动态实时信 息信号数据已经接近、达到或超过汽车目前结构本身 允许极限值的安全状态参数。 (1)当接近汽车目前结构本身允许极限值的安 全状态参数时,由单片机通过控制指示器及信号灯驱 动放大器接口控制主动安全信息提示器提示驾驶员汽 车现在的安全状态。 (2)当达到汽车目前结构本身允许极限值的安 全状态参数时,由单片机通过控制指示器及信号灯驱 动放大器接口控制主动安全信息提示器、ESP警告灯 提示驾驶员汽车现在的安全状态。 (3)当超过汽车目前结构本身允许极限值的安 全状态参数时,由单片机通过控制指示器、信号灯驱动 放大器及接口控制主动安全信息提示器、ESP警告灯、 ABS警告灯提示驾驶员汽车现在的安全状态。 (4)通过主动干预措施使当前汽车的速度不能 超过汽车目前结构本身允许极限值的安全状态参数 (即:限制汽车的最高速度)。 2.3 汽车电门关闭或因故障突然断电控制 2.3.1 当系统断电时,由ECU微处理器把此次上电后 动态结构状态数据库的主要数据写入原始结构状态数 据库保存,作为历史数据以便查询。 2.3.2停车查询数据时:(1)由计算机调试系统通过 PC通信接口线、通信转换器及接口给单片机下达相关 查询数据命令;(2)当再次打开汽车电门时,计算机调 试系统就可以与单片机进行正常通信,查询相关数据。 3 结束语 (1)本方案减少了电子元件,减少了体积和制造 成本。 (2)汽车出厂时有原始结构的允许行使速度极 限值数据与汽车目前结构状态行使速度参数数据的比 较,计算出汽车目前结构状态本身行使速度允许极限 值参数的安全主动提示功能。 (3)汽车出厂时有原始结构中刹车制动系统性 能参数数据与汽车目前结构状态中刹车制动系统性能 参数数据比较,计算出汽车目前结构状态本身刹车制 动系统性能参数的安全主动提示功能。 (4)汽车出厂时有原始结构中轮胎性能参数数 据与汽车目前轮胎性能状态参数数据比较,计算出汽 车目前结构状态本身轮胎性能参数的安全主动提示 功能。 参考文献: [1]崔胜民.现代汽车系统控制技术[M].北京:北京大学出版 社,2008. [2]张卫冬,余达太,晏蔚光,等.一种智能电动助力转向系统 [J].北京科技大学学报,2003(2):66—68. [3]易年川,陈杰,刘天云,等.一种汽车实时信息提示式主动 控制与稳定安全系统:中国,ZL 200720070102.6[P].2008 一03—12. (许雪军编发) (上接第44页) 触摸屏驱动程序的初始化完成以后,就开启线程 控制触摸屏事件。当有中断申请时,该线程序唤醒,处 理触摸屏的x/y坐标,然后检查到笔是抬起,则进入睡 眠。在驱动程序开发完成后,可开发相应的应用程序 来测试与使用。 参考文献: [1]祝捷.嵌入式软件模块调试方法探讨[J].电子工程师, 2004,30(8):53—56. [2]朱秉颖.基于嵌入式GUI雷达控制系统人机界面设计[J]. 现代雷达,2007,29(3):52—55. [3]马忠梅,李善平,康慨,等.ARM&Linux嵌入式系统教程 [M].北京:北京航空航天大学出版社,2004. (许雪军编发) 万方数据
展开阅读全文
  皮皮文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:基于linux的触摸屏驱动程序的设计与实现.pdf
链接地址:http://www.ppdoc.com/p-10914299.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们

copyright@ 2008-2018 皮皮文库网站版权所有
经营许可证编号:京ICP备12026657号-3 

收起
展开