mini2440硬件篇之ADC触摸屏
扫描二维码
随时随地手机看文章
1.1.ADC知识
ADC(AnalogtoDigitalConverter),可以接收8个通道的模拟信号输入,并将它们转换为10位的二进制。在2.5MHz的A/D转换时钟下,最大转化速率可达500KSPS(SPS:samplespersecond,每秒采样次数)。
1.2.触摸屏硬件知识
触摸屏是当今最流行的一种人机交互接口,它被广泛地应用于手机等消费类电子产品中,目前这种技术有向PC机方向发展的趋势。基于原理的不同,触摸屏可以分为电阻式、电容式、表面声波式等。电阻式是应用较广的一种触摸屏,它的原理是通过测量横向和纵向的电阻值来获得触点的坐标。
1.3.电阻式触摸屏工作原理原理
触摸屏附着在显示器的表面,与显示器相配合使用,如果能测量出触摸点在屏幕上的坐标位置,则可根据显示屏上对应坐标点的显示内容或图符获知触摸者的意图。触摸屏按其技术原理可分为五类:矢量压力传感式、电阻式、电容式、红外线式、表面声波式,其中电阻式触摸屏在嵌入式系统中用的较多。电阻触摸屏是一块4层的透明的复合薄膜屏,如图2所示,最下面是玻璃或有机玻璃构成的基层,最上面是一层外表面经过硬化处理从而光滑防刮的塑料层,中间是两层金属导电层,分别在基层之上和塑料层内表面,在两导电层之间有许多细小的透明隔离点把它们隔开。当手指触摸屏幕时,两导电层在触摸点处接触。
触摸屏的两个金属导电层是触摸屏的两个工作面,在每个工作面的两端各涂有一条银胶,称为该工作面的一对电极,若在一个工作面的电极对上施加电压,则在该工作面上就会形成均匀连续的平行电压分布。如图4所示,当在X方向的电极对上施加一确定的电压,而Y方向电极对上不加电压时,在X平行电压场中,触点处的电压值可以在Y+(或Y-)电极上反映出来,通过测量Y+电极对地的电压大小,便可得知触点的X坐标值。同理,当在Y电极对上加电压,而X电极对上不加电压时,通过测量X+电极的电压,便可得知触点的Y坐标。电阻式触摸屏有四线和五线两种。四线式触摸屏的X工作面和Y工作面分别加在两个导电层上,共有四根引出线,分别连到触摸屏的X电极对和Y电极对上。五线式触摸屏把X工作面和Y工作面都加在玻璃基层的导电涂层上,但工作时,仍是分时加电压的,即让两个方向的电压场分时工作在同一工作面上,而外导电层则仅仅用来充当导体和电压测量电极。因此,五线式触摸屏的引出线需为5根。
1.4.S3C2440触摸屏接口
SOCS3C2440的触摸屏接口是与ADC接口结合在一起的,框图如下:
转换速率:当PCLK=50MHz时,分频设为49,则10位的转换计算如下:
WhentheGCLKfrequencyis50MHzandtheprescalervalueis49,
A/Dconverterfreq.=50MHz/(49+1)=1MHz
Conversiontime=1/(1MHz/5cycles)=1/200KHz=5us
ThisA/Dconverterwasdesignedtooperateatmaximum2.5MHzclock,sotheconversionratecangoupto500KSPS.
触摸屏接口的模式有以下几种:
普通ADC转换模式
独立X/Y位置转换模式
自动X/Y位置转换模式
等待中断模式
我们主要接受触摸屏接口的等待中断模式和自动X/Y位置转换模式(驱动程序中会用到):
自动转换模式操作流程如下:触摸屏控制器自动转换X,Y的触摸位置,当转换完毕后将数据分别存放在寄存器ADCDAT0和ADCDAT1.并产生INT_ADC中断通知转换完毕。
等待中断模式:
TouchScreenControllergeneratesinterrupt(INT_TC)signalwhentheStylusisdown.WaitingforInterruptModesettingvalueisrADCTSC=0xd3;//XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En.
当触摸后,触摸屏控制器产生INT_TC中断,四个引脚设置应该为:
引脚
XP
XM
YP
YM
状态
PULLUP/XPDisable
Disable(初始值即是)
Disable
Enable
设置
1
0
1
1
当中断产生后,X/Y的位置数据可以选择独立X/Y位置转换模式,和自动X/Y位置转换模式进行读取,采用自动X/Y位置转换模式进行读取需要对我们已经设置的TSC寄存器进行更改,在原有的基础上或上S3C2410_ADCTSC_PULL_UP_DISABLE|S3C2410_ADCTSC_AUTO_PST|S3C2410_ADCTSC_XY_PST(0)。
数据转换完毕后,也会产生中断。
2.芯片手册
3.mini2440电路图
4.S3C2440寄存器
ADCCONADC控制寄存器
主要设置分频,通道选择,有8路(AIN0~AIN3YMYPXMXP),启动A/D转换等。
ADCTSC触摸屏控制寄存器
设置工作模式,普通ADC转换模式、独立X/Y位置转换模式、自动X/Y位置转换模式、等待中断模式。
ADCDLY延迟寄存器
可以设置开始中断到真正开始A/D转换这段时间的延时长度,它的时钟源频率为3.68MHz。
ADCDAT0/ADCDAT1
X轴坐标值写入寄存器ADCDAT0的低10位中,Y轴坐标写入寄存器ADCDAT1的低10位中。
ADCUPDN抬起/落下
触笔抬起/落下中断状态寄存器ADCUPDN的低2位能够判断触笔在何种状态下引起的中断。
touch.h
[cpp]view plaincopy
/*******************************************************************
*Copyright(C),2011-2012,XXX.
*FileName:touch.c
*Author:HuangYinqing
*Version:1.0
*Date::2012-04-22
*Description:触摸屏驱动(中断方式).
*FunctionList:
*History:
******************************************************************/
#ifndef__TOUCH_H__
#define__TOUCH_H__
#defineADC_FREQ2500000//==ADC转换频率2.5M
#defineADC_PRS(50000000/ADC_FREQ-1)//==ADC预分频值
#defineADC_DELAY50000//==(1/50M)*50000=1ms
#defineDBG_TOUCH_LEVEL1
/*函数声明*/
voidTouchInit(void);
#endif
touch.c
[cpp]view plaincopy
/*******************************************************************
*Copyright(C),2011-2012,XXX.
*FileName:touch.c
*Author:HuangYinqing
*Version:1.0
*Date::2012-04-22
*Description:触摸屏驱动(中断方式).
*FunctionList:
*History:
******************************************************************/
#include"common.h"
#include"core.h"
#include"touch.h"
intxdata,ydata;//==坐标数据
/********************************************************************
函数功能:触摸屏中断函数。
入口参数:无。
返回:无。
备注:无。
********************************************************************/
staticvoid__irqTouchIntHandler(void)
{
staticunsignedlongulSaveAdcdly;
rSRCPND|=BIT_ADC;//清除这两个中断才能产生新的中断
rINTPND|=BIT_ADC;
/*转换完成中断*/
if(rSUBSRCPND&BIT_SUB_ADC)
{
rSUBSRCPND|=BIT_SUB_ADC;//清除子中断
while(!(rADCCON&0x8000));//checkifEC(EndofConversion)flagishigh,Thislineisnecessary~!!
xdata=(rADCDAT0&0x3ff);
ydata=(rADCDAT1&0x3ff);//[0..9]做转换后的数据A
DbgPrintX(DBG_TOUCH_LEVEL,"rx:%d;y:%dn",xdata,ydata);
rADCTSC=0xd3;//Waitingforinterrupt
rADCTSC=rADCTSC|(1<<8);//Detectstylusupinterruptsignal.
}
/*笔按下中断*/
if( r