zoukankan      html  css  js  c++  java
  • [国嵌攻略][063][电阻屏驱动程序设计]

    /********************************************************************
    *名称: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
    	}
    }
    
  • 相关阅读:
    mybatis3.4.3中文文档(.chm文件)
    Castle学习系列之二:Castle配置
    自己写一个jquery
    apply bind call 和 this
    超级无敌海景拽掉咋天的魔方
    小试Dapper
    Linux或Linux虚拟机桥接模式使用Python2认证Drcom
    分治法实现 n皇后问题 Java语言
    分治法实现1-N的数字按字典序全排列组合 Java语言
    Java实现二进制转换16进制(可以去掉空格)
  • 原文地址:https://www.cnblogs.com/d442130165/p/4991818.html
Copyright © 2011-2022 走看看