码迷,mamicode.com
首页 > 其他好文 > 详细

[国嵌攻略][063][电阻屏驱动程序设计]

时间:2015-11-24 16:10:51      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

/********************************************************************
*名称:touchscreen.c
*作者:D
*时间:2015.11.23
*功能:
*	触摸屏驱动,由于MINI2440采用一线触控,而非四线电阻触控所以触摸屏
*	驱动无法使用。
********************************************************************/

/********************************************************************
*宏定义
********************************************************************/
#define INTMSK ( (*(volatile unsigned long *)0X4A000008) )      //中断掩码寄存器
#define INTSUBMSK ( (*(volatile unsigned long *)0X4A00001C) )   //子中断掩码寄存器

#define ADCCON ( (*(volatile unsigned long *)0x58000000) )   //ADC控制寄存器
#define ADCTSC ( (*(volatile unsigned long *)0x58000004) )   //ADC触摸屏控制寄存器

#define ADCDAT0 ( (*(volatile unsigned long *)0x5800000C) )   //ADC0转换数据寄存器
#define ADCDAT1 ( (*(volatile unsigned long *)0x58000010) )   //ADC1转换数据寄存器

#define SUBSRCPND ( (*(volatile unsigned long *)0X4A000018) )   //子中断掩码寄存器
#define SRCPND ( (*(volatile unsigned long *)0X4A000000) )      //中断源请求寄存器
#define INTPND ( (*(volatile unsigned long *)0X4A000010) )      //中断请求寄存器

/********************************************************************
*名称:init_touchscreen
*参数:
*	none
*返回:
*	none
*功能:初始化触摸屏
*********************************************************************/
void init_touchscreen(){
	//设置ADC转换频率
	ADCCON = (1<<14)|(49<<6);   //PRSCEN[14]:1, PRSCVL[13:6]:49 ADC_Freqeuncy=PCLK/(PRSCVL+1) PCLK=50MHz ADC_Freqeuncy=1MHz
	
	//等待按下中断
	ADCTSC = (0<<8)|(1<<7)|(1<<6)|(1<<4)|(0x3<<0);   //UD_SEN[8]:0, YM_SEN[7]:1, YP_SEN[6]:1, XM_SEN[5]:0, XP_SEN[4]:1, PULL_UP[3]:0, AUTO_PST[2]:0, XY_PST[1:0]:0b11
	
	//设置子中断掩码
	INTSUBMSK &= ~(1<<9);   //INT_TC[9]:0
	
	//设置中断掩码
	INTMSK &= ~(1<<31);   //INT_ADC[31]:0
}

/********************************************************************
*名称:touchscreen_irq
*参数:
*	none
*返回:
*	none
*功能:触摸屏中断服务
*********************************************************************/
void touchscreen_irq(){
	int x, y;

	if( !(ADCTSC&(1<<8)) ){   //如果是触摸屏按下,UD_SEN[8]:0
		//设置触摸屏自动转换
		ADCTSC = (1<<2);   //AUTO_PST[2]:1
	
		//启动ADC转换
		ADCCON |= (1<<0);   //ENABLE_START[0]:1
		
		//等待ADC转换结束
		while( !(ADCCON&(1<<15)) );   //ECFLG[15]
		
		//获取坐标
		x = ADCDAT0&(0x3FF<<0);   //XPDATA[9:0]
		y = ADCDAT1&(0x3FF<<0);   //YPDATA[9:0]
		
		//清除子中断请求
		SUBSRCPND |= (1<<9);   //INT_TC[9]:0
		
		//清除中断源请求
		SRCPND |= (1<<31);   //INT_ADC[31]:0
		
		//清除中断请求
		INTPND |= (1<<31);   //INT_ADC[31]:0
		
		//等待弹起中断
		ADCTSC = (1<<8)|(1<<7)|(1<<6)|(1<<4)|(0x3<<0);   //UD_SEN[8]:1, XY_PST[1:0]:0b11
	}else{                    //如果是触摸屏弹起,UD_SEN[8]:1
		//清除子中断请求
		SUBSRCPND |= (1<<9);   //INT_TC[9]:0
		
		//清除中断源请求
		SRCPND |= (1<<31);   //INT_ADC[31]:0
		
		//清除中断请求
		INTPND |= (1<<31);   //INT_ADC[31]:0
		
		//等待按下中断
		ADCTSC = (0<<8)|(1<<7)|(1<<6)|(1<<4)|(0x3<<0);   //UD_SEN[8]:0, XY_PST[1:0]:0b11
	}
}

 

[国嵌攻略][063][电阻屏驱动程序设计]

标签:

原文地址:http://www.cnblogs.com/d442130165/p/4991818.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!