触摸屏控制器驱动程序设计

上传人:cn****1 文档编号:551814708 上传时间:2022-07-29 格式:DOCX 页数:9 大小:15.21KB
返回 下载 相关 举报
触摸屏控制器驱动程序设计_第1页
第1页 / 共9页
触摸屏控制器驱动程序设计_第2页
第2页 / 共9页
触摸屏控制器驱动程序设计_第3页
第3页 / 共9页
触摸屏控制器驱动程序设计_第4页
第4页 / 共9页
触摸屏控制器驱动程序设计_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《触摸屏控制器驱动程序设计》由会员分享,可在线阅读,更多相关《触摸屏控制器驱动程序设计(9页珍藏版)》请在金锄头文库上搜索。

1、触摸屏控制器驱动程序设计 在便携式的电子类产品中,触摸屏由于其便、灵活、占用空间少等优点, 已经逐渐取代键盘成为嵌入式计算机系统常选用的人机交互输入设备。 触摸屏输入系统由触摸屏、触摸屏控制器、微控制器及其相应的驱动 程序构成。本文从触摸屏控制器的驱动程序设计着手,介绍触摸屏控制 器 ADS7843 的内部结构及工作原理和在嵌入式 Linux 操作系统中基于 PXA255微处理器的ADS7843驱动程序设计。1 触摸屏控制器 ADS7843 的介绍1.1ADS7843 的内部结构ADS7843 内驻一个多路低导通电阻模拟开关组成的供电-测量电路网络12bit逐次逼近A/D转换器和异步串行数据输

2、入输出,ADS7843根据微控 制器发来的不同测量命令导通相应的模拟开关,以便向触摸屏电极对提 供电压,并把相应电极上的触点坐标位置所对应的电压模拟量引入 A/D 转换器,图1为ADS7843内部结构图。X+、Y+、X-、Y-为触摸屏电极模 拟电压输入;CS为ADS7843的片选输入信号,低电平有效;DCLK接外部时 钟输入,为芯片进行A/D转换和异步串行数据输入/输出提供时钟;DIN串 行数据输入端,当 CS 低电平时,输入数据在时钟的上升沿将串行数据锁 存;DOUT串行数据输出端,在时钟下降沿数据由此移位输出,当CS为高 电平时,DOUT呈高阻态。BUSY为系统忙标志端,当CS为低电平,且

3、BUSY 为高电平时,表示ADS7843正在进行数据转换;VREF参考电压输入端,电 压值在+1V到+VCC之间变化;PENIRQ为笔触中断,低电平有效;IN3、IN4为辅助ADC转换输入通道;+VCC为电源输入。图 1ADS7843 内部结构1.2ADS7843 的转换时序ADS7843 完成一次数据转换需要与微控制器进行3 次通信,第一次微处 理器通过异步数据传送向 ADS843 发送控制字,其中包括起始位、通道 选择、 8/12 位模式、差分/单端选择和掉电模式选择,其后的两次数据传 送则是微控制器从ADS7843取出16bitA/D转换结果数据(最后四位自动 补零),每次通信需要8 个

4、时钟周期,完成一次数据转换共需24个时钟周 期,图 2 为 ADS7843 转换时序。图 2ADS7843 转换时序2ADS7843 与 PXA255 硬件接口PXA255微处理器是Intel公司生产的第二代基于32位XScale微架构的 集成系统芯片(ISOC),PXA255具有高性能、低功耗等优点,它除了 XScale 微内核外,还集成了许多适用于手持设备市场需要的外围设备。图3 为 ADS7843 触摸屏控制器与 PXA255 微处理器的硬件连线示意图。当屏触发生时 ADS7843 向 PXA255 发出中断请求,由 PXA255 响应该中断请求, 启动通信过程 ,读取 ADS7843

5、的转换结果,从而得到触摸点的坐标。 ADS7843 各信号的时序受外部输入时钟信号频率的影响,一旦外部输入 时钟频率固定,各信号的时序便完全确定,因此需要配置 PXA255 的接口 信号时序,使之完全符合ADS7843的时序。图3ADS7843触摸屏控制器与PXA255微处理器的连线示意图3ADS7843 驱动程序的设计Linux 作为一个宏内核操作系统,其设备驱动都在内核,即系统空间实现, 实现方式有两种,一种是将有关的设备驱动程序和数据结构静态地连接 在内核映像中;另一种是将具体的设备驱动程序和数据结构独立加以编 译,成为可安装的模块,需要时由应用程序通过系统调用动态地予以安 装或拆卸。设

6、备驱动的实现方法也有两种,一种是轮询(polling)方式,另一 种是中断(inter-rupt)方式,轮询方式对设备的操作完全由CPU掌握,外部 设备则完全处于被动状态。中断方式是由外部设备主动提出申请 ,CPU 响应申请后对外部设备进行处理,是现在常用的设备驱动方式。 Linux 的 设备驱动具有两个显著的特点,其一是把所有的设备视为一种设备文件, 每个设备都呈现于文件系统的/dev目录下,设备驱动与文件操作具有相 同的界面和语义,并通过同一组系统调用进行操作 ;另一个显著特点是 Linux 的设备驱动有着分明的层次和结构。Linux 内核的新近版本为设备入口提供了一种特殊的文件系统 ,即

7、设备 文件系统devfs(devicefilesystem)。新的devfs机制的优点在于:各种 设备驱动模块动态地向系统登记,设备初始化时在/dev目录下创建设备 入口点,移除设备时将其删除。设备驱动程序可以指定设备名、所有 者和权限位。 不需要为设备驱动程序分配主设备号以及次设备号。当装载和卸载模块时,不再需要运行脚本来创建设备文件,驱动程序 自主地管理其设备文件。采用devfs机制的设备驱动程序调用下面的函 数来处理设备的创建和删除工作。devfs_hander_tdevfs_mk_dir(devfs_han2der_tdir,constchar3name,void3in fo) dev

8、fs_hander_tdevfs_register(devfs_han2der_tdir,constchar3NAME,unsig nedintflags,unsignedintmajor,unsignedintminor,umode_tmode,void3ops,v oid3info)voiddevfs_unregister(devfs_hander_tde)在 Linux 操作系统编写设备驱动程序时有几个固定的功能模块:向 Linux 内核注册该设备时的初始化设备驱动程序模块;用于系统卸载模块时删 除设备驱动程序的模块;提供用户使用该设备驱动程序的文件操作接口 模块。对于各类具体设备编写驱

9、动程序时还应具有对该设备进行操作 的应用函数。下面就以 ADS7843 驱动程序设计为例分析以上几个功能模块。1)ADS7843 向 Linux 内核注册设备时的初始化函数int_initads7843_ts_init(void) 设备初始化函数intret;if(ret=devfs_register_chrdev(TS_MAJOR,TS_NAME,&ads7843_ts_fops)!=0)printk(registeringofTS_NAMEisfailedn);returnret;devfs_ts_dir二devfs_mk_dir(NULL,touchscreen,NULL); 建立触摸屏

10、设备 目录devfs_handle=devfs_register(devfs_ts_dir,ts,DEVFS_FL_DEFAULT,TS_MAJOR,0,S _l FCHR|S_IRUSR|SWUSR,&ads7843_ts _f ops,NULL);注册设备 if(ret=request_irq(IRQ_GPIO_ADS7843,ads7843_ts_inter-rupt, SA_SHIRQ|SA_INTERRUPT,TS_NAME,dev_id)申请中断printk(ads7843_ts_init:failedtoregisterIRQn);free_irq(IRQ_GPIO_ADS784

11、3,dev_id);returnret;if(ret=ads7843_i nit()!=O)初始化触摸屏free_irq(IRQ_GPIO_ADS7843,dev_id);returnret;GPDR 0&二GPIO_bit(ADS7843_BUSY);GPDR 0&二GPIO_bit(ADS7843_DOUT);Ads7843_Enable_IRQ(); 开启中断printk(ads7843touchscreendriverinitializedn);return0;2)系统卸载 ADS7843 驱动程序功能函数void_exitads7843_ts_cleanup(void)卸载驱动程序函

12、数if(in_timehandle)del_timer(&timer);free _i rq(IRQ_GPIO_ADS7843,dev_id);释 放中断 devfs_unregister_chrdev(TS_MAJOR,TS_NAME);从系统中删除设备驱动 程序printk(ads7843touchscreendriverremovedn);3) 在驱动程序最后用于模块初始化和删除驱动的功能函数module_init(ads7843_ts_init); 初始化驱动模块函数 module_exit(ads7843_ts_cleanup);删除驱动模块函数4) ADS7843 设备文件操作结构

13、体 staticstructfile_operationsads7843_ts_fops= read:ads7843_ts_read,从设备中读数据操作 poll:ads7843_ts_poll, 查询设备操作 ioctl:ads7843_ts_ioctl,设备 IO 控制操作fasync:ads7843_ts_fasync,异 步通知操作open:ads7843_ts_open, 打开设备操作release:ads7843_ts_release,;当文件结构被释放时,调用释放操作由于文章篇幅所限,对设备文件操作的功能函数不再一一列出。5)ADS7843 具体操作函数 ADS7843串行输出控

14、制字函数voidADS7843_din(charcommand)udelay(DELAY);/延时for(inti=0;ii)&0x1)ADS7843_SetBit(0,ADS7843_DIN); 数据位为 1elseADS7843_ClearBit(0,ADS7843_DIN);数据位为 0udelay(DELAY);ADS7843_SetBit(0,ADS7843_CLK); 时钟变高 微处理器读取 X 坐标值函数(读取 Y 坐标值函数相类似,控制字为0x90)intADS7843_ts_measure_x(void)chari,inttouch_data=0;ADS7843_ClearB

15、it(0,ADS7843_CS); 片选端置低电平udelay(DELAY);ADS7843_din(0xD0);向 ADS7843 发送读 X 坐标控制字 OxDOADS7843_ClearBit(0,ADS7843_CLK);udelay(DELAY); while(!(GPLR0&GPIO_bit(ADS7843_BUSY)printk(BUSY1n);ADS7843_ClearBit(0,ADS7843_CLK);for(i=0;i=3;对最后4位自动置0处理return(touch_data&0xfff);4 驱动模块的安装在 Linux 操作系统中,对于已编好的设备驱动程序,利用编译工具将驱动 程序编译成驱动模块。对于驱动模块的安装,一种方法是重新编译 Linux 内核将驱动程序加载到系统内核,另一种方法就是利用inmod和rmmod 函数动态地装载和卸载设备驱动模块。我们在 IntelXscalePXA255 评估 板上利用重新编译Linux内核的方法将触摸屏控制器ADS7843的驱动模 块加载到系统内核。运行后取得了理想的效果。5 结束语 触摸屏已成为现代嵌入式设备人机交互的首选输入设备,触摸屏控制器 的驱动程序设计当然也就成为嵌入式设备研发的必需工作。本文以ADS7843为例介绍了在嵌入

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号