触摸屏在S3C2410上的应用实例
- 格式:doc
- 大小:494.00 KB
- 文档页数:11
S3C2410触摸屏驱动程序原理图本文介绍了基于三星S3C2410X微处理器,采用SPI接口与ADS7843触摸屏控制器芯片完成触摸屏模块的设计。
具体包括在嵌入式Linux操作系统中的软件驱动开发,采用内核定时器的下半部机制进行了触摸屏硬件中断程序设计,采用16个时钟周期的坐标转换时序,实现触摸点数据采集的方法,给出了坐标采集的流程。
设计完成的触摸屏驱动程序在博创公司教学实验设备UP-NETARM2410-S平台上运行效果良好。
引言随着信息家电和通讯设备的普及,作为与用户交互的终端媒介,触摸屏在生活中得到广泛的应用。
如何在系统中集成触摸屏模块以及在嵌入式操作系统中实现其驱动程序,都成为嵌入式系统设计者需要考虑的问题。
本文主要介绍在三星S3C2410X微处理器的硬件平台上进行基于嵌入式Linux的触摸屏驱动程序设计。
硬件实现方案SPI接口是Motorola推出的一种同步串行接口,采用全双工、四线通信系统,S3C2410X是三星推出的自带触摸屏接口的ARM920T内核芯片,ADS7843为Burr-Brown生产的一款性能优异的触摸屏控制器。
本文采用SPI接口的触摸屏控制器ADS7843外接四线电阻式触摸屏,这种方式最显著的特点是响应速度更快、灵敏度更高,微处理器与触摸屏控制器间的通讯时间大大减少,提高了微处理器的效率。
ADS7843与S3C2410的硬件连接如图1所示,鉴于ADS7843差分工作模式的优点,在硬件电路中将其配置为差分模式。
图1触摸屏输入系统示意图嵌入式Linux系统下的驱动程序设备驱动程序是Linux内核的重要组成部分,控制了操作系统和硬件设备之间的交互。
Linux 的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,成为设备文件。
应用程序可以打开、关闭、读写这些设备文件,对设备的操作就像操作普通的数据文件一样简便。
为开发便利、提高效率,本设计采用可安装模块方式开发调试触摸屏驱动程序。
四 ARM9(S3C2440)的ADC和触摸屏控制——理论知识转载自:骨Zi里德骄傲概述10 位CMOS ADC(模/数转换器)是一个8 通道模拟输入的再循环类型设备。
其转换模拟输入信号为10 位二进制数字编码,最大转换率为2.5MHz A/D 转换器时钟下的500 KSPS。
A/D 转换器支持片上采样-保持功能和掉电模式的操作。
触摸屏接口可以控制/选择触摸屏X、Y 方向的引脚(XP,XM,YP,YM)的变换。
触摸屏接口包括触摸屏引脚控制逻辑和带中断发生逻辑的ADC 接口逻辑。
触摸屏接口模式1. 普通转换模式单转换模式是最合适的通用ADC 转换。
此模式可以通过设置ADCCON(ADC 控制寄存器)初始化并且通过读写ADCDAT0(ADC 数据寄存器0)就能够完成。
2. 分离的X/Y 方向转换模式触摸屏控制器可以工作在两个转换模式之一。
方向转换模式如下方法操作。
X 方向模式写X 方向转换数据到ADCDAT0,故触摸屏接口产生中断源给中断控制器。
Y 方向模式写Y 方向转换数据到ADCDAT1,故触摸屏接口产生中断源给中断控制器。
3. 自动(顺序)X/Y 方向转换模式自动(顺序)X/Y 方向转换模式操作如下。
触摸屏控制器顺序变换触摸X 方向和Y 方向。
在自动方向转变模式中触摸控制器在写入X 测量数值到ADCDAT0 和写入Y 测量数值到ADCDAT1 后,触摸屏接口产生中断源给中断控制器。
4. 等待中断模式当笔尖落下时触摸屏控制器产生中断(INT_TC)信号。
等待中断模式设置值为rADCTSC=0xd3; // XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En触摸屏控制器产生中断信号(INT_TC)后,必须清除等待中断模式。
(XY_PST 设置到无操作模式)待机模式当ADCCON [2]被设置为'1'时激活待机模式。
此模式中,停止A/D 转换操作并且ADCDAT0、ADCDAT1 寄存器包含的是先前转换的数据。
三星S3C2410芯片内部集成的LCD驱动控制器滚动屏幕的实现S3C2410X 支持硬件方式的水平和垂直滚屏。
要实现滚屏,可修改LCDSADDR1和LCDSADDR2寄存器中的LCDBASEU和LCDBASEL的值(如图所示)。
但不是通过修改PAGEWIDTH和OFFSIZE来实现。
对于STN类型的LCD,VFRAME和VLINE脉冲的产生取决于于LCDCON2/3寄存器中的HOZV AL和LINEV AL的配置,它们都与LCD屏的大小和显示模式有关。
换句话说,HOZV AL和LINEV AL可由LCD屏与显示模式决定,公式如下:HOZV AL = (水平显示尺寸/有效VD数据队列数)-1彩色显示模式下:水平显示尺寸=3 * 水平像素数在4位但扫描模式下,有效VD数据队列数应为4。
若用4位双扫描模式显示,有效的VD数据队列数也是4,但在8位但扫描模式下,有效的VD数据队列数应为8.单扫描情况:LINEV AL = (垂直显示尺寸)-1双扫描情况:LINEV AL = (垂直显示尺寸/2)-1LCDBASEU:对双扫描LCD:这些位只是帧缓冲区或在双扫描LCD时的上帧缓冲区的开始地址A[21:1]对单扫描LCD:这些位只是帧缓冲区的开始地址A[21:1]LCDBASEL:对双扫描LCD:这些位只是在使用双扫描LCD时的下帧存储区的开始地址A[21:1]对单扫描LCD:这些位只是帧存储区的末地址[21:1]LCDBASEL=((the frame end address)>>1)+1=LCDBASEU+(PAGEWIDTH+OFFSIZE)*(LINEV AL+1)注意:当LCD 控制器启用时,用户可通过改变LCDBSEU和LCDBASEL的值实现滚屏。
但是,在一帧结束时,LCDBASEU和LCDBASEL的值务必不能改变,可参考LCDCON1寄存器中的LINECNT域,因为LCD屏的显示也会出现错误。
Computer Knowledge and Technology 电脑知识与技术多媒体技术及其应用本栏目责任编辑:唐一东第6卷第19期(2010年7月)ISSN 1009-3044Computer Knowledge and Technology电脑知识与技术Vol.6,No.19,July 2010,pp.5321-5322E-mail:eduf@ Tel:+86-551-56909635690964基于S3C2410的触摸屏驱动开发及校准算法何世杰(解放军炮兵学院,安徽合肥230031)摘要:该文基于s3c2410微处理器,开发了嵌入式linux 操作系统的触摸屏驱动程序。
针对一些常见机械性误差,介绍了触摸屏校准算法,并详细讲解了三点校准算法的原理。
适用于嵌入式linux 操作系统的开发,特别是QT ,miniGUI 等图形界面的操作系统。
关键词:S3C2410;LINUX ;触摸屏驱动;三点校准法中图分类号:TP391文献标识码:A 文章编号:1009-3044(2010)19-5321-02S3C2410-based Touch-screen Driver Development and Calibration AlgorithmsHE Shi-jie(Artillery Academy of P.L.A,Hefei 230031,China)Abstract:Base on the s3c2410,this paper design a device drive of touch screen for Linux embedded operating system.Arm to the com -mon mechanical errors,this paper introduce the 3-Points calibration algorithm,which can be useful to the embedded operate system,espe -cial to the QT and miniGUI.Key words:S3C2410;LINUX,touch screen driver;3-Points calibration algorithm在小型化的设备中,输入和输出设备占据了很大的体积,而触摸屏集输入输出于一体,有效的减小了设备的体积;另外,触摸屏使人们摆脱了键盘和鼠标的操作,让人机交互更为直接。
触摸屏在S3C2410上的应用实例[日期:2005-2-27] 来源:单片机及嵌入式系统应用作者:国防科技大学宋成孙广富[字体:大中小]摘要:给出S3C2410上触摸屏的实现原理、硬件结构和软件程序;对软件进行优化,改进软件滤波的实现方法。
其算法使用C语言实现,可移植到任何操作系统的触摸屏驱动程序中。
关键词:触摸屏S3C2410 滤波引言随着个人数字助理(PDA)、瘦容户机等的普及,触摸屏作为终端与用户交互的媒介,在我们的生活中使用得越来普遍。
触摸屏分为电阻式、电容式、声表面波式和红外线扫描式等类型,使用得最多的是4线电阻式触摸屏。
本文以三星公司ARM9内核芯片S3C2410触摸屏接口为基础,通过外接4线电阻式触摸屏构成硬件基础。
在此基础上,开发了触摸屏面图板程序。
1 触摸屏原理S3C2410接4线电阻式触摸屏的电路原理如图1所示。
整个触摸屏由模向电阻比和纵向电阻线组成,由nYPON、YMON、nXPON、XMON四个控制信号控制4个MOS管(S1、S2、S3、S4)的通断。
S3C2410有8个模拟输入通道。
其中,通道7作为触摸屏接口的X坐标输入(图1的AIN[7]),通道5作为触摸屏接口的Y坐标输入(图1的AIN[5])。
电路如图2所示。
在接入S3C2410触摸屏接口前,它们都通过一个阻容式低通滤器滤除坐标信号噪声。
这里的滤波十分重要,如果传递给S3C2410模拟输入接口的信号中干扰过大,不利于后续的软件处理。
在采样过程中,软件只用给特殊寄存器置位,S3C2410的触摸屏控制器就会自动控制触摸屏接口打开或关闭各MOS管,按顺序完成X坐标点采集和Y坐标点采集。
2 S3C2410触摸屏控制器S3C2410触摸屏控制器有2种处理模式:①X/Y位置分别转换模式。
触摸屏控制器包括两个控制阶段,X坐标转换阶段和Y坐标转换阶段。
②X/Y位置自动转换模式。
触摸屏控制器将自动转换X和Y坐标。
本文使用X/Y位置自动转换模式。
3 S3C2410触摸屏编程由于触摸屏程序中参数的选取优化需要多次试验,而加入操作系统试验参数,每次编译下载耗费时间过多,不易于试验的进行,因而我们直接编写裸机触摸屏程序。
三星公司开放了S3C2410测试程序2410test(可在三星网站下载),提供了触摸屏接口自动转换模式的程序范例,见本刊网站。
本文在此范例的基础上编写了触摸屏画图板程序——在显示屏上画出触摸笔的流走痕迹。
针对坐标点采样时产生的噪声,本文采用噪声滤波算法,编写了相应的噪声滤波程序,滤除干扰采样点。
整个触摸屏画图板程序的处理流程如图3所示。
3.1 程序初始化初始化触摸屏控制器为自动转换模式。
其中寄存器ADCDLY的值需要根据具体的试验选取,可运行本文提供的程序看画线的效果来选取具体的参数。
触摸屏中断处理程序Adc_or_ TsAuto是判断触摸屏是否被按下了。
触摸屏被按下,给全局变量Flag_Touch赋值为Touch_ Down,否则赋值为Touch_Up。
初始化脉宽调制计时器(PWM TIMER),选择计时器4为时钟,定义10ms中断1次,提供触摸屏采样时间基准,即10ms触摸屏采样1次。
计数器中断处理程序Timer4Intr 中判断Flag_Touch被赋值为Touch_Down,则给全局变量gTouchStartSample置位,以控制触摸屏采样。
之后清除触摸屏中断和计时器中断屏蔽位,接受中断响应,同时计时器开始计时。
3.2 触摸屏采样程序如果gTouchStartSample为TRUE,触摸屏接口开始对坐标X和Y的模拟量进行采样,根据试验选取适合的的采集次数。
本文中使用9次采集,分别记入到ptx[TouchSample]和pty[T ouchSample]数组中,TouchSample为采集次数。
为了减少运算量,将ptx[]和pty[]分别分三组取平均值,存储在px[3]和py[3]中。
这里以处理X坐标为例:px[0]=(ptx[0]+ptx[1]+ptx[2])/3;px[1]=(ptx[3]+ptx[4]+ptx[5])/3;px[2]=(ptx[6]+ptx[7]+ptx[8])/3;计算以上三组数据的差值:dlXDiff0=px[0]-px[1];dlXDiff1=px[1]-px[2];dlXDiff2=px[2]-px[0];然后对上述差值取绝对值,所得结果简称绝对差值:dlXDiff0=dlXDiff0>0dlXDiff0:-dlXDiff0;dlXDiff1=dlXDiff1>0dlXDiff1:-dlXDiff1;dlXDiff2=dlXDiff2>0dlXDiff2:-dlXDiff2;判断上述计算的色对差值是否都超过差值门限,如果这3个绝对差值都超过门限值,判定这次采样点为野点,抛弃采样点,程序返回等待下次采样。
其中的差值门限需要根据试验测试得到,本文取值为2。
找出其中绝对差值最小的2组数据,再将它们作平均,同时赋值给tmx:if(dlXDiff0<dlXDiff1){if(dlXDiff2<dlXDiff0){tmx=((px[0]+px[2]>>1);}else{tmx=((px[0]+px[1])>>1);}}else if(dlXDiff2<dlXDiff1){tmx=((px[0]+px[2])>>1);}else{tmx=((px[1]+px[2])>>1);}图3函数Touch_Coordinate Conversion完成触摸屏采样值转换成显示坐标,根据不同的硬件有不同的转换方法。
本触摸屏采样坐标及显示坐标如图4、图5所示。
其中TOUCH_MA X_X和TOUCH_MIN_X是触摸屏X坐标采样值的最大和最小值;Y坐标同理。
可以运行本文程序,同时使用触摸笔在触摸屏的4个角取得最大最小采样值。
这里使用的是320×240的T FT屏,所以TOUCH_X值为320。
下面是X坐标的转换程序:Touch_CoordinateConversio(int*px){TmpX=(tmx>=TOUCH_MAX_X)(TOUCH_MAX_X):*px;TmpX-=TOUCH_MIN_X;TmpX=(TmpX)TmpX:0;*px=(TmpX*TOUCH_X)/(TOUCH_MAX_X-TOUCH_MIN_X);}坐标滤波程序坐标滤波程序Touch_Pen_filtering,考虑人机界面中对触摸屏的操作有3种:*触摸笔在触摸屏上的位置不变;*触摸笔在触摸屏上连续滑过;*触摸笔在触摸屏上有大幅度的跳跃。
假设三次连续采样时刻为T1、T2、T3(T3>T2>T1),采样间隔为10ms。
由于采样间隔远小于人的反应时间,所以在前两种操作模式下,如果采样点有效,将T1和T3时刻的采样值作平均。
其平均值和T2时刻的采样值比较一般不会大于某个门限,否则判定此次采样点为野点。
而对于第三种模式下,采样点数据会有很大的跳变。
跳变过程中的数据是不稳定的,虽然记入了数据,但被判定成无效的采样点,所以需要在程序中定义一个静态数组x[2]记录相邻的两次采样数据。
只有当前后数据持续稳定一段时间,才认为这时的采样点有效。
程序中使用的间隔门限FILTER_LIMIT是需要经过试验来选取的。
这里只给出X坐标的滤波过程。
//*px为T3时刻的采样值,count是记录连续有效采样点次数的静态变量,标志当前数据持续稳定时间,一旦发现大于//FILTER_LIMIT,count的值又要从0开始计数。
Int Touch_Pen_filtering(int *px){BOOL retVal;Static int count=0;count++;//如果连续有效采样点次数大于2次,开始进行滤波算法if(count>2){count=2;//将T3时刻采样值和T1时刻采样值作平均TmpX=(x[0]+*px)/2;//计算平均值和T2时刻采样值的差值dx=(x[1]>TmpX)(x[1]-TmpX):(TmpX-x[1]);//如果差值大于门限值,说明T3的采样值无效,判为野点返回值为FALSE。
为了避免过大的跳跃,认为触摸笔坐标沿变,使用T2时刻采样值来代替本次采样点,同时静态变量x[]中的数据不变,count重新开始记录连续有效采样点次数if((dx>FIL TER_LIMIT)){*px=x[1];retVal=FLASE;count=0;}//否则采样点有效返回值为TRUE,将T3的采样点记入到x[1]中,T2的采样点移到x[0]中else{x[0]=x[1];x[1]=*px;retVal=TRUE;}}else{//连续有效采样次数小于2,将T3的采样值记入到x[1],T2的采样值移动到x[0],并不进行滤波处理x[0]=x[1];x[1]=*px;retVal=FLASE;}return retVal;}3.4 后续处理经过上述的筛选和滤波,如果被判定采样值有效,则将其滤波值送给操作系统进行后续处理,否则程序返回,等待下一次采样。
在2410 test程序中,可以结合LCD的画点函数,将有效的采样点在LCD上画出,以此检验参数设置是否合理。
结语本文以三星公司ARM9内核芯片S3C2410和4线电阻式触摸屏为硬件基础。
基于此硬件结构,开发了触摸屏画图板程序。
通过软件滤波,提高了系统性能,得到了很好的处理效果,有很强的实用性。
用此算法实现的Windows CE触摸屏驱动,在汉王手写输入软件的测试下得到了很高的识别率。
软件使用C语言实现,可以方便地移植到任何操作系统上。