触摸屏控制器驱动程序设计
- 格式:docx
- 大小:13.64 KB
- 文档页数:9
触摸屏驱动程序设计一.设计目的1,巩固学习嵌入式软件方面的基本知识,进一步熟悉基本概念。
2,熟练常用控件,文件,图形等方面的操作了解基本的流程。
3,运用所用学的嵌入式知识,编写出较为实用的小软件,增进对一些实际问题的软,硬件知识的掌握。
4,培养查阅资料,独立思考问题的能力。
二、要求:编写从A/D转换器的通道x获取模拟数据,并将转换后的数字量以波形的形式在LCD上显示的程序。
三. 实验步骤:四.基本思路及关键问题的解决方法;基本思路:1. 按照步骤程序设计原理说明,使用”CodeWarrior for ARM Developer Suite”软件编写程序并进行编译,建立一个新的文件单击【File】菜单中的【New File】选项,然后出现下面的对话框,输入文件名(加上后缀“.c”),单击保存按钮,在编译过程中如果出现错误,修改程序直到没有错误为止,编译过程中出现警告一般可以不必考虑,但特殊时也要通过修改程序消除警告。
程序编写完成后,将程序所在文件保存到2440test.mcp中,如图所示:2.用开发板测试程序代码:(1)首先设置开发板的拨动开关S2 为Nor Flash 启动,连接好附带的USB 线和电源(可以不必连接串口线)。
(2)设置超级终端(3)开机进入BIOS 模式,此时开发板上的绿色LED1 会呈现闪烁状态,其启动界面,如下图:输入”d”(4)安装USB 下载驱动(5)点击DNW 程序的“USB Port” “Transmit”,选择这个2440test.mcp文件,接着点“打开”,这样就开始下载了五、流程图及电路原理图1.绘制所需的流程图:ADS7843与S3C2410的硬件连接如图1所示,图1 触摸屏输入系统示意图触摸屏驱动程序设计触摸屏驱动程序中重要数据结构typedef struct {unsigned short pressure;unsigned short x;unsigned short y;unsigned short pad;} TS_RET;typedef struct {unsigned int PenStatus;TS_RET buf[MAX_TS_BUF];unsigned int head, tail;wait_queue_head_t wq;spinlock_t lock;} TS_DEV;static struct file_operations s3c2410_fops = {owner: THIS_MODULE,open: s3c2410_ts_open,read: s3c2410_ts_read, release: s3c2410_ts_release,poll: s3c2410_ts_poll, };本设计中触摸屏控制器ADS7843的中断输出通过外部中断5接在中断控制器上,当触摸屏上有触摸事件发生时,会引发中断号为IRQ_EINT5的中断服务程序s3c2410_isr_tc()。
基于STM32的触摸屏显示系统设计1.引言随着科技的不断进步,触摸屏显示系统越来越普及和应用广泛。
触摸屏提供了一种直观、简单且交互性强的用户输入方式,因此在很多领域都有广泛的应用,如智能手机、平板电脑、汽车导航等。
本文将介绍一种基于STM32的触摸屏显示系统设计。
2.系统架构系统由主控板、触摸屏模块以及液晶显示器组成。
主控板使用STM32微控制器作为核心,负责整个系统的控制和数据处理。
触摸屏模块通过SPI接口与主控板连接,实现对触摸事件的检测和数据传输。
液晶显示器通过GPIO接口与主控板连接,用于显示系统界面。
3.系统功能该触摸屏显示系统具有以下功能:3.1触摸事件检测和处理系统能够实时检测到用户的触摸事件,并根据触摸事件进行相应的处理。
通过触摸屏模块的驱动和算法,可以高效地检测到触摸事件的位置和状态,如按下、滑动、放开等,并将触摸事件数据传输给主控板进行处理。
3.2图形界面显示系统能够将处理后的数据以图形界面的形式显示在液晶显示器上。
主控板通过与液晶显示器的通信,将界面数据传输给显示器,并控制显示器进行相应的显示。
用户可以通过触摸屏进行交互,如点击按钮、滑动列表等。
3.3音频播放系统还可以进行音频播放功能。
通过主控板的音频接口,可以连接外部音频设备,如音响或耳机。
用户可以通过触摸屏界面选择和控制音频文件的播放、暂停、调节音量等。
4.系统设计4.1硬件设计硬件设计包括主控板、触摸屏模块和液晶显示器的选型和连接设计。
主控板选择STM32系列的微控制器,具有丰富的外设和高性能的处理能力。
触摸屏模块选择支持SPI接口的触摸屏驱动芯片,能够实现高速数据传输和准确的触摸事件检测。
液晶显示器选择支持GPIO接口的液晶屏,具有较高的分辨率和显示效果。
4.2软件设计软件设计包括主控板的固件开发和触摸屏界面的设计。
主控板的固件开发主要包括驱动程序和应用程序的编写。
驱动程序包括对触摸屏模块和液晶显示器的控制程序,实现数据传输和显示控制。
触摸屏设计方案1. 引言触摸屏作为一种用户界面交互方式,已经在电子设备领域中得到广泛应用。
它可以取代物理按键,提供更直观、便捷的操控方式。
本文将介绍一个触摸屏设计方案,包括设计目标、硬件选型、软件开发以及测试计划。
2. 设计目标在设计触摸屏前,首先需要明确设计目标。
以下是本设计方案的目标:•实现高精度触摸控制:触摸屏应该有足够的分辨率和灵敏度,以实现精准的触摸控制。
•支持多点触控:触摸屏应该支持多点触控,以实现更复杂的手势操作。
•高可靠性和稳定性:触摸屏应该具备高可靠性和稳定性,能够在长时间使用中保持正常工作。
•低功耗:触摸屏应该尽可能降低功耗,延长电池续航时间。
•符合人体工程学设计:触摸屏的外形和尺寸应该符合人体工程学的要求,使操作更舒适。
3. 硬件选型选择适合的硬件是设计触摸屏的重要一步。
下面是本设计方案的硬件选型:3.1 触摸屏芯片触摸屏芯片是触摸屏的核心组件,负责将触摸信号转换为数字信号输出。
在选型触摸屏芯片时,需要考虑以下因素:•分辨率:选择具备高分辨率的触摸屏芯片,以获得更准确的触摸控制。
•灵敏度:选择灵敏度高的触摸屏芯片,以提高触摸的响应速度。
•接口类型:触摸屏芯片应支持常用接口类型,比如I2C或SPI,在连接主控芯片时更加方便。
•抗干扰能力:触摸屏芯片应具备较好的抗干扰能力,以减少外部干扰对触摸控制的影响。
3.2 显示屏触摸屏一般与显示屏结合使用,形成一个完整的显示控制系统。
在选型显示屏时,需要考虑以下因素:•分辨率:选择与触摸屏芯片匹配的显示屏,以保证触摸和显示的一致性。
•尺寸和比例:根据应用场景和终端设备的尺寸要求选择合适的显示屏尺寸和比例。
•显示技术:根据应用需求选择合适的显示技术,比如LCD、OLED等。
3.3 控制器控制器是触摸屏与主控芯片之间的桥梁,负责将触摸信号传输给主控芯片,并接收主控芯片发送的指令。
在选型控制器时,需要考虑以下因素:•接口类型:选择与主控芯片兼容的控制器,以确保信号传输的稳定性。
mini2440驱动分析系列之---------------------------------------Mini2440触摸屏程序分析By JeefJiang July,8th,2009这是mini2440驱动分析系列的第三篇文章,本文分为三个部分,第一部分讲叙硬件知识,包括触摸屏的原理以及SCC2440 SOC上的触摸屏是如何工作的。
第二部分分析输入设备子系统的框架,并进行相应的代码分析。
第三部分利用上述的原理来分析mini2440的触摸屏驱动。
第四部分介绍了测试和校准。
1.需要准备的硬件知识1.1电阻式触摸屏工作原理原理触摸屏附着在显示器的表面,与显示器相配合使用,如果能测量出触摸点在屏幕上的坐标位置,则可根据显示屏上对应坐标点的显示内容或图符获知触摸者的意图。
触摸屏按其技术原理可分为五类:矢量压力传感式、电阻式、电容式、红外线式、表面声波式,其中电阻式触摸屏在嵌入式系统中用的较多。
电阻触摸屏是一块4层的透明的复合薄膜屏,如图2所示,最下面是玻璃或有机玻璃构成的基层,最上面是一层外表面经过硬化处理从而光滑防刮的塑料层,中间是两层金属导电层,分别在基层之上和塑料层内表面,在两导电层之间有许多细小的透明隔离点把它们隔开。
当手指触摸屏幕时,两导电层在触摸点处接触。
触摸屏的两个金属导电层是触摸屏的两个工作面,在每个工作面的两端各涂有一条银胶,称为该工作面的一对电极,若在一个工作面的电极对上施加电压,则在该工作面上就会形成均匀连续的平行电压分布。
如图4所示,当在X方向的电极对上施加一确定的电压,而Y方向电极对上不加电压时,在X平行电压场中,触点处的电压值可以在Y+(或Y-)电极上反映出来,通过测量Y+电极对地的电压大小,便可得知触点的X 坐标值。
同理,当在Y电极对上加电压,而X电极对上不加电压时,通过测量X+电极的电压,便可得知触点的Y坐标。
电阻式触摸屏有四线和五线两种。
四线式触摸屏的X工作面和Y工作面分别加在两个导电层上,共有四根引出线,分别连到触摸屏的X电极对和Y电极对上。
触摸屏控制器驱动程序设计在便携式的电子类产品中 ,触摸屏由于其便、灵活、占用空间少等优点 ,已经逐渐取代键盘成为嵌入式计算机系统常选用的人机交互输入设备。
触摸屏输入系统由触摸屏、触摸屏控制器、微控制器及其相应的驱动程序构成。
本文从触摸屏控制器的驱动程序设计着手 ,介绍触摸屏控制器 ADS7843 的内部结构及工作原理和在嵌入式 Linux 操作系统中基于PXA255微处理器的ADS784羽驱动程序设计。
1触摸屏控制器ADS7843的介绍1.1ADS7843的内部结构ADS7843内驻一个多路低导通电阻模拟开关组成的供电-测量电路网络、12bit逐次逼近A/D转换器和异步串行数据输入输出,ADS7843艮据微控制器发来的不同测量命令导通相应的模拟开关 ,以便向触摸屏电极对提供电压 ,并把相应电极上的触点坐标位置所对应的电压模拟量引入A/D转换器,图1为ADS7843内部结构图。
X+、Y+ X-、丫为触摸屏电极模拟电压输入;CS为ADS7843的片选输入信号,低电平有效;DCLK接外部时钟输入 ,为芯片进行 A/D 转换和异步串行数据输入 /输出提供时钟;DIN串行数据输入端,当CS低电平时,输入数据在时钟的上升沿将串行数据锁存;DOUT串行数据输出端,在时钟下降沿数据由此移位输出,当 CS 为高电平时,DOUT呈高阻态。
BUSY为系统忙标志端,当CS为低电平, 且BUSY为高电平时,表示ADS7843正在进行数据转换;VREF参考电压输入端,电压值在+1V到+VCC之间变化;PENIRC为笔触中断,低电平有效;IN3、IN4为辅助ADC转换输入通道;+VCC为电源输入。
图1ADS7843内部结构1.2ADS7843的转换时序ADS7843完成一次数据转换需要与微控制器进行3次通信,第一次微处理器通过异步数据传送向 ADS843 发送控制字 ,其中包括起始位、通道选择、 8/12 位模式、差分 /单端选择和掉电模式选择 ,其后的两次数据传送则是微控制器从 ADS7843 取出 16bitA/D 转换结果数据(最后四位自动补零),每次通信需要 8 个时钟周期 ,完成一次数据转换共需 24 个时钟周期周2为ADS7843转换时序。
图2ADS7843转换时序2ADS7843与 PXA255硬件接口PXA255微处理器是In tel公司生产的第二代基于32位XScaie微架构的集成系统芯片(ISOC),PXA25具有高性能、低功耗等优点,它除了 XScale 微内核外 ,还集成了许多适用于手持设备市场需要的外围设备。
图 3 为ADS7843触摸屏控制器与PXA255微处理器的硬件连线示意图。
当屏触发生时ADS7843向PXA255发出中断请求,由PXA255响应该中断请求,启动通信过程,读取ADS7843的转换结果,从而得到触摸点的坐标。
ADS7843 各信号的时序受外部输入时钟信号频率的影响 ,一旦外部输入时钟频率固定 ,各信号的时序便完全确定 ,因此需要配置 PXA255 的接口信号时序,使之完全符合ADS7843的时序。
图3ADS7843触摸屏控制器与PXA255微处理器的连线示意图3ADS78435驱动程序的设计Linux 作为一个宏内核操作系统 ,其设备驱动都在内核 ,即系统空间实现 , 实现方式有两种 ,一种是将有关的设备驱动程序和数据结构静态地连接在内核映像中 ;另一种是将具体的设备驱动程序和数据结构独立加以编译,成为可安装的模块 ,需要时由应用程序通过系统调用动态地予以安装或拆卸。
设备驱动的实现方法也有两种,一种是轮询(polling)方式另一种是中断(inter-rupt)方式,轮询方式对设备的操作完全由 CPU掌握,夕卜部设备则完全处于被动状态。
中断方式是由外部设备主动提出申请 , CPU响应申请后对外部设备进行处理,是现在常用的设备驱动方式。
Linux 的设备驱动具有两个显著的特点 ,其一是把所有的设备视为一种设备文件,每个设备都呈现于文件系统的/dev目录下,设备驱动与文件操作具有相同的界面和语义 ,并通过同一组系统调用进行操作 ;另一个显著特点是Linux的设备驱动有着分明的层次和结构。
Linux 内核的新近版本为设备入口提供了一种特殊的文件系统 ,即设备文件系统devfs(devicefilesystem。
新的devfs机制的优点在于:①各种设备驱动模块动态地向系统登记 ,设备初始化时在 /dev 目录下创建设备入口点 , 移除设备时将其删除。
② 设备驱动程序可以指定设备名、所有者和权限位。
③ 不需要为设备驱动程序分配主设备号以及次设备号。
④ 当装载和卸载模块时 ,不再需要运行脚本来创建设备文件 ,驱动程序自主地管理其设备文件。
采用devfs机制的设备驱动程序调用下面的函数来处理设备的创建和删除工作。
devfs_hander_tdevfs_mk_dir(devfs_han2der_tdir,constchar3name,void3i nfo)devfs_hander_tdevfs_register(devfs_han2der_tdir,constchar3NAME,unsig nedintflags,unsignedintmajor,unsignedintminor,umode_tmode,void3ops,v oid3info)voiddevfs_unregister(devfs_hander_tde)在 Linux 操作系统编写设备驱动程序时有几个固定的功能模块:向 Linux 内核注册该设备时的初始化设备驱动程序模块 ;用于系统卸载模块时删除设备驱动程序的模块;提供用户使用该设备驱动程序的文件操作接口模块。
对于各类具体设备编写驱动程序时还应具有对该设备进行操作的应用函数。
下面就以ADS784羽驱动程序设计为例分析以上几个功能8°」)ADS7843可匚nuxwM 羊串菇瞅卑3裆毬矣因選infinigds7843fs inif(void)//菇瞰裆毬因選宀infraif((「elldevfsl 「egis(Dr_ch 「dev(TSIMAJORHSINAMEdads7843lfslfops))H0)宀prinfkQegisCDringopTSINAME 二 sfa=ed一rrmefulnrec devfslfsldi 〒 devfslmkid i「(N UL L =f ouchscree n =N U LL)-B H ^淋淑菇瞰四>devfslhand_eHdevfsl 「egis(D 「(devfslfsldi「=fs=DEVFSIFLIDEFAULTHSIMAJOROSI_FCHR_sl_RUSR_sl_WUSRdads7843lfslfopszul^菇瞅 if((「ell 「equesfli 「q(-RQIG 卫OIADS7843bds7843lfslin(D 「—nJPLSAISH_RQ_SA」NTERRUPTHSINAMECLevliaw甘s宀prinfkvadszBAUIfsIinir-rfai-edforegisCDr-RCArr)八freelirq(-RQIG 卫OIADS7843CLevlid)m2.umrecif((「ellads7843linio)Ho)二裆毬矣裁淋淑 宀f 「eeli 「q(-RQIG卫OIADS7843CLevlid)m2.uln 「ecGPDR0QO¥GP_olbif(ADS7843IBUSY=GPDR0QO9G卫 olbif(ADS7843IDOUTXAds7843IEnab_el_RQP 申M甘sprintk("ads7843touchscreendriverinitialized\n");return0;}2)系统卸载ADS784羽驱动程序功能函数void__exitads7843_ts_clea nup(void)// 卸载驱动程序函数{if(in_timehandle) del_timer(&timer);free_irq(IRQ_GPIO_ADS7843,dev_id);释放中断devfs_u nregister_chrdev(TS_MAJOR,TS_NAME)从系统中删除设备驱动程序printk("ads7843touchscreendriverremoved\n");}3)在驱动程序最后用于模块初始化和删除驱动的功能函数module_init(ads7843_ts_init);// 初始化驱动模块函数module_exit(ads7843_ts_clea nu p);// 删除驱动模块函数4)ADS7843设备文件操作结构体staticstructfile_operationsads7843_ts_fops={read:ads7843_ts_read,〃从设备中读数据操作poll:ads7843_ts_poll,〃查询设备操作ioctl:ads7843_ts_ioctl,〃设备 IO 控制操作fasync:ads7843_ts_fasync,/屏步通知操作 open : ad s 7 843_ts_open , //打开设备操作 release:ads7843_ts_release,};/当文件结构被释放时,调用释放操作由于文章篇幅所限 ,对设备文件操作的功能函数不再一一列出。
5)ADS7843具体操作函数①ADS7843串行输出控制字函数 voidADS7843_din(charcommand) udelay(DELA Y);/延时for(inti=0;i>i)&0x1)ADS7843_SetBit(0,ADS7843_DIN)数据位为 1elseADS7843_ClearBit(0,ADS7843_DIN)数据位为 0 udelay(DELAY);ADS7843_SetBit(0,ADS7843_CLK);}}// 钟变高②微处理器读取X坐标值函数(读取Y坐标值函数相类似,控制字为0x90)intADS7843_ts_measure_x(void) {chari,inttouch_data=0;ADS7843_ClearBit(0,ADS7843_CS)片选端置低电平udelay(DELAY);ADS7843_din(OxDO);/佝 ADS7843发送读 X 坐标控制字 OxDOADS7843_ClearBit(0,ADS7843_CLK);udelay(DELAY);while(!(GPLR0&GPIO_bit(ADS7843_BUSY)))printk("BUSY1\n");ADS7843_ClearBit(0,ADS7843_CLK);for(i=0;i>=3;〃对最后4位自动置0处理return(touch_data&0xfff);}4驱动模块的安装在 Linux 操作系统中 ,对于已编好的设备驱动程序 ,利用编译工具将驱动程序编译成驱动模块。