嵌入式- 触摸屏实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

触摸屏实验

实验目的:了解ARM处理器触摸屏的处理机制,掌握在S3C2440A平台下进行触摸屏应用编程需要完成的任

实验器材:Sinosys-EA2440实验箱PC机

实验原理:触摸屏的4 根信号线直接和S3C2440A 的TSYM、TSYP、TSXM 和TSXP 四个引脚相连,由S3C2440A 内部来控制电平的转换和AD 的转换测量。触摸屏的硬件连接图如图1.1:

图1.1 触摸屏信号连接图

s3c2440 一共有4 种触摸屏接口模式,其中,自动(连续)XY 坐标转换模式和等待中断模式应用地比较常见。等待中断模式是在触笔落下时产生一个中断,在这种模式下,A/D 触摸屏控制寄存器ADCTSC 的值应为0xD3,在系统响应中断后,XY 坐标的测量模式必须为无操作模式,即寄存器ADCTSC 的低两位必须清零。自动(连续)XY 坐标转换模式是系统依次转换触点的X 轴

坐标和Y 轴坐标,中X 轴坐标值写入寄存器ADCDAT0 的低10 位中,Y 轴坐标写入寄存器ADCDAT1的低10 位中,在这种模式下,系统同样会产生中断信号。在一般情况下,为实现触摸屏功能,先是设置为等待中断模式,在产生中断后,再设置为自动(连续)XY 坐标转换模式,依次读取触点的坐标值。

实验总结:利用ADS1.2 工具(ADS 工具的使用请参照前面的实验)打开“\SourceCode\Interface\touchpanel_test”的工程文touchpanel_test.mcp 工程文件。在Touchpanel.c 的

Test_Touchpanel 子函数中对触摸屏相关的寄存器进行设置和初始化。

rADCDLY=50000; //Normal conversion mode delay about

(1/3.6864M)*50000=13.56ms

rADCCON=(1<<14)+(ADCPRS<<6); //ADCPRS En, ADCPRS Value Uart_Printf("ADC touch screen test\n");

rADCTSC=0xd3; //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En pISR_ADC = (int)AdcTsAuto;//指定触摸屏中断的入口地址rINTMSK=~BIT_ADC; //ADC Touch Screen Mask bit clear rINTSUBMSK=~(BIT_SUB_TC);

触摸屏中断服务程序在对寄存器进行设置和指定中断服务程序

的入口地址后,程序进入等待状态,当用触摸笔点按触摸屏时,处理器接受中断,并进入中断服务程序的执行。中断服务程序源码如下:

int i; U32 saveAdcdly;

if(rADCDAT0&0x8000)

{

//Uart_Printf("\nStylus Up!!\n");

rADCTSC&=0xff; // Set stylus down interrupt bit }

rADCTSC=(1<<3)|(1<<2); //Pull-up disable, Seq. X,Y postion measure.

saveAdcdly=rADCDLY;

rADCDLY=40000; //Normal conversion mode delay about

(1/50M)*40000=0.8ms

rADCCON|=0x1; //start ADC 启动AD 转换

while(rADCCON & 0x1); //check if Enable_start is low

while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high, This line is

necessary~!!

while(!(rSRCPND & (BIT_ADC))); //check if ADC is finished with interrupt bit

xdata=(rADCDAT0&0x3ff);//AD 转换结束后得到(x,y)坐标ydata=(rADCDAT1&0x3ff);

//YH 0627, To check Stylus Up Interrupt.

rSUBSRCPND|=BIT_SUB_TC;

ClearPending(BIT_ADC);

rINTSUBMSK=~(BIT_SUB_TC);

rINTMSK=~(BIT_ADC);

rADCTSC =0xd3; //Waiting for interrupt

rADCTSC=rADCTSC|(1<<8); // Detect stylus up interrupt signal. while(1) //to check Pen-up state {

if(rSUBSRCPND & (BIT_SUB_TC)) //check if ADC is finished with interrupt bit

{

//Uart_Printf("Stylus Up Interrupt~!\n");

break; //if Stylus is up(1) state

} } //等待直到触摸笔离开触摸屏时往串口输出坐标值

Uart_Printf("count=%03d XP=%04d, YP=%04d\n",

count++, xdata, ydata);

rADCDLY=saveAdcdly;

rADCTSC=rADCTSC&~(1<<8); // Detect stylus Down interrupt signal. rSUBSRCPND|=BIT_SUB_TC; rINTSUBMSK=~(BIT_SUB_TC); ClearPending(BIT_ADC);

通过DNW软件将程序下载到实验箱中,点击触摸屏,可以在图上观察到不同坐标的变化,如图1.3

相关文档
最新文档