AD9832两相正弦信号发生程序
0赞
发表于 6/12/2012 8:13:53 PM
阅读(5495)
函数名称:延时函数,void Delay(unsigned int i)
函数功能:延时时间为——(0.565i+1.13)uS
入口参数:
出口参数:
***********************************************************************/
void Delay(unsigned int i)
{
//unsigned char j;
for(i;i>0;i--)
{}
}
/***********************************************************************
函数名称:发送子函数,void SendDate(unsigned int Date)
函数功能:发送16位地址和数据
入口参数:
出口参数:
***********************************************************************/
void SendDate(unsigned int DataA,DataB)
{
unsigned int i;
SY9832=0; //When this input is taken low, the internal logic is informed that a Date is being loaded into the device.
SCLK9832=1; //Date is clocked into the AD9832 on each falling SCLK edge.
for (i=0;i<16;i++)
{
SCLK9832=1;
DataA<<=1;
SDA9832_A=CY;
DataB<<=1;
SDA9832_B=CY;
Delay(1);
SCLK9832=0;
Delay(1);
}
SCLK9832=1;
SY9832=1;
}
/***********************************************************************
函数名称:AD9832初始化子函数,void AD9832Init(void)
函数功能:发送16位地址和数据
入口参数:
出口参数:
***********************************************************************/
/*void AD9832Init(void)
{
SY9832=1;
SendDate(0xf800);//复位AD9832
SendDate(0xb000);//用位选择频率相位寄存器
SendDate(0x3088);//分四次把频率控制字送入寄存器0
SendDate(0x2188);
SendDate(0x3288);
SendDate(0x2300);
SendDate(0x1800);//初始化相位寄存器0
SendDate(0x0900);
SendDate(0x6000);//选择频率寄存器0、相位寄存器0
SendDate(0xc000);//AD9832开始输出
}
*/
/***********************************************************************
函数名称:
函数功能:
入口参数:
出口参数:
***********************************************************************/
void Output(float freq,phaseA_B)
{
unsigned long ddsf,ddsp;
unsigned char ddsf1,ddsp1,i,j;
ddsf=freq*pow(2,32)/25e6;
ddsp=phaseA_B*pow(2,12)/360;
//dds1=dds;
//ww[0]=dds1|0x3000;
//dds1 =dds>>8;
//ww[1]=dds1;
for(i;i<4;i++)
{
ddsf1=ddsf>>i*8;
wwA[i]=ddsf1|wwA[i];
wwB[i]=wwA[i];
}
for(j;j<2;j++)
{
ddsp1=ddsp>>j*8;
wwB[j+4]=ddsp1|wwB[j+4];
}
}
/***********************************************************************
函数名称:主函数,void AD9832Init(void)
函数功能:
入口参数:
出口参数:
***********************************************************************/
void main ()
{ char i;
Init_Device();
Output(50,120);
SendDate(0xD800,0xD800);//复位AD9832
Delay(100);
SendDate(0x9000,0x9000);//用位选择频率寄存器和相位偏移寄存器
for(i=0;i<8;i++)
{
SendDate(wwA[i],wwB[i]);
}
Delay(100);
for(;;){}
}
