?? ads7843.c
字號:
/****************************************************************************
【文 件 名 稱】ADS7843.c
【功 能 描 述】ADS7843觸摸屏驅動程序
【程 序 版 本】1.0
【創建人及創建日期】龔俊/2004-5-5 16:43
【修改人及修改日期】龔俊/2004-5-9 22:08
****************************************************************************/
//***************************************************************************
#include "44b.h"
#include "def.h"
#include "option.h"
#include "44blib.h"
#include "ads7843.h"
#include "glib.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 ( U8 cmd )
{
U8 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數據
****************************************************************************/
U16 ADS7843_Read ( void )
{
U16 buf = 0 ;
U8 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 ) ;
}
//***************************************************************************
/****************************************************************************
【功能說明】觸摸屏中斷服務子程序
****************************************************************************/
void __irq ADS7843_Interrupt_Serve( void )
{
U16 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( "x=%d y=%d\n", x, y );
}
//***************************************************************************
/****************************************************************************
【功能說明】ADS7843觸摸屏初始化
****************************************************************************/
void ADS7843_Init( void )
{
rPCONB = rPCONB & (~(3<<4)) ; //GPB4,GPB4 set OUTPUT
rPCONE = rPCONE & (~(3)) & (~(3<<14)) | (1) ; //GPE0 set OUTPUT, GPE7 set INPUT
rPUPE = rPUPE | (1) | (1<<7) ; //pull up resistor is disable
rPCONF = rPCONF & (~(7<<16)) ; //GPF7 set INPUT
rPUPF = rPUPF | (1<<7) ; //pull up resistor is disable
rPCONG = rPCONG | (3<<6) ; //ExINT3
rINTMSK = BIT_GLOBAL ; //disable INT
rINTCON = 0x1 ; //向量中斷模式
//rINTMOD = 0x0 ; //All=IRQ mode
rEXTINT = rEXTINT & (~(0xf<<12)) ; //EINT3低電平觸發中斷
pISR_EINT3 = (int)ADS7843_Interrupt_Serve ;
rINTMSK = ~( BIT_GLOBAL | BIT_EINT3 ) ; //start INT
}
//***************************************************************************
/****************************************************************************
【功能說明】ADS7843觸摸屏測試程序
****************************************************************************/
void ADS7843_Test( void )
{
ADS7843_Init() ;
Uart_Printf( "\nADS7843 Touch Panel Test!\n" );
while( 1 )
{
Uart_Printf( "Wait for hit the touch panel!\n" );
Delay( 20000 ) ;
}
}
//***************************************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -