⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ts.c

📁 UC/OS-II移植到s3c2440代码
💻 C
字号:
#include "config.h"

int32 TX;
int32 TY;
int32 isDown;
OS_EVENT *TouchMbox;

void TSIrqISR(void)
{
	int i;
	uint32 Pt[6];
	rINTSUBMSK |= (BIT_SUB_ADC|BIT_SUB_TC);	//禁止ADC中断 
	if(rADCDAT0 & 0x8000)					//处于抬起状态
	{//抬起
		isDown = 0;
		rADCTSC &= 0xff;	//抬起中断,YM使能,YP无效,XM使能,XP无效,上拉无效,自动切换X、Y,等待中断模式
		TX = -1;
		TY = -1;			//抬起触笔时,TX,TY要值成不大于0的数
    }
    else //按下
    {
		isDown = 1;
		//   按下中断,YM无效,YP使能,XM无效,XP无效,上拉电阻无效,正常模式,X模式
		rADCTSC=(0<<8)|(0<<7)|(0<<6)|(1<<5)|(1<<4)|(1<<3)|(0<<2)|(1);
		for(i=0;i<LOOP;i++);            //delay to set up the next channel
		for(i=0;i<5;i++)				//转换5次
		{
			rADCCON|=0x1;               // 开始AD转换,YP使能,YM、XP、XM无效,模拟通道XP输入
			while(rADCCON & 0x1);       // 等待转换开始,转换开始时,开始位自动清零
			while(!(0x8000&rADCCON));   // 等待AD转换结束
			Pt[i]=(0x3ff&rADCDAT0);		// 读取AD转换结果
		}
		Pt[5]=(Pt[0]+Pt[1]+Pt[2]+Pt[3]+Pt[4])/5;//多次采样取平均值
		TX = Pt[5];
		//按下中断,YM无效,YP无效,XM无效,XP使能,上拉电阻无效,正常模式,Y模式
		rADCTSC=(0<<8)|(0<<7)|(1<<6)|(1<<5)|(0<<4)|(1<<3)|(0<<2)|(2);
		for(i=0;i<LOOP;i++);
		for(i=0;i<5;i++)				//转换5次
		{
			rADCCON|=0x1;               //开始转换
			while(rADCCON & 0x1);       //等待转换开始
			while(!(0x8000&rADCCON));   //等待转换结束
			Pt[i]=(0x3ff&rADCDAT1);		//读取AD转换结束
		}
		Pt[5]=(Pt[0]+Pt[1]+Pt[2]+Pt[3]+Pt[4])/5;// 多次采样取平均值
 
		TY = Pt[5];
		//   抬起中断,YM使能,YP无效,XM使能,XP无效,上拉使能,正常模式,等待中断模式
		rADCTSC=(1<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);
}
    //cprintf("%d,%d\n",TX,TY);
	OSMboxPost(TouchMbox, 0);			//向处理触摸进程发消息
	rSUBSRCPND |= BIT_SUB_TC;			//清除子中断
	rINTSUBMSK &= ~(BIT_SUB_TC);     	//不屏蔽子中断
	ClearPending(BIT_ADC);     			//清除中断
}

void TsInit(void)
{
/*
设置唤醒延迟 50000
设置中断控制器 1.预分频使能=6;2.选择模拟通道XP 3.禁止Standby;4.禁止read_start;5.不开始转换
设置触摸屏控制器 1.检测按下 2.YM输出使能,YP输出禁止 3.XM输出禁止、XP输出禁止 4.使能上拉 5.正常转换模式 6.等待中断模式
中断向量赋值
开ADC中断、开TC子中断
*/
	OS_EVENT *TouchMbox=OSMboxCreate(NULL);		//初始化消息邮箱为空
	rADCDLY = (50000); 
	rADCCON = (1<<14)|(27<<6)|(7<<3)|(0<<2)|(0<<1)|(0);
	rADCTSC = (0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);
	VICVectAddr[31] = (uint32)TSIrqISR;
	rINTMSK &= ~(BIT_ADC);
	rINTSUBMSK &= ~(BIT_SUB_TC);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -