#include "bsp_dac7554.h"
#include "bsp_uart1.h"
__IO uint8_t DAC7554_flag=0;
void DAC7554_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(DAC7554_SYNC_GPIO_CLK,ENABLE);
GPIO_InitStructure.GPIO_Pin = DAC7554_SYNC_GPIO_PIN|DAC7554_SCLK_GPIO_PIN|DAC7554_DIN_GPIO_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE,&GPIO_InitStructure);
DAC7554_SYNC_H;
}
static void I2C_Delay()
{
uint8_t i;
for(i=0;i<10;i++);
}
static uint16_t Voltage_Convert(float Vref,float voltage)
{
unsigned short _D_;
_D_ = (unsigned short)(4096*voltage/Vref);
return _D_;
}
static void DAC7554_Send_Voltage_Byte(uint16_t dac_val)
{
uint16_t i;
//发生bit11,bit10,...,bit0
for(i=0;i<12;i++)
{
if(dac_val&0x0800)
DAC7554_DIN_H;
else
DAC7554_DIN_L;
DAC7554_SCLK_H;
I2C_Delay();
DAC7554_SCLK_L;//钳住总线,准备发送数据
dac_val = dac_val<<1;
I2C_Delay();
}
}
static void DAC7554_Power_On_Mode(enum DAC_Channel dac_ch)//ABCD_Power_On
{
uint8_t i,dac_mode;
DAC7554_SYNC_L;
I2C_Delay();
switch(dac_ch)
{
case channel_a:
dac_mode = 0x8;
for(i=0;i<4;i++)
{
if(dac_mode&0x8)
DAC7554_DIN_H;
else
DAC7554_DIN_L;
DAC7554_SCLK_H;
I2C_Delay();
DAC7554_SCLK_L;//钳住总线,准备发送数据
dac_mode = dac_mode<<1;
I2C_Delay();
}
break;
case channel_b:
dac_mode = 0x9;
for(i=0;i<4;i++)
{
if(dac_mode&0x8)
DAC7554_DIN_H;
else
DAC7554_DIN_L;
DAC7554_SCLK_H;
I2C_Delay();
DAC7554_SCLK_L;//钳住总线,准备发送数据
dac_mode = dac_mode<<1;
I2C_Delay();
}
break;
case channel_c:
dac_mode = 0xA;
for(i=0;i<4;i++)
{
if(dac_mode&0x8)
DAC7554_DIN_H;
else
DAC7554_DIN_L;
DAC7554_SCLK_H;
I2C_Delay();
DAC7554_SCLK_L;//钳住总线,准备发送数据
dac_mode = dac_mode<<1;
I2C_Delay();
}
break;
case channel_d:
dac_mode = 0xB;
for(i=0;i<4;i++)
{
if(dac_mode&0x8)
DAC7554_DIN_H;
else
DAC7554_DIN_L;
DAC7554_SCLK_H;
I2C_Delay();
DAC7554_SCLK_L;//钳住总线,准备发送数据
dac_mode = dac_mode<<1;
I2C_Delay();
}
break;
default:break;
}
}
void DAC7554_Set_Voltage(enum DAC_Channel dac_ch,float dac_val)
{
unsigned short dac_D;
float Vref=2.2;
dac_D = Voltage_Convert(Vref,dac_val);
DAC7554_Power_On_Mode(dac_ch);
DAC7554_Send_Voltage_Byte(dac_D);
}
评论0