标签:
/********************************************************************
*名称: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
}
}
标签:
原文地址:http://www.cnblogs.com/d442130165/p/4991818.html