#define GLOBAL_CLK 1
#include "uart.h"
#include <stdlib.h>
#include <string.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#define ADC_FREQ 2500000
#define ADCPRS ((50000000/ADC_FREQ)-1)
volatile U32 prescaler;
int xdata, ydata, temp;
int count=1;
void __irq AdcTsAuto(void)
{
U32 saveAdcdly;
//保存延时的时间
saveAdcdly = rADCDLY;
//初始化先禁止
rADCTSC = (1<<3)|(1<<2);
//设置延时的时间
rADCDLY = 50000;
//开始启动转换
rADCCON |= 0x1
//是否开启成功;
while(rADCCON & 0x1);
//是否转换成功
while(!(rADCCON & 0x8000));
while( !(rSRCPND & (1<<31)));
//读取
xdata = (rADCDAT0 & 0x3ff);
ydata = (rADCDAT1 & 0x3ff);
rSUBSRCPND |=(1<<9);
rSRCPND |= (1<<31);
rINTPND |= (1<<31);
rINTSUBMSK &= ~(1<<9);
rINTMSK &= ~(1<<31);
//设置触屏中断模式,手册建议的
rADCTSC = 0xd3;
//检测弹起的状态
rADCTSC |= (1<<8);
while(1)
{
if(rSUBSRCPND & (1<<9))
{
break;
}
}
xdata *= 0.272;
ydata *= 0.480;
ydata = 480-ydata;
temp = ydata;
ydata = xdata;
xdata = temp;
xdata = (xdata-20.0303)/0.8957;
ydata = (ydata-37.86667)/0.7486;
uart_printf("conut= %d XP=%04d YP=%04d\n",count++, xdata, ydata);
//重新设置延时的时间
rADCDLY = saveAdcdly;
//在屏幕上按下,触发中断信号
rADCTSC &= ~(1<<8);
rSUBSRCPND |=(1<<9);
rSRCPND |= (1<<31);
rINTPND |= (1<<31);
rINTSUBMSK &= ~(1<<9);
rINTMSK &= ~(1<<31);
}
void test_touchscreen(void)
{
//设置延时
rADCDLY =50000;
//设置使能预分频 | 预分频的数值
rADCCON = (1<<14)|(ADCPRS<<6);
uart_printf("\n touchscreen test\n");
pISR_ADC=(int)AdcTsAuto;
rSUBSRCPND |= (1<<9);
rSRCPND |= (1<<31);
rINTPND |= (1<<31);
rINTMSK &= ~(1<<31);
rINTSUBMSK &= ~(1<<9);
//设置触屏ADC转换中断模式,手册建议的
rADCTSC = 0xd3;
uart_printf("Stylus down ,please.....\n");
uart_printf("press any key quit\n");
uart_getch();
rINTMSK |= (1<<31);
rINTSUBMSK |= (1<<9);
}
void Main(void)
{
init_uart();
test_touchscreen();
while(1);
}
TQ2440裸板---adc_lcd触摸屏模数转换(详细注释)
最新推荐文章于 2018-02-28 11:38:56 发布