⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad7710.c

📁 24位高精度A转换芯片 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 + -