基于ARM处理器的TSC2046触摸屏控制器的应用0引言随着信息技术的不断发展,嵌入式系统正在越来越广泛地应用到消费类电子、通信设备等便携式电子类产品中。触摸屏由于其轻便、占用空间少、灵活等优点,已经逐渐取代键盘,成为嵌入式系统中最简单、方便、自然的一种人机交互方式。触摸屏分为电阻、电容、表面声波、红外线扫描等类型。其中使用最多的是四线或五线电阻触摸屏。四线电阻触摸屏是由两个透明电阻膜构成的,在它的水平和垂直电阻网上施加电压,就可通过转换面板在触摸点测量出电压而对应出坐标值。TSC2046是典型的逐次逼近寄存器型A/D变换器,其结构以电容再分布为基础,包含了取样/保持功能,支持低电压的I/0接口。本文介绍了利用飞利浦公司的LPC2100系列ARM芯片LPC2132、TSC2046和液晶屏实现人机互动。l触摸屏的工作原理[1屯]本文选用的触摸屏为四线电阻触摸屏,由一个4层的复合薄膜,附着在显示器表面与显示器配合使用。每一导电层为触摸屏的一个工作面,每个工作面的两端各涂一条银胶,称为该工作面的一对电极,分别称为X电极对和Y电极对。触摸屏工作时,上下导体层相当于电阻网络。当某一层电极加上电压时,会在该网络上形成电压梯度。如有外力使得上下两层在某一点接触,则在电极未加电压的另一层可以测得接触点处的电压,从而知道接触点处的坐标。比如,在顶层的电极(X+,X一)上加上电压,则在顶层导体层上形成电压梯度,当有外力使得上下两层在某一点接触,在底层就可以测得接触点处的电压,再根据该电压与电极(X+)之间的距离关系,知道该处的X坐标。然后,将电压切换到底层电极(Y+,Y一)上,并在顶层测量接触点处的电压,便可得知触摸者的意图。测量触点坐标电原理图如图1所示。2TSC2046的工作方式和控制字TSC2046的输入方式分差分输入和单端输入两种,可设置为8位或12位工作模式。本文以12位差分输入模式进行工作。TSC2046的控制字如表1所示。表1中S为数据传输起止标志位,该位值恒为“1”。A2--,A0用于对TSC2046输入通道的选择,确定触摸屏体输出模拟电压从哪个引脚输入。MODE用于确定A/D转换的精度,为0时选择12位,为1时选择8位。SER/DFR确定输入模式,为0时选择差分模式,为1时选择单端模式。差分模式是一种比率度量转换方式,转换的结果总是触摸屏上分布的电阻值百分比,差分模式能有效消除内部开关电阻带来的转换误差‘3‘。相应的差分输入模式下的输入配置如表2所示‘引。3典型应用LPC2132是飞利浦公司的一款基于支持实时仿真的16/32位ARM7TDMl一SCPU的微控制器芯片,并带有16KBSRAM和64kB嵌入的高速FLASH存储器,内置了宽范围的串行通信接口(范围从多个UART,SPI和SSP到两条12C总线)、多个32位和16位定时器、1个改良的10位ADC、所有定时器上输出匹配的PWM特性、以及具有多达13个边沿或电平触发的外部中断管脚的32条高速GPIO线等硬件资源‘5一引。LPC2132的最小系统设计如图2所示。LPC2132芯片操作电压为3.0~3.6V,本系统采用3.3V供电,便于供电电压统一。晶振采用常规直插晶振11.0592MHz。由于LPC2132芯片的高速度、低功耗、低工作电压导致其噪声容限低,对电源的纹波、瞬态响应性能、时钟源的稳定性、电源监控等诸多方面的要求较高。本系统的复位电路采用微处理器专用的电源监控芯片STM811,如图2所示。该芯片在初次上电和系统电压小于3V时会输出复位信号,同时此芯片不需要任何外围电路,且带有手动复位功能。本系统外设只有一个就是TSC2046。LPC2132和触摸屏控制器连接如图3所示,SCK0引脚为SPI时钟,MOSI引脚为SPI主机输出从机输入,MISO引脚为SPI主机输入从机输出,这三根线为SPI总线。2046一CS为TSC2046的片选引脚,PENIRQ为笔中断信号,CZ6为触摸屏连接口。4程序设计本文的驱动程序以上面所设计的硬件为基础。TSC2046的驱动程序通过标准SPI(SerialPeripheralInterface)协议和LPC2132通信。当触摸屏被按下(即有触摸事件发生)时,则TSC2046通过PENIRQ中断引脚向LPC2132发中断请求。LPC2132接到请求后,应延时一下再响应其请求,目的是为了消除抖动使得采样更准确。也可以尝试3次采样取最后一次结果为准,目的也是为了消除抖动。LPC2132驱动触摸屏工作的程序流程如图4所示。采用中断方式处理来自TSC2046的PENIRQ中断引脚的中断申请,在主程序中要设置相应的中断源。在实际应用中,采用查询PENIRQ中断引脚电平的方式,比较节省系统资源。根据TSC2046的Datasheet[q,TSC2046的控制字及数据传输格式见表1。选择控制字如下:0x94,即从触摸屏的“X+”引脚得到y坐标的AD值;0xe4,从触摸屏的“Y+”引脚得到X坐标的AD值。触摸屏的相关驱动程序如下:volatileuint8Receive_dat;volatileuint8Receive_flag}SPI初始化程序如下://接收数据//接收数据标志位voidSPLINIT(void){PINSELO=(PINSELO&0xffff00ff)10x00005500;//设置引脚连接SPCCR=0x52;//设置SPI时钟分频SPCR=(17)I(O6)『(15)I(14)l(03);//SPI控制寄存器设置}SPI发送数据程序如下:uint8SPI—SendData(uint8dat){IOCI。R一2046一CS;//片选TSC2046SPI—SPDR=dat;while(!(SPI—SPSR&0x80));IOSET一2046一CS;retrun(SPLSPSR);}SPI中断程序如下:voidirqSPI—IRQ(void){uint32temp_dat;temp_dat=SPSR//清除SPIF位Receive_dat=SPDR;//接收数据Receive_flag=1;//接收到新数据标志位置位SPINT=1;//清除标志位VICvectAddr=0‘)5结语本文以ARM处理器的LPC2132芯片和TSC2046触摸屏控制器为硬件平台,设计了嵌入式系统触摸屏交互功能模块,此方法已经在实际项目中应用,触摸响应效果良好。