?? ad9510.c
字號(hào):
#include<aduc841.h>
#include "MacroDef.h"
sbit AD9510_CSB = P3^3;
sbit AD9510_DATA = P3^4 ;
sbit AD9510_CLK = P3^5 ;
static unsigned char ucInstrWord[2];//AD9510讀寫控制字
static unsigned char ucData[4];//保存所發(fā)數(shù)據(jù)
/**********************************************************************
* 函數(shù)名稱: SetADRegister
* 功能描述: 設(shè)置寄存器
* 訪問(wèn)的表:
* 修改的表:
* 輸入?yún)?shù):
* 輸出參數(shù):
* 返回值 :
* 其它說(shuō)明:
* 修改日期 版本號(hào) 修改人 修改內(nèi)容
* -----------------------------------------------
* 2006/04/04 V1.0
***********************************************************************/
void SetADRegister(unsigned int uiAddr,unsigned long ulData,unsigned int length)
{
SetRWCtrlWord(uiAddr,length,AD9510_WRITE);//設(shè)置AD9510讀寫控制字
SetTrsfData(ulData); //設(shè)置AD9510發(fā)送的數(shù)據(jù)
SendAD9510Command(ucInstrWord,2); //發(fā)送控制字
SendAD9510Command(ucData,length); //發(fā)送數(shù)據(jù)
//將數(shù)據(jù)從緩沖區(qū)寫入實(shí)際的寄存器中,向5A<0>寫1
ucInstrWord[0] = 0x5A;
ucInstrWord[1] = 0x00;
SendAD9510Command(ucInstrWord,2); //發(fā)送控制字
ucData[0] = 0x01;
SendAD9510Command(ucData,1); // 向5A<0>寫1
}
/**********************************************************************
* 函數(shù)名稱: ReadADRegister
* 功能描述: 設(shè)置寄存器
* 訪問(wèn)的表:
* 修改的表:
* 輸入?yún)?shù):
* 輸出參數(shù):
* 返回值 :
* 其它說(shuō)明:
* 修改日期 版本號(hào) 修改人 修改內(nèi)容
* -----------------------------------------------
* 2006/04/04 V1.0
***********************************************************************/
unsigned long ReadADRegister(unsigned int uiAddr,unsigned int length)
{
unsigned long ReturnValue;
int i;
for(i=0;i<4;i++)
{
ucData[i] = 0x00;
}
SetRWCtrlWord(uiAddr,length,AD9510_READ);//設(shè)置AD9510讀寫控制字
SendAD9510Command(ucInstrWord,2); //發(fā)送控制字
ReadAD9510Command(length); //讀數(shù)據(jù)
ReturnValue = (unsigned long)ucData[3];
ReturnValue = (ReturnValue << 8) | ucData[2];
ReturnValue = (ReturnValue << 8) | ucData[1];
ReturnValue = (ReturnValue << 8) | ucData[0];
return ReturnValue;
}
/**********************************************************************
* 函數(shù)名稱: SetRWCtrlWord
* 功能描述: 設(shè)置AD9510讀寫控制字
* 訪問(wèn)的表:
* 修改的表:
* 輸入?yún)?shù):
* 輸出參數(shù):
* 返回值 :
* 其它說(shuō)明:
* 修改日期 版本號(hào) 修改人 修改內(nèi)容
* -----------------------------------------------
* 2006/04/04 V1.0
***********************************************************************/
void SetRWCtrlWord(unsigned int uiAddr,unsigned int length,unsigned int ucRWFlag)
{
unsigned char tmp;
//AD9510讀寫控制字初始化為0
ucInstrWord[0] = 0x00;
ucInstrWord[1] = 0x00;
//根據(jù)讀寫標(biāo)志設(shè)置最高位,讀:I15 = 1 ,寫:I15 = 0
if(ucRWFlag == AD9510_WRITE )
{
ucInstrWord[1] &= 0x7F;
}
else
{
ucInstrWord[1] |= 0x80;
}
//根據(jù)數(shù)據(jù)長(zhǎng)度設(shè)置I14和I13
switch(length)
{
case 1:
//長(zhǎng)度為1
ucInstrWord[1] &= 0x9F;
break;
case 2:
//長(zhǎng)度為2
ucInstrWord[1] &= 0xBF;
ucInstrWord[1] |= 0x20;
break;
case 3:
//長(zhǎng)度為3
ucInstrWord[1] &= 0xDF;
ucInstrWord[1] |= 0x40;
break;
case 4:
//長(zhǎng)度為4
ucInstrWord[1] |= 0x60;
break;
default:
break;
}
//根據(jù)地址設(shè)置I12-I0
ucInstrWord[0] = uiAddr & 0xFF;//設(shè)置地址低8位
tmp = (uiAddr >> 8) & 0x1F;
ucInstrWord[1] |= tmp; //設(shè)置地址高5位
}
/**********************************************************************
* 函數(shù)名稱: SetTrsfData
* 功能描述: 設(shè)置AD9510發(fā)送的數(shù)據(jù)
* 訪問(wèn)的表:
* 修改的表:
* 輸入?yún)?shù):
* 輸出參數(shù):
* 返回值 :
* 其它說(shuō)明:
* 修改日期 版本號(hào) 修改人 修改內(nèi)容
* -----------------------------------------------
* 2006/04/04 V1.0
***********************************************************************/
void SetTrsfData(unsigned long ulData)
{
//設(shè)置發(fā)送數(shù)據(jù)
ucData[0] = (unsigned char)(ulData & 0xFF);
ucData[1] = (unsigned char)((ulData >> 8) & 0xFF);
ucData[2] = (unsigned char)((ulData >> 16) & 0xFF);
ucData[3] = (unsigned char)((ulData >> 24) & 0xFF);
}
/**********************************************************************
* 函數(shù)名稱: SendAD9510Command
* 功能描述: 發(fā)送AD9510寄存器的函數(shù)
* 訪問(wèn)的表:
* 修改的表:
* 輸入?yún)?shù):
* 輸出參數(shù):
* 返回值 : void
* 其它說(shuō)明:
* 修改日期 版本號(hào) 修改人 修改內(nèi)容
* -----------------------------------------------
* 2006/04/04 V1.0
***********************************************************************/
void SendAD9510Command(unsigned char byteNumber[4],int byteSelect)
{
int i,j;
for (j=byteSelect-1;j>=0;j--)
{
AD9510_CSB = 0;
for (i=7;i>=0;i--)
{
AD9510_CLK = 0;
switch (i)
{
case 0:
if((byteNumber[j]&0x01) == 0x01)
AD9510_DATA = 1;
else
AD9510_DATA = 0;
break;
case 1:
if((byteNumber[j]&0x02) == 0x02)
AD9510_DATA = 1;
else
AD9510_DATA = 0;
break;
case 2:
if((byteNumber[j]&0x04) == 0x04)
AD9510_DATA = 1;
else
AD9510_DATA = 0;
break;
case 3:
if((byteNumber[j]&0x08) == 0x08)
AD9510_DATA = 1;
else
AD9510_DATA = 0;
break;
case 4:
if((byteNumber[j]&0x10) == 0x10)
AD9510_DATA = 1;
else
AD9510_DATA = 0;
break;
case 5:
if((byteNumber[j]&0x20) == 0x20)
AD9510_DATA = 1;
else
AD9510_DATA = 0;
break;
case 6:
if((byteNumber[j]&0x40) == 0x40)
AD9510_DATA = 1;
else
AD9510_DATA = 0;
break;
case 7:
if((byteNumber[j]&0x80) == 0x80)
AD9510_DATA = 1;
else
AD9510_DATA = 0;
break;
default:
break;
}
AD9510_CLK = 1;
}
AD9510_CSB = 1;
}
}
/**********************************************************************
* 函數(shù)名稱: ReadAD9510Command
* 功能描述: 讀取AD9510寄存器數(shù)據(jù)的函數(shù)
* 訪問(wèn)的表:
* 修改的表:
* 輸入?yún)?shù):
* 輸出參數(shù):
* 返回值 :
* 其它說(shuō)明:
* 修改日期 版本號(hào) 修改人 修改內(nèi)容
* -----------------------------------------------
* 2006/04/04 V1.0
***********************************************************************/
void ReadAD9510Command(int byteSelect)
{
int i,j;
int tmp;
for (j=byteSelect-1;j>=0;j--)
{
AD9510_CSB = 0;
for (i=7;i>=0;i--)
{
AD9510_CLK = 1;
tmp = AD9510_DATA;
if(1 == tmp)
{
ucData[j] |= 0x01;
ucData[j] <<= 1;
}
else
{
ucData[j] &= 0xFE;
ucData[j] <<= 1;
}
AD9510_CLK = 0;
}
AD9510_CSB = 1;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -