TQ2440裸板---adc_lcd触摸屏模数转换(详细注释)

#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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值