|
资料上讲,AD9850 的频率/相位控制字一共有 40 位,其中 32
位为频率控制字,5 位为相位控制字,1 位是电源休眠
控制,最后 2 位为工作方式控制,应用中将 1 位电源
休眠控制、两位工作方式控制字设置为“000”。
/********************************************
信号发生器
*********************************************/
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define ad9850_w_clk PORTB_PB0
#define ad9850_fu_ud PORTB_PB1
#define ad9850_data PORTB_PB2
#define ad9850_reset PORTB_PB3
/*******************锁相环PLL设置***************/
void PLL_Init() //总线时钟Fbus=60MHz
{
CLKSEL_PLLSEL=0;
PLLCTL_PLLON=1;
REFDV=0x40|0x03;
SYNR =0xc0|0x0e;
POSTDIV=0;
_asm(nop);
_asm(nop);
while(CRGFLG_LOCK!=1);
CLKSEL_PLLSEL=1;
}
/****************ad9850初始化******************/
void ad9850_init()
{
ad9850_w_clk=0;
ad9850_fu_ud=0;
//rest信号
ad9850_reset=0;
ad9850_reset=1;
ad9850_reset=0;
//w_clk信号
ad9850_w_clk=0;
ad9850_w_clk=1;
ad9850_w_clk=0;
//fu_ud信号
ad9850_fu_ud=0;
ad9850_fu_ud=1;
ad9850_fu_ud=0;
}
//********************向ad9851中写命令与数据(串口)*******************************//
void ad9850_writebyte(unsigned char w0,double frequence)
{
unsigned char i;
long int w,y;
double x;
//计算频率的HEX值
x=4294967295/125;//适合125M晶振/180为最终时钟频率
//如果时钟频率不为125MHZ,修改该处的频率值,单位MHz
frequence=frequence/1000000;
frequence=frequence*x;
y=(long int)frequence;
//写w4数据
w=y;
for(i=0;i<8;i++)
{
ad9850_data=(w>>i)&0x01;
ad9850_w_clk=1;
ad9850_w_clk=0;
}
//写w3数据
w=(y>>8);
for(i=0;i<8;i++)
{
ad9850_data=(w>>i)&0x01;
ad9850_w_clk=1;
ad9850_w_clk=0;
}
//写w2数据
w=(y>>16);
for(i=0;i<8;i++)
{
ad9850_data=(w>>i)&0x01;
ad9850_w_clk=1;
ad9850_w_clk=0;
}
//写w1数据
w=(y>>24);
for(i=0;i<8;i++)
{
ad9850_data=(w>>i)&0x01;
ad9850_w_clk=1;
ad9850_w_clk=0;
}
//写w0数据
w=w0;
for(i=0;i<8;i++)
{
ad9850_data=(w>>i)&0x01;
ad9850_w_clk=1;
ad9850_w_clk=0;
}
//移入始能
ad9850_fu_ud=1;
ad9850_fu_ud=0;
}
/****************主函数******************/
void main(void)
{
PLL_Init(); //锁相环PLL设置
DDRB=0X0f; //初始化AD9850对应的IO口
PORTB=0X00;
ad9850_init(); //初始化AD9850
ad9850_writebyte(0x40,100); //设置信号相位与频率 (想设置初相位为90度)
DDRE_DDRE5=1; //PE5设为输出
PORTE_PE5 =0; //亮LED1
for(;;);
}
次程序频率可精确设置,但是相位无法正确输出,那位大神知道,请赐教!!!!!!!!!!!!!! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|