标题:
AD7746的C语言驱动程序
[打印本页]
作者:
youshenglv
时间:
2019-5-18 15:01
标题:
AD7746的C语言驱动程序
#define CapDacvalue 4.97
void IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
IIC_SCL=1;
IIC_SDA=1;
}
void IIC_Start(void)
{
SDA_OUT();
IIC_SDA=1;
IIC_SCL=1;
delay_us(4);
IIC_SDA=0;
delay_us(4);
IIC_SCL=0;
}
//2úéúIICí£?1D?
void IIC_Stop(void)
{
SDA_OUT();
IIC_SCL=0;
IIC_SDA=0;
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;
delay_us(4);
}
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN();
IIC_SDA=1;delay_us(1);
IIC_SCL=1;delay_us(1);
while(READ_SDA)
{
ucErrTime++;
if(ucErrTime>250)
{
IIC_Stop();
return 1;
}
}
IIC_SCL=0;
return 0;
}
void IIC_Ack(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=0;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
void IIC_NAck(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
void IIC_Send_Byte(u8 txd)
{
u8 t;
SDA_OUT();
IIC_SCL=0;
for(t=0;t<8;t++)
{
IIC_SDA=(txd&0x80)>>7;
txd<<=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
delay_us(2);
}
}
u8 IIC_Read_Byte(unsigned char ack)
{
unsigned char i,receive=0;
SDA_IN();
for(i=0;i<8;i++ )
{
IIC_SCL=0;
delay_us(2);
IIC_SCL=1;
receive<<=1;
if(READ_SDA)receive++;
delay_us(1);
}
if (!ack)
IIC_NAck();
else
IIC_Ack();
return receive;
}
unsigned char IICWatask2(void)
{
unsigned char i=0;
unsigned char flag=0x01;
IIC_SCL=0;
delay_us(2);
IIC_SDA=1;
IIC_SCL=1;
delay_us(6);
while((IIC_SDA==1)&&(i<250))
i++;
flag=IIC_SDA;
IIC_SCL=0;
return(flag);
}
void IICSendask(void)
{
IIC_SDA=0;
delay_us(3);
IIC_SCL=1;
delay_us(6);
delay_us(2);
IIC_SCL=0;
IIC_SDA=1;
delay_us(3);
}
unsigned char IICRECVbyte(void)
{
unsigned char i;
unsigned char temp=0;
IIC_SCL=0;
IIC_SDA=1;
for (i=0;i<8;i++)
{
IIC_SCL=1;
delay_us(5);
temp=temp<<1;
if(IIC_SDA==1)
temp=temp|0x01;
else
temp=temp&0xfe;
IIC_SCL=0;
}
return(temp);
}
void AD7745_RESET(void)
{
IIC_Start();
IIC_Send_Byte(0xBF);
IIC_Stop();
}
unsigned char SETUP_7745(unsigned char addr,unsigned char value)
{
unsigned char flag;
flag=0x01;
IIC_Start();
IIC_Send_Byte(0x90);
if(IICWatask2()!=0)
flag=1;
else
flag=0;
IIC_Send_Byte(addr);
if(IICWatask2()!=0)
flag=1;
else
flag=0;
IIC_Send_Byte(value);
if(IICWatask2()!=0)
flag=1;
else
flag=0;
IIC_Stop();
return(flag);
}
void GET7745value(unsigned char *p,unsigned char n)
{ unsigned char i;
unsigned char flagw;
IIC_Start();
IIC_Send_Byte(0x90);
flagw=IICWatask2();
IIC_Send_Byte(0x01);
flagw=IICWatask2();
IIC_Start();
IIC_Send_Byte(0x91);
flagw=IICWatask2();
for(i=0;i<n;i++)
{ *p=IICRECVbyte();
if(i!=n-1)
IICSendask();
else
IICSendask();
p++;
}
IIC_Stop();
}
// #define CapDacvalue 4.
// capdacreg=(int)((CapDacvalue*0x7F)/17
// capdacreg=0x80|capdacre
// AD7745_RESET(
// SETUP_7745(0x07,0x80
// SETUP_7745(0x09,0x2B
// SETUP_7745(0x0A,0xA1
// SETUP_7745(0x0B,capdacreg);
// GET7745value(MRD,3);
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1