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

📄 adt7516.c

📁 此文件是在visual dsp++下面初始化ADT7516的源代码
💻 C
字号:
#include "bf5xx.h"
#include "types.h"

#define Iner_Flag_OE	0xff
#define Out_Flag_A		0x00
#define Out_Flag_B		0x00
#define Out_Flag_C		0x00

extern uint8_t databuf[256];
extern uint8_t cmd[2];

/****************************************************************************
* 名称 : ADT7516_SPImode
* 功能 : 软件实现ADT7516进入SPI工作模式
* 入口参数 :无
* 出口参数 :无
****************************************************************************/

void ADT7516_SPImode(void)
{
	*pFIO_FLAG_S = PF2;      //ADT7516_SPISS 拉高
	udelay(0x3ff);
	*pFIO_FLAG_C = PF2;      //ADT7516_SPISS 拉低
	udelay(0x3ff);
	*pFIO_FLAG_S = PF2;
	udelay(0x3ff);
	*pFIO_FLAG_C = PF2;
	udelay(0x3ff);
	*pFIO_FLAG_S = PF2;
	udelay(0x3ff);
	*pFIO_FLAG_C = PF2;
	udelay(0x3ff);
	*pFIO_FLAG_S = PF2;
	udelay(0x3ff);
}

/****************************************************************************
* 名称 : ADT7516_SPI_init
* 功能 : ADT7516 SPI 控制器初始化 ,进入主发送模式
* 入口参数 :无
* 出口参数 :无
****************************************************************************/

void ADT7516_SPI_init(void)
{
    ADT7516_SPImode();         // 3个脉冲从IIC模式 进入SPI模式
	SPIinit();
	SPIMenable();
    SPIMODE_TX();
}

/****************************************************************************
* 名称 : ADT7516_WRITE_REG
* 功能 : ADT7516 SPI 写控制寄存器函数
* 入口参数 :addr 控制寄存器地址 *buf 要写入的数据 NUM连续写入寄存器数目
* 出口参数 :无
****************************************************************************/

void ADT7516_WRITE_REG(uint8_t addr,uint8_t *buf,uint8_t NUM)
{
	SPIMenable();                //允许SPI控制器
	SPIMODE_TX();                //SPI 为发送模式
	SPIsend(ADT7516_WRITE );     // 写命令
	SPIsend(addr);               //写地址
	if(NUM==2)
	{
		SPIsend(buf[1]); //GAO
		SPIsend(buf[0]); //DI
	}
	if(NUM==1)
	{
		SPIsend(buf[0]);//DI
	}
	udelay(0x3ff);
	SPIdisable();                // 禁止SPI 控制器
	udelay(0x3ff);
}

/****************************************************************************
* 名称 : ADT7516_READ_REG
* 功能 : ADT7516 SPI 读控制寄存器函数
* 入口参数 :addrr 控制寄存器地址   len 连续读入寄存器数据数目
* 出口参数 :无
****************************************************************************/

void ADT7516_READ_REG(uint8_t addrr,int len)
{
	unsigned char i ;
		
	SPIMenable();                 // SPI 控制器允许
	SPIMODE_TX();                 // SPI 为发送模式
	SPIsend(ADT7516_WRITE );      //写命令
	SPIsend(addrr);               //写地址
	udelay(0x3ff);
	SPIdisable();                 //禁止SPI控制器
	udelay(0x3ff);
	SPIMenable();                 // SPI 控制器允许
	SPIMODE_TX();                 // SPI 为发送模式
	SPIsend(ADT7516_READ );       // 写读命令
	SPIMODE_RX();                 // SPI 为接收模式
	
	if(*pSPI_STAT&RXS)             //接收数据
	{
		databuf[0] = *pSPI_RDBR;
	}	
	
	for(i=0;i<len;i++)
	{
		databuf[i] = SPIReadByte();
	}
	udelay(0x3ff);
	udelay(0x3ff);
	SPIdisable();                  //禁止SPI 控制器
	udelay(0x3ff);
}

/****************************************************************************
* 名称 : ADT7516_SPISS_SELECT
* 功能 : 控制CPLD内部 使SPISS 选通 ADT7516_SPISS
* 入口参数 :无
* 出口参数 :无
****************************************************************************/

void ADT7516_SPISS_SELECT(void)
{
	*pCtrIner_Flag_OE = (Iner_Flag_OE&&(~SPI_OE)) ; //SPI_switc 允许 
	mdelay(500);
	*pCtrOut_Flag_B = Out_Flag_B; // 选择ADDA_SPISS
	mdelay(500);
	*pFIO_FLAG_S = PF2;
	mdelay(500);
}

/****************************************************************************
* 名称 : ADT7516_SPISS_SELECT
* 功能 : 控制CPLD内部 使SPISS 选通 ADT7516_SPISS
* 入口参数 :无
* 出口参数 :无
****************************************************************************/

void ADT7516_TEST(void)
{
	ADT7516_READ_REG(0x7F,1); //读 状态 如果返回为1 则表示进入了SPI模式
	udelay(0x3ff);
	if(databuf[0]==0x01)
	{
		printf( "\nThe SPI Lock Status has been entered!\n\r" );
	}
	    
	ADT7516_READ_REG(0x4D,1); //读 device ID 03
	udelay(0x3ff);
	    
	if(databuf[0]==0x03) 
	{
	    printf( "\nThe Device ID is  %d\n\r",databuf[0]);
	} 
}

/****************************************************************************
* 名称 : ADT7516_CTL
* 功能 : 设置各种控制模式 中断允许 AIN2 选通 
* 入口参数 :无
* 出口参数 :无
****************************************************************************/

void ADT7516_CTL(void)
{
	//18H Control configure 1
	//C0=1 启动监听模式 C1-C2 00 AIN1 AIN2 选通 C3=0 LDAC 选择C4=0 保留
	//C5=0 INT 允许 C6=0 低电平中断 C7=0 工作模式
	
	cmd[0] = 0x21; 
	ADT7516_WRITE_REG(0x18,cmd,1); 
	
	//19H Control configure 2
	// C2-C0  采样通道选择 011 选择了 AIN2 C3=0 保留 C4=1 单通道周期
	
	cmd[0] = 0x03; 
	ADT7516_WRITE_REG(0x19,cmd,1); 
	 
	// 1A H Control configure 3
	// C0=0 采样率为1.4K C1=0 DAC 为8位 C2=0 保留 C3=0 LDAC控制输出、
	// C4 =0 内部基准电压 C5=0 DAC A 选通 C5=1 输出为内部温度 C6=0 DAC B输出C6=1 输出外部温度
	//C7=0 保留
	 
	cmd[0] = 0x08; 
	ADT7516_WRITE_REG(0x1A,cmd,1);
	 
	//1B H  DAC CONFIGURE
	// C0-C3 = 1 DAC 输出电压范围 0-2*VREF  为0 0-VREF
	//C5-C4  LDAC 内部控制时更新方式 (此配置为外部控制)
	//C6 C7 =0 保留
	 
	cmd[0] = 0x00; 
	ADT7516_WRITE_REG(0x1B,cmd,1);
	 
	// 1C H LDAC CONFIGURE 
	// C0 C1 C2 C3 为1 S时 内部更新DAC A B C D 的输出 (LDAC内部起作用时)
	// C4= 1 DAC A B 输出基准电压为内部 为0 时输出为外部
	// C5= 1 DAC C D 输出基准电压为内部 为0 时输出为外部
	//D6 D7 =0 保留 
	 
	cmd[0] = 0x30; 
	ADT7516_WRITE_REG(0x1c,cmd,1);
	 
	//1D H INT MASK
	// 中断允许控制 为0 允许中断 AIN2 中断允许
	
	cmd[0] = 0xdf;//df; 
	ADT7516_WRITE_REG(0x1d,cmd,1);
	
	// 1EH INT MASK 2 
	// C4 允许VDD中断 其他保留
	 
	cmd[0] = 0x10; 
	ADT7516_WRITE_REG(0x1e,cmd,1);
}

/****************************************************************************
* 名称 : ADT7516_RST
* 功能 : ADT7516 软件控制复位
* 入口参数 :无
* 出口参数 :无
****************************************************************************/

void ADT7516_RST(void)
{
	cmd[0] = 0x80; 
	ADT7516_WRITE_REG(0x19,cmd,1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -