触摸屏控制器驱动程序设计_第1页
触摸屏控制器驱动程序设计_第2页
触摸屏控制器驱动程序设计_第3页
触摸屏控制器驱动程序设计_第4页
已阅读5页,还剩5页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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为高电平时 ,DO

3、UT呈高阻态 。BUSY为系统忙标志端 ,当 CS为低 电平 , 且 BUSY为高电平时 ,表示 ADS7843正在进行数据转换 ;VREF参考电压输入端 ,电压值在 +1V 到+VCC之间变化 ;PENIRQ为笔触中断 ,低电平有效 ;IN3、IN4为辅助 ADC转换输入通道 ;+VCC为电源输入。图 1ADS7843内部结构1.2ADS7843的转换时序ADS7843 完成一次数据转换需要与微控制 器进行 3 次通信 ,第一次微 处理器通过异步数 据传送向 ADS843 发送控制字 ,其中包 括起始位、通道选择、 8/12 位模式、差分 / 单端选择和掉电模式选择 ,其后的两次数据传送则是

4、微控制 器从 ADS7843 取出 16bitA/D 转换结果数据 (最后四位自动补零 ),每次通信需要 8 个时钟周期 ,完成一次数据转换共需 24 个时钟周期 ,图 2 为 ADS7843转换时序。图 2ADS7843转换时序2ADS7843与 PXA255硬件接口PXA255微处理器是 Intel 公司生产的第二代基于 32 位 XScale微架构的集成系统芯片 (ISOC),PXA255具有高性能、低功耗等优点 ,它除了 XScale微内核外 ,还集成了许多适用于手持设备市场 需要的外围设备。图 3 为ADS7843触摸屏控制器与 PXA255微处理器的硬件连线示意图。当 屏触发生时

5、ADS7843向 PXA255发出中断请求 ,由 PXA255响应该中断请求 ,启动通信过程 ,读取 ADS7843 的转换结果 ,从而得到触摸点的坐标。 ADS7843 各信号的时序受外部输入时钟信 号频率的影响 ,一旦外部输入时钟频率固定 ,各信号的时序便完全确定 ,因此需要配置 PXA255 的接口信号时序 ,使之完全符合 ADS7843的时序。图 3ADS7843触摸屏控制器与PXA255微处理器的连线示意图3ADS7843驱动程序的设计Linux 作为一个 宏内核操作系统 ,其设备驱动都在内核 ,即系统空间实现 ,实现方式有两种 ,一种是将有关的设备驱动程序和数据结构静态地连接在内核

6、映像中 ;另一种是将具体的设备驱动程序和数据结构独立加以编译,成为可安装的模块 ,需要时由应用程序通过系统调用动态地予以安装或拆卸。设备 驱动的实现方法也有两种 ,一种是轮询 (polling)方式,另一种是中断 (inter-rupt) 方式,轮询方式对设备的操作完全由 CPU掌握 ,外部设备则完全处 于被动状态。中断方式是由外部设备主动提出申请 , CPU响应申请后对外部设 备进行处理 ,是现在常用的设备驱动方式。 Linux 的设备驱 动具有两个显著的特点 ,其一是把所有的设备视为一种设备文件 ,每个设备都呈现于文件系统的 / dev 目录下 ,设备驱动与文件操作具有相同的 界面和语义

7、,并通过同一组系统调用进行操作 ;另一个显著特点是 Linux 的设备驱动有着分明的层次和 结构。Linux 内核的新 近版本为设备入口提供了一种特殊的文件系统,即设备文件系统 devfs(devicefilesystem)。新的 devfs 机制的优点在于 : 各种 设备驱动模块动 态地向系统登记 ,设备初始化时在 /dev 目录下创建设 备 入口点 , 移除设备时将其删除。 设备驱动程序可以指定设备名 、所 有者和权限位。 不需要为设备驱动程序分配主设备号以及次设备号。 当装载和卸载模块时 ,不再需要运行脚本来创建设备文件 ,驱动程序 自主地管理其设备文件。采用 devfs 机制的设备驱动

8、程序调用下面的函数来处理设备 的创建和删除工作。devfs_hander_tdevfs_mk_dir(devfs_han2der_tdir,constchar3name,void3info)devfs_hander_tdevfs_register(devfs_han2der_tdir,constchar3NAME,unsignedintflags,unsignedintmajor,unsignedintminor,umode_tmode,void3ops,void3info)voiddevfs_unregister(devfs_hander_tde)在 Linux 操作系统编写设备驱动 程序时

9、有几个固定的功能模块 :向 Linux 内核注册该设备 时的初始化设备驱动程序模块 ;用于系统卸载模块时删除设备驱动程序 的模块;提供用户使用该设备驱动程序的文件操作接口模块。对于各类 具体设备编写驱动程序时还应具有对该设备进行操作的应用函数。下 面就以 ADS7843驱动程序设 计为例分析以上几个功能模块。1)ADS7843向 Linux 内核注册设备时的初始化函数 int_initads7843_ts_init(void)/ 设备初始化函数intret;if(ret=devfs_register_chrdev(TS_MAJOR,TS_NAME,&ads7843_ts_fops)!=0)pr

10、intk(registeringofTS_NAMEisfailedn);returnret;devfs_ts_dir=devfs_mk_dir(NULL,touchscreen,NULL);/建立触摸屏设备目录devfs_handle=devfs_register(devfs_ts_dir,ts,DEVFS_FL_DEFAULT,TS_MA JOR,0,S_IFCHR|S_IRUSR|S_IWUSR,&ads7843_ts_fops,NULL);/注册设备 if(ret=request_irq(IRQ_GPIO_ADS7843,ads7843_ts_inter-rupt, SA_SHIRQ|S

11、A_INTERRUPT,TS_NAME,dev_id)/申请中断 printk(ads7843_ts_init:failedtoregisterIRQn);free_irq(IRQ_GPIO_ADS7843,dev_id);returnret;if(ret=ads7843_init()!=0)/ 初始化触摸屏free_irq(IRQ_GPIO_ADS7843,dev_id);returnret;GPDR0&=GPIO_bit(ADS7843_BUSY);GPDR0&=GPIO_bit(ADS7843_DOUT);Ads7843_Enable_IRQ();/开启中断printk(ads7843t

12、ouchscreendriverinitializedn);return0;2)系统卸载 ADS7843驱动程序功能函数void_exitads7843_ts_cleanup(void)/卸载驱动程序函数if(in_timehandle)del_timer(&timer);free_irq(IRQ_GPIO_ADS7843,dev_id);/释放中断devfs_unregister_chrdev(TS_MAJOR,TS_NAME);/从系统中删除设备驱动程序printk(ads7843touchscreendriverremovedn);3)在驱动程序最后 用于模块初始化和删除驱动的功能函数m

13、odule_init(ads7843_ts_init);/ 初始化驱动模块函数module_exit(ads7843_ts_cleanup);/删除驱动模块函数4)ADS7843设备文件操作结构体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,/打开设备操作r

14、elease:ads7843_ts_release,;/当文件结构被释放时 ,调用释放操作由于文章篇幅所 限,对设备文件操作的功能函数不再一一列出。5)ADS7843具体操作函数 ADS7843 串行输出控制字 函数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);/时钟变

15、高 微处理器读取 X 坐标值函 数(读取 Y 坐标值函数相 类似,控制字为0x90)intADS7843_ts_measure_x(void)chari,inttouch_data=0;ADS7843_ClearBit(0,ADS7843_CS);/片选端置低电平udelay(DELAY);ADS7843_din(0xD0);/向 ADS7843发送读 X 坐标控制字 0xD0 ADS7843_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 函数动态地装载

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论