📄 ad7710.c
字号:
/****************************************Copyright (c)**************************************************
**
** 研 发 部
**
** 文 件 名: AD7710.c
** 最后修改日期: 2007-10-26 9:44
** 描 述: 四通道AD7710程序
** 版 本: V1.0
** 主 控 芯 片:M32 晶振频率:7.3728MHZ, 波特率115200
** IDE:ICCAVR 6.31
**********************************************************************************************************/
#include<iom32v.h>
#include<macros.h>
#include"define.h"
#include"function.h"
/**********************************************************************
functionName:void send24Bit(BYTE *Comm,BYTE chs)
description:向AD7710指定的通道发送24bit数据,chs:选择通道数,0,1,2,3
运行时间:73.65us 7.3728MHZ晶振
**********************************************************************/
void send24Bit(BYTE *Comm,BYTE chs)
{
BYTE i,temp,j;
SET_RFS_1;
SET_RFS_2;
SET_RFS_3;
SET_RFS_4;
SET_TFS_1;
SET_TFS_2;
SET_TFS_3;
SET_TFS_4;
CLR_SCLK;
ACCESS_CTL_REG;
switch(chs)
{
case 0:
{
CLR_TFS_1;
break;
}
case 1:
{
CLR_TFS_2;
break;
}
case 2:
{
CLR_TFS_3;
break;
}
case 3:
{
CLR_TFS_4;
break;
}
default:
{
break;
}
}
for(i=0;i<3;i++)
{
temp=*(Comm+i);
for(j=0;j<8;j++)
{
if(temp&0x80)
{
SET_SDATA;
}
else
{
CLR_SDATA;
}
SET_SCLK;
NOP();
CLR_SCLK;
temp<<=1;
}
}
SET_TFS_1;
SET_TFS_2;
SET_TFS_3;
SET_TFS_4;
}
/**********************************************************************
functionName:void readCommReg(BYTE *CommReg,BYTE chs)
description:读AD7710控制寄存器,放在*CommReg里。 chs:选择通道数,0,1,2,3
运行时间:70.53us 7.3728MHZ晶振
**********************************************************************/
void readCommReg(BYTE *CommReg,BYTE chs)
{
BYTE i,j,temp;
SDATA_SLAVE;
SET_RFS_1;
SET_RFS_2;
SET_RFS_3;
SET_RFS_4;
SET_TFS_1;
SET_TFS_2;
SET_TFS_3;
SET_TFS_4;
CLR_SCLK;
ACCESS_CTL_REG;
switch(chs)
{
case 0:
{
CLR_RFS_1;
break;
}
case 1:
{
CLR_RFS_2;
break;
}
case 2:
{
CLR_RFS_3;
break;
}
case 3:
{
CLR_RFS_4;
break;
}
default:
{
break;
}
}
NOP();
for(i=0;i<3;i++)
{
temp=0;
NOP();
for(j=0;j<8;j++)
{
temp<<=1;
if(STATUS_SDATA)
temp|=0x01;
SET_SCLK;
NOP();
CLR_SCLK;
}
*(CommReg+i)=temp;
}
SET_RFS_1;
SET_RFS_2;
SET_RFS_3;
SET_RFS_4;
SDATA_MASTER;
}
/**********************************************************************
functionName:BYTE ad7710Init(BYTE chs)
description:对AD7710初始化。 chs:选择通道数,0,1,2,3
如果初始化成功返回0xff,失败返回0x00;
**********************************************************************/
BYTE ad7710Init(BYTE chs)
{
BYTE ad7710CtrlReg[3],temp[3],i,j,result;
ad7710CtrlReg[0]=CTRL_REG_HIG;
ad7710CtrlReg[1]=CTRL_REG_MID;
ad7710CtrlReg[2]=CTRL_REG_LOW;
send24Bit(ad7710CtrlReg,chs);
usDelay(32);
readCommReg(temp,chs);
i=0x00;
while(i<20)
{
result=0xFF;
for(j=0;j<3;j++)
{
if(temp[j]!=ad7710CtrlReg[j])
{
result=0x00;
}
}
if(result)
{
return(result);
}
i++;
send24Bit(ad7710CtrlReg,chs);
usDelay(32);
readCommReg(temp,chs);
}
return(result);
}
/**********************************************************************
functionName:signed long ad7710DataOut(BYTE chs)
description:对AD7710读数据寄存器数据。 chs:选择通道数,0,1,2,3
**********************************************************************/
signed long ad7710DataOut(BYTE chs)
{
BYTE i;
unsigned long result;
SDATA_SLAVE;
SET_RFS_1;
SET_RFS_2;
SET_RFS_3;
SET_RFS_4;
SET_TFS_1;
SET_TFS_2;
SET_TFS_3;
SET_TFS_4;
CLR_SCLK;
ACCESS_DATA_REG;
switch(chs)
{
case 0:
{
CLR_RFS_1;
break;
}
case 1:
{
CLR_RFS_2;
break;
}
case 2:
{
CLR_RFS_3;
break;
}
case 3:
{
CLR_RFS_4;
break;
}
default:
{
break;
}
}
result=0;
for(i=0;i<18;i++)
{
result<<=1;
if(STATUS_SDATA)
result|=0x000001;
SET_SCLK;
NOP();
CLR_SCLK;
}
for(i=0;i<6;i++)
{
SET_SCLK;
NOP();
CLR_SCLK;
}
SET_RFS_1;
SET_RFS_2;
SET_RFS_3;
SET_RFS_4;
SDATA_MASTER;
result=result-0x0001ffff;
return(result);
}
/**********************************************************************
functionName:signed long ad7710ReadData(BYTE chs)
description:等待AD7710转换完成,读数据。 chs:选择通道数,0,1,2,3
**********************************************************************/
signed long ad7710ReadData(BYTE chs)
{
signed long result;
if(chs==0)
{
while(STATUS_DRDY_1);
}
else if(chs==1)
{
while(STATUS_DRDY_2);
}
else if(chs==2)
{
while(STATUS_DRDY_3);
}
else
{
while(STATUS_DRDY_4);
}
result=ad7710DataOut(chs);
return(result);
}
/**********************************************************************
functionName:signed long ad7710DataOut(BYTE chs)
description:对AD7710读数据寄存器数据。 chs:选择通道数,0,1,2,3
**********************************************************************/
signed long ad7710DataOut17BIT(BYTE chs)
{
BYTE i;
unsigned long result;
SDATA_SLAVE;
SET_RFS_1;
SET_RFS_2;
SET_RFS_3;
SET_RFS_4;
SET_TFS_1;
SET_TFS_2;
SET_TFS_3;
SET_TFS_4;
CLR_SCLK;
ACCESS_DATA_REG;
switch(chs)
{
case 0:
{
CLR_RFS_1;
break;
}
case 1:
{
CLR_RFS_2;
break;
}
case 2:
{
CLR_RFS_3;
break;
}
case 3:
{
CLR_RFS_4;
break;
}
default:
{
break;
}
}
result=0;
for(i=0;i<17;i++)
{
result<<=1;
if(STATUS_SDATA)
result|=0x000001;
SET_SCLK;
NOP();
CLR_SCLK;
}
for(i=0;i<7;i++)
{
SET_SCLK;
NOP();
CLR_SCLK;
}
SET_RFS_1;
SET_RFS_2;
SET_RFS_3;
SET_RFS_4;
SDATA_MASTER;
result=result-0x0000ffff;
return(result);
}
signed long ad7710ReadData17BIT(BYTE chs)
{
signed long result;
if(chs==0)
{
while(STATUS_DRDY_1);
}
else if(chs==1)
{
while(STATUS_DRDY_2);
}
else if(chs==2)
{
while(STATUS_DRDY_3);
}
else
{
while(STATUS_DRDY_4);
}
result=ad7710DataOut17BIT(chs);
return(result);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -