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

📄 ads7843.c

📁 s3c44b0 触摸屏驱动
💻 C
字号:

#include "44b.h"
#include "44blib.h"
#include "def.h"
#include "option.h"

#include "ads7843.h"



/****************************************************************************
【功能说明】
****************************************************************************/
void ADS7843_SPI_Start( void )
{
    TP_DCLK(0);
	  TP_CS(1);
	  TP_DIN(1);
    TP_DCLK(1);
    TP_CS(0);	      		//芯片允许
}
//***************************************************************************

/****************************************************************************
【功能说明】向ADS7843
****************************************************************************/
void ADS7843_Write ( UINT8T cmd )
{
	UINT8T buf, i, j ;

    TP_DCLK(0);
    
	for( i = 0; i < 8; i++ )
	{
		buf = (cmd >> (7-i)) & 0x1 ;	//MSB在前,LSB在后
		TP_DIN(buf);	 	//时钟上升沿锁存DIN
		
		for( j = 0; j < 25; j++ );	//200ns
		TP_DCLK(1);			//开始发送命令字
		
		for( j = 0; j < 25; j++ );	//200ns
		TP_DCLK(0);			//时钟脉冲,一共8个
	}
}
//***************************************************************************

/****************************************************************************
【功能说明】读取ADS7843的ADC数据
****************************************************************************/
UINT16T ADS7843_Read ( void )
{
	UINT16T buf = 0 ;
	UINT8T i, j ;
	
	for( i = 0; i < 12; i++ )
	{
		buf = buf << 1 ;
		
		TP_DCLK(1);
		for( j = 0; j < 25; j++ );		//200ns
		TP_DCLK(0);			
		for( j = 0; j < 5; j++ );	//时钟下降沿读取,一共12个,MSB在前,LSB在后

		if ( TP_DOUT )		buf = buf + 1 ;

		for( j = 0; j < 20; j++ );		//200ns
	}
/*	
	for( i = 0; i < 4; i++ )
	{
		TP_DCLK(1);
		for( j = 0; j < 25; j++ );		//200ns
		TP_DCLK(0);			
		for( j = 0; j < 25; j++ );	//4个没用时钟
	}	
*/
	return( buf ) ;
}
//***************************************************************************

/****************************************************************************
【功能说明】ADS7843触摸屏初始化
****************************************************************************/
void ADS7843_Init( void )
{
   //PG6<-PENIRQ,NC<-BUSY,PC8->CS,PC9->DCLK,PC14<-DOUT,PC15->DIN
	
	
	rPCONC=0x4f55ff55;//init. I/O 
    rPUPC &= 0x0;
    rPUPC |=0x4000;
    rPCONG &= (~(11<<12)) ;
    rPUPG = rPUPG & (0<<6) ;
	
	
	
	
	
	
}
//***************************************************************************

/****************************************************************************
【功能说明】触摸屏中断服务子程序
****************************************************************************/
void disp_ADS7843( void )
{
	UINT16T x, y, j ;
    
    //rI_ISPC = BIT_EINT3 ;	//clear pending_bit
	
	for( j = 0; j < 10000; j++ );		//延时一下再响应其请求,消除抖动使得采样更准确
	
	ADS7843_SPI_Start() ;
	for( j = 0; j < 5; j++ );		//40ns
	//while ( TP_BUSY ) ;		//如果BUSY,等待直到转换完毕,这个可以不用
	
	ADS7843_Write( CHX ) ;
	for( j = 0; j < 25; j++ );		//200ns
	x = ADS7843_Read() ;
	
	ADS7843_Write( CHY ) ;
	for( j = 0; j < 25; j++ );		//200ns
	y = ADS7843_Read() ;

    TP_CS(1);	      		//芯片禁止

	 uart_printf( "\tx = %04d y = %04d\n", x*640/4096, y*320/4096 );
}






void test_ads7843 (void)
{

  ADS7843_Init();
 uart_printf( "\nwait touch!\n" );
while(1){ 

 if((rPDATG&(1<<6)) == 0)
 {
 uart_printf( "\ngot touch!\n" );
 delay(100);
 disp_ADS7843();
 						};
 		}

}




//***************************************************************************

⌨️ 快捷键说明

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