韩伟峰
(合肥工业大学仪器科学与光电工程学院,安徽 合肥 230009)
0 引言
近年来,随着材料科学和智能设备的发展,触控设备越来越受到人们的喜爱,成为时代的潮流。究其原因,触摸屏有以下优点:易于交流、坚固耐用、反应速度快等。S3C2440A是一款基于ARM920T内核的高性能嵌入式控制芯片,采用0.13um的CMOS标准宏单元和存储器单元,内部含有A/D转换器和LCD控制器,可以编程LCD控制器来支持不同涉及数据接口的数据线宽度、接口时序和刷新率的需要。
本文研究在S3C2440A平台下使用A/D转换器及LCD控制器驱动触摸屏显示的技术。
1 触摸屏接口及A/D转换器工作原理
S3C2440A集成4线制电阻式触摸屏接口,触点坐标检测是通过A/D转换来实现。A/D转换器支持片上采样-保持功能和掉电模式的操作。
触摸屏接口可以控制/选择触摸屏X、Y方向的引脚(XP,XM,YP,YM)的变换,触摸屏接口包括触摸屏引脚控制逻辑和带中断发生逻辑的ADC接口逻辑。
触摸屏控制器可工作在分离的X/Y方向转换模式之一,X方向模式写X方向转换数据到ADCDAT0。Y方向模式写Y方向转换数据到ADCDAT1。等待中断模式是在触笔落下时产生一个中断,A/D触摸屏控制寄存器ADCTSC的值应为0XD3,在系统响应中断后,XY坐标的测量模式必须为无操作模式。在一般情况下,为实现触摸屏功能,先设置为等待中断模式,产生中断后,设置为自动XY坐标转换模式,依次读取触点坐标值。在等待中断模式下,上拉电阻需要有效状态,在触发中断后,上拉电阻需要在无效状态。
2 LCD控制器工作原理
S3C2440A的LCD控制器由从位于系统存储器的视频缓冲区到外部LCD驱动器的转移LCD图像数据逻辑组成。其支持1位每像素、2位每像素、4位每像素和8位每像素的调色TFT彩色LCD面板连接,另外,通过使用基于时间的抖动算法和帧频控制(FRC)方法,可以连接到8位每像素(256色)的彩色LCD面板和连接到12位每像素(4096色)的STN LCD。LCD控制器有一个支持从位于系统存储器的视频缓冲器接收图像数据的专用DMA,以上两种类型LCD都具有以下的功能:
(1)专用中断功能(INT_FrSyn和INT_FiCnt);
(2)使用系统存储器作为显存;
(3)支持多种虚拟平(支持硬件水平及垂直滚动);
(4)可编程不同显示面板的时序控制。
S3C2440A LCD控制器是用于传输视频数据和产生必要的控制信号,如VFRAME、VLINE等等。除了控制信号之外,S3C2440A还有视频数据的数据端口。通过使用专用DMA,可以在屏幕上显示视频数据而不需CPU介入。VIDPRCS接收来自LCDCDMA的视频数据并且在将其变换为适当格式后通过VD[23:0]数据端口发送视频数据到LCD驱动器。TIMEGEN由可编程逻辑组成来支持发现不同LCD驱动器的一般接口时序和速率的变化需要。
3 S3C2440A触摸屏接口设计
本设计采用5.6寸TFT LCD显示器+触摸屏,分辨率640*480。
在开始实现触摸屏前,要对其校正。触摸屏和LCD是两种不同的物理器件。触摸屏处理的数据是点的物理坐标,该坐标是通过触摸屏控制器采集到的。想实现触摸屏上的物理坐标与LCD上的像素点坐标一一对应,两者就需要一定的转换,即校正。较常见的校正方法是三点校正法,其原理是:
设LCD上每个点PD的坐标为[XD,YD],触摸屏上每个点PT的坐标为[XT,YT]。要实现触摸屏上的坐标转换为LCD上的坐标,需下列公式进行转换:XD=A×XT+B×YT+C;YD=D×XT+E×YT+F。其中一共有六个参数(A,B,C,D,E,F),因此只需三个取样点就可以求得这六个参数。这六个参数确定下来,只要给出任意触摸屏上的坐标点PT,代入这个公式,就可得到它所对应的LCD上像素点的坐标PD。
4 软件设计
下面是实现触摸屏功能的简单实例,即以触点为中心绘制出一个红色的边长为10个像素的正方形。触点坐标用下面方法得到:触笔落下时,进入中断,读取触点坐标,直到触笔抬起,退出该次中断。由于触摸屏需校正,因此使用之前需进行校正处理。这里,利用EEPROM来保存这几个参数,即A,B,C,D,E,F,K分别保存在以0x20,0x30,0x40,0x50,0x60,0x70,0x80为首地址内存的连续4个字节空间内。校正时,需要三个取样点,在这里选取LCD上的(32,24),(160,216),(288,120)为这三个取样点,只需依次点击这三点,即可完成触摸屏校正。
void TSCal(void)
{
int i=0;
int xt[3],yt[3];
Brush_Background(0,0,LCD_WIDTH,LCD_HEIGHT,0xFFFFFF);
drawCross(32,24,0xFF0000);
Draw_ASCII(36,28,0xFF0000,one);
drawCross(160,216,0xFF0000);
Draw_ASCII(164,220,0xFF0000,two);
drawCross(288,120,0xFF0000);
Draw_ASCII(292,124,0xFF0000,three);
for(i=0;i<3;i++)
/* 依次读取三个采样点的坐标值 */
{
while(flagTS==0)
delay(500);
xt[i]=xdata;
yt[i]=ydata;
flagTS=0;
}
/*计算参数*/
K=(xt[0]-xt[2])*(yt[1]-yt[2])-(xt[1]-xt[2])*(yt[0]-yt[2]);
A=(32-288)*(yt[1]-yt[2])-(160-288)*(yt[0]-yt[2]);
B=(xt[0]-xt[2])*(160-288)-(32-288)*(xt[1]-xt[2]);
C=yt[0]*(xt[2]*160-xt[1]*288)+yt[1]*(xt[0]*288-xt[2]*32)+yt[2]*(xt[1]*32-xt[0]*160);
D=(24-120)*(yt[1]-yt[2])-(216-120)*(yt[0]-yt[2]);
E=(xt[0]-xt[2])*(216-120)-(24-120)*(xt[1]-xt[2]);
F=yt[0]*(xt[2]*216-xt[1]*120)+yt[1]*(xt[0]*120-xt[2]*24)+yt[2]*(xt[1]*24-xt[0]*216);
}
5 结束语
本文详细分析了S3C2440A芯片的A/D转换器和LCD控制器工作原理,介绍了触摸屏的接口设计,设计了电路板,最后以此为基础给出了软件程序设计。
[责任编辑:刘展]