#include "ADA2200.h"
u8 DataRead3[3];
void delayLoop2(unsigned int Time) //延时程序
{
Time*=3;
while(Time--)
{
__nop();
}
}
void ada2200_GpioInit() //ADA2200 GPIO口初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;// DIN/DIO
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//CLK
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;//CS
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
void Write3bytesADA(u16 Reg ,u8 data)
{
int i=0;
Temp_CS000;
for(i=0; i<16; i++)
{
if(Reg & 0x8000)
{
DIN111;
}
else
{
DIN000;
}
Reg<<=1;
SCLOCK000;
delayLoop2(10);
SCLOCK111;
delayLoop2(10);
}
for(i=0;i<8;i++)
{
if((data & 0x80)==0)
{
DIN000;
}
else
{
DIN111;
}
data<<=1;
SCLOCK000;
delayLoop2(10);
SCLOCK111;
delayLoop2(10);
}
Temp_CS111;
}
void ReadFromRegADA(u16 Reg,unsigned char nByte) // nByte is the number of bytes which need to be read
{
int i,j;
unsigned char temp;
DIN111;
Temp_CS000;
temp=0;
DataRead3[0]=0;
DataRead3[1]=0;
DataRead3[2]=0;
// DataRead[3]=0;
for(i=0; i<16; i++)
{
if(Reg & 0x8000)
{
DIN111;
}
else
{
DIN000;
}
Reg<<=1;
SCLOCK000;
delayLoop2(10);
SCLOCK111;
delayLoop2(10);
}
for(i=0; i<nByte; i++)
{
for(j=0; j<8; j++)
{
SCLOCK000;
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0)
{
temp=temp<<1;
}else
{
temp=temp<<1;
temp=temp+0x01;
}
delayLoop2(10);
SCLOCK111;
delayLoop2(10);
}
DataRead3[i]=temp;
temp=0;
}
Temp_CS111;
}
void ADA2200_Init()
{
ada2200_GpioInit();
delay_ms(1);
// Write2bytesADA(0X0000); //写串行接口
// WritebyteADA(0X24); //MSB优先 SDIO双向 SDO禁用 地址递增
// Write3bytesADA(0X0000,0X00);
// delay_ms(40);
// Write2bytesADA(0X0028); // 写模拟引脚配置
// WritebyteADA(0X01); // 外部时钟 差分输入
Write3bytesADA(0X0028,0X01);
delay_ms(40);
// Write2bytesADA(0X0029); //同步控制
// WritebyteADA(0X0D); //SYNCO close
Write3bytesADA(0X0029,0X0D);
delay_ms(40);
// Write2bytesADA(0X002A); //解调控制
// WritebyteADA(0X18); //移相关闭 RCLK使能 VOCM=0.5VDD
Write3bytesADA(0X002A,0X1A);
delay_ms(40);
// Write2bytesADA(0X002B); //时钟配置
// WritebyteADA(0X12); //Fsi=1/1 Fclk Fm=1/8 Fso
Write3bytesADA(0X002B,0X12);
delay_ms(40);
// Write2bytesADA(0X002C); //数字引脚配置
// WritebyteADA(0X01); //RCLK输出焊盘驱动器使能
Write3bytesADA(0X002C,0X01);
delay_ms(40);
// ReadFromRegAD(0X802B,1);
}
评论2