2010-03-30 14:22
/*********************************************************************
山东科技大学电气工程研究所
开发人员:柴龙庆
软件功能:初始化DDS
接口简介:
SDA9832_A —— DDS_A_SDATA
SDA9832_B —— DDS_B_SDATA
SCLK9832 —— DDS_SCLK
SY9832 —— DDS_FSYNC
频率可调范围:1Hz-10MHz
相位差可调范围:0°- 360°
**********************************************************************/
#include "C8051F360.h"
#include "math.h"
sbit SDA9832_A=P2^0;
sbit SDA9832_B=P2^3;
sbit SCLK9832=P2^1;
sbit SY9832=P2^2;
unsigned int wwA[]={0x3000,0x2100,0x3200,0x2300,0x1800,0x0900,0x6000,0xc000};
unsigned int wwB[]={0x3000,0x2100,0x3200,0x2300,0x1800,0x0900,0x6000,0xc000};
/***********************************************************************
函数名称:控制器初始化子函数
1、void Oscillator_Init()
2、void Init_Device(void)
函数功能:
入口参数:
出口参数:
***********************************************************************/
void Oscillator_Init()
{
SFRPAGE = CONFIG_PAGE;
OSCICN = 0x83;//单片机工作频率24.5MHz
}
void Init_Device(void)
{
Oscillator_Init();
PCA0MD = 0x00;
P2MDOUT = 0xFF;
XBR1 = 0x40;
}
/***********************************************************************
函数名称:延时函数,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(;;){}
}