?? ads7843.c
字號(hào):
/****************************************************************************
* 文 件 名:ADS7843.C
* 功 能:ADS7843驅(qū)動(dòng)程序。
* 說 明:若系統(tǒng)時(shí)鐘過快,需要調(diào)整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)
/* 操作時(shí)序控制宏(即延時(shí)控制值) */
#define DELAY_200NS 10
/****************************************************************************
* 名稱:DelayNo()
* 功能:短軟件延時(shí)。
* 入口參數(shù):dly 延時(shí)參數(shù),值越大,延時(shí)越久
* 出口參數(shù):無
****************************************************************************/
void DelayNo(uint32 i)
{ for(; i>0; i--);
}
/****************************************************************************
* 名稱:TestDelayNo()
* 功能:測(cè)試短軟件延時(shí),以便于產(chǎn)生正確的時(shí)序。
* 入口參數(shù):無
* 出口參數(shù):無
****************************************************************************/
void TestDelayNo(void)
{ while(1)
{ ADS7843_DCLKS();
DelayNo(DELAY_200NS);
ADS7843_DCLKC();
DelayNo(DELAY_200NS);
}
}
/****************************************************************************
* 名稱:ADS7843_IRQR()
* 功能:ADS7843的PENIRQ引腳測(cè)量,返回當(dāng)前此引腳的電平值。
* 入口參數(shù):無
* 出口參數(shù):返回為0表示PENIRQ為低電平狀態(tài),否則為高電平。
****************************************************************************/
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。
* 入口參數(shù):無
* 出口參數(shù):無
****************************************************************************/
void ADS7843_IOInit(void)
{ ADS7843_CSS(); // CS = 1
ADS7843_DCLKC(); // DCLK = 0
ADS7843_DINC(); // DIN = 0
DelayNo(DELAY_200NS);
}
/****************************************************************************
* 名稱:ADS7843_WriteRead()
* 功能:對(duì)ADS7843進(jìn)行讀寫操作。操作按照ADS7843的規(guī)定,24Clocks,先寫8位控制數(shù)據(jù),然
* 后讀取12位的轉(zhuǎn)換結(jié)果。
* 入口參數(shù):data 控制數(shù)據(jù)
* 出口參數(shù):返回值為讀出的數(shù)據(jù)
****************************************************************************/
uint16 ADS7843_WriteRead(uint8 data)
{ uint8 i;
uint16 ret_dat;
data = data|0x80; // 設(shè)置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);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -