?? ads7843.c
字號:
/****************************************************************************
* 文 件 名:ADS7843.C
* 功 能:ADS7843驅動程序。
* 說 明:若系統時鐘過快,需要調整DELYA_200NS的值。
****************************************************************************/
#include "config.h"
#define ADS7843_CSS() IO2SET = ADS7843_CS
#define ADS7843_CSC() IO2CLR = ADS7843_CS
#define ADS7843_DOUTR() (IO2PIN & ADS7843_DOUT)
#define ADS7843_DINS() IO2SET = ADS7843_DIN
#define ADS7843_DINC() IO2CLR = ADS7843_DIN
#define ADS7843_DCLKS() IO2SET = ADS7843_DCLK
#define ADS7843_DCLKC() IO2CLR = ADS7843_DCLK
/* 操作時序控制宏(即延時控制值) */
#define DELAY_200NS 5
/****************************************************************************
* 名稱: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(IO0PIN&ADS7843_IRQ) dat[0] = 1;
else dat[0] = 0;
if(IO0PIN&ADS7843_IRQ) dat[1] = 1;
else dat[1] = 0;
if(IO0PIN&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 + -