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

📄 ads7843.c

📁 基于ARM2440开发板的触摸屏 触点定位显示坐标的程序
💻 C
字号:
/****************************************************************************
* 文 件 名:ADS7843.C
* 功    能:ADS7843驱动程序。
* 说    明:若系统时钟过快,需要调整DELYA_200NS的值。
****************************************************************************/
#include  "config.h"

#define     ADS7843_CS	      (1<<9)	    //用于PORT E口  9脚为输出
#define     ADS7843_DOUT	  (1<<11)	    //用于PORT G口 11脚为输入
#define     ADS7843_DIN	      (1<<10)	    //用于PORT G口 10脚为输出
#define     ADS7843_DCLK      (1<<10)	    //用于PORT E口 10脚为输出
#define     ADS7843_IRQ	      (1<<3)	    //用于PORT F口  3脚为EINT3

#define	 ADS7843_CSS()	       rGPEDAT = rGPEDAT | ADS7843_CS    
#define	 ADS7843_CSC()	       rGPEDAT = rGPEDAT & (~ADS7843_CS)

#define	 ADS7843_DOUTR()      (rGPGDAT & ADS7843_DOUT)

#define	 ADS7843_DINS()	       rGPGDAT = rGPGDAT | ADS7843_DIN
#define	 ADS7843_DINC()	       rGPGDAT = rGPGDAT & (~ADS7843_DIN)

#define	 ADS7843_DCLKS()      rGPEDAT = rGPEDAT | ADS7843_DCLK
#define	 ADS7843_DCLKC()      rGPEDAT = rGPEDAT & (~ADS7843_DCLK)

/* 操作时序控制宏(即延时控制值) */
#define  DELAY_200NS		10

/****************************************************************************
* 名称:DelayNo()
* 功能:短软件延时。
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void  DelayNo(uint32 i)
{  for(; i>0; i--);
}


/****************************************************************************
* 名称:TestDelayNo()
* 功能:测试短软件延时,以便于产生正确的时序。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  TestDelayNo(void)
{   while(1)
    {   ADS7843_DCLKS();
        DelayNo(DELAY_200NS);
        ADS7843_DCLKC();
        DelayNo(DELAY_200NS);
    }
    
}

/****************************************************************************
* 名称:ADS7843_IRQR()
* 功能:ADS7843的PENIRQ引脚测量,返回当前此引脚的电平值。
* 入口参数:无
* 出口参数:返回为0表示PENIRQ为低电平状态,否则为高电平。
****************************************************************************/
uint8  ADS7843_IRQR(void)
{   uint8  dat[3];

    DelayNo(1);
    if(rGPFDAT&ADS7843_IRQ) dat[0] = 1;
      else dat[0] = 0;
    if(rGPFDAT&ADS7843_IRQ) dat[1] = 1;
      else dat[1] = 0;
    if(rGPFDAT&ADS7843_IRQ) dat[2] = 1;
      else dat[2] = 0;
      
    if((dat[0] + dat[1] + dat[2]) > 1) return(1);
      else  return(0);
}



/****************************************************************************
* 名称:ADS7843_IOInit()
* 功能:初始化ADS7843的控制I/O,CS=1,DCLK=0,DIN=0。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  ADS7843_IOInit(void)
{   ADS7843_CSS(); 						// CS = 1
    ADS7843_DCLKC();				    // DCLK = 0
    ADS7843_DINC();						// DIN = 0
    DelayNo(DELAY_200NS);
}
 
 
/****************************************************************************
* 名称:ADS7843_WriteRead()
* 功能:对ADS7843进行读写操作。操作按照ADS7843的规定,24Clocks,先写8位控制数据,然
*      后读取12位的转换结果。
* 入口参数:data		控制数据
* 出口参数:返回值为读出的数据
****************************************************************************/ 
uint16  ADS7843_WriteRead(uint8 data)
{  uint8   i;
   uint16  ret_dat;
	
   data = data|0x80;					// 设置S位
   ADS7843_IOInit();
   
   ADS7843_CSC();						// CS = 0
   for(i=0; i<8; i++)
   {  if( (data&0x80) != 0 ) ADS7843_DINS();	// DIN = 1
	    else  ADS7843_DINC();			// DIN = 0
	  DelayNo(DELAY_200NS);
	  ADS7843_DCLKS();					// DCLK = 1
	  DelayNo(DELAY_200NS);
	  ADS7843_DCLKC();					// DCLK = 0
	  data = data<<1;
   }
   ADS7843_DINC();						// DIN = 0
   DelayNo(DELAY_200NS * 3);
   
   ADS7843_DCLKS();						// DCLK = 1
   DelayNo(DELAY_200NS);
   ADS7843_DCLKC();					    // DCLK = 0
    
   ret_dat = 0;
   for(i=0; i<12; i++)
   {  ret_dat = ret_dat<<1;      
      DelayNo(DELAY_200NS);
      ADS7843_DCLKS();					// DCLK = 1
	  if( ADS7843_DOUTR() != 0 ) ret_dat = ret_dat | 1;	  
	  DelayNo(DELAY_200NS);
	  ADS7843_DCLKC();				    // DCLK = 0
	  
	  if(i==6) DelayNo(DELAY_200NS * 2); 
   }
   
   for(i=0;i<3;i++)
   {  DelayNo(DELAY_200NS);
      ADS7843_DCLKS();					// DCLK = 1
	  DelayNo(DELAY_200NS);
   	  ADS7843_DCLKC();					// DCLK = 0	  
   }   
   DelayNo(DELAY_200NS);
   ADS7843_CSS();						// CS = 1
   
   return(ret_dat);
}

⌨️ 快捷键说明

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