MSP430驅(qū)動DDS模塊AD9851
#include"msp430x14x.h"
#definead9581_w_clkP2DIR|=BIT0//寫時鐘信號于P2.0口
#definead9581_w_clk_HP2OUT|=BIT0//P2.0輸出高電平
#definead9581_w_clk_LP2OUT&=~BIT0//P2.0輸出低電平
#definead9851_fq_upP2DIR|=BIT1//寫頻率值于P2.1口
#definead9851_fq_up_HP2OUT|=BIT1//P2.1輸出高電平
#definead9851_fq_up_LP2OUT&=~BIT1//P2.1輸出低電平
#definead9851_restP2DIR|=BIT2//寫復(fù)位信號P2.1口
#definead9851_rest_HP2OUT|=BIT2//P2.2輸出高電平
#definead9851_rest_LP2OUT&=~BIT2//P2.2輸出低電平
#definead9851_bit_dataP4DIR|=BIT7//寫數(shù)據(jù)于P4.7口
#definead9851_bit_data_HP4OUT|=BIT7//P4.7輸出高電平
#definead9851_bit_data_LP4OUT&=~BIT7//P4.7輸出低電平
//***************************************************//
//ad9851復(fù)位(并口模式)//
//---------------------------------------------------//
voidad9851_reset()
{
ad9581_w_clk;
ad9581_w_clk_L;
ad9851_fq_up;
ad9851_fq_up_L;
//rest信號
ad9851_rest;
ad9851_rest_L;
ad9851_bit_data_H;
ad9851_bit_data_L;
}
//***************************************************//
//ad9851復(fù)位(并口模式)//
//---------------------------------------------------//
voidad9851_reset_serial()
{
ad9581_w_clk;
ad9581_w_clk_L;
ad9851_fq_up;
ad9851_fq_up_L;
//rest信號
ad9851_rest;
ad9851_rest_L;
ad9851_bit_data_H;
ad9851_bit_data_L;
//w_clk信號
//ad9581_w_clk;
ad9581_w_clk_L;
ad9581_w_clk_H;
ad9581_w_clk_L;
//fq_up信號
//ad9851_fq_up;
ad9851_fq_up_L;
ad9851_fq_up_H;
ad9851_fq_up_L;
}
//***************************************************//
//向ad9851中寫命令與數(shù)據(jù)(并口)//
//---------------------------------------------------//
voidad9851_wr_parrel(unsignedcharw0,doublefrequence)
{
unsignedcharw;
longinty;
doublex;
//計算頻率的HEX值
x=4294967295/180;//適合180M晶振/180為最終時鐘頻率(或30M六倍頻)
//如果時鐘頻率不為180MHZ,修改該處的頻率值,單位MHz!??!
frequence=frequence/1000000;
frequence=frequence*x;
y=frequence;
P4DIR|=0xFF;
//寫w0數(shù)據(jù)
w=w0;
P4OUT|=w;//w0
ad9581_w_clk_H;
ad9581_w_clk_L;
//寫w1數(shù)據(jù)
w=(y>>24);
P4OUT|=w;//w1
ad9581_w_clk_H;
ad9581_w_clk_L;
//寫w2數(shù)據(jù)
w=(y>>16);
P4OUT|=w;//w2
ad9581_w_clk_H;
ad9581_w_clk_L;
//寫w3數(shù)據(jù)
w=(y>>8);
P4OUT|=w;//w3
ad9581_w_clk_H;
ad9581_w_clk_L;
//寫w4數(shù)據(jù)
w=(y>>=0);
P4OUT|=w;//w4
ad9581_w_clk_H;
ad9581_w_clk_L;
//移入始能
ad9581_w_clk_H;
ad9581_w_clk_L;
}
//***************************************************//
//向ad9851中寫命令與數(shù)據(jù)(串口)//
//---------------------------------------------------//
voidad9851_wr_serial(unsignedcharw0,doublefrequence)
{
unsignedchari,w;
longinty;
doublex;
ad9851_bit_data;
//計算頻率的HEX值
x=4294967295/180;//適合180M晶振/180為最終時鐘頻率(或30M六倍頻)
//如果時鐘頻率不為180MHZ,修改該處的頻率值,單位MHz?。?!
frequence=frequence/1000000;
frequence=frequence*x;
y=frequence;
//寫w4數(shù)據(jù)
w=(y>>=0);
for(i=0;i<8;i++)
{
ad9851_bit_data_H|((w>>i)&0x01);
ad9581_w_clk_H;
ad9581_w_clk_L;
}
//寫w3數(shù)據(jù)
w=(y>>8);
for(i=0;i<8;i++)
{
ad9851_bit_data_H|((w>>i)&0x01);
ad9581_w_clk_H;
ad9581_w_clk_L;
}
//寫w2數(shù)據(jù)
w=(y>>16);
for(i=0;i<8;i++)
{
ad9851_bit_data_H|((w>>i)&0x01);
ad9581_w_clk_H;
ad9581_w_clk_L;
}
//寫w1數(shù)據(jù)
w=(y>>24);
for(i=0;i<8;i++)
{
ad9851_bit_data_H|((w>>i)&0x01);
ad9581_w_clk_H;
ad9581_w_clk_L;
}
//寫w0數(shù)據(jù)
w=w0;
for(i=0;i<8;i++)
{
ad9851_bit_data_H|((w>>i)&0x01);
ad9581_w_clk_H;
ad9581_w_clk_L;
}
//移入始能
ad9851_fq_up_H;
ad9851_fq_up_L;
}
intmain(void)
{
//Stopwatchdogtimertopreventtimeoutreset
WDTCTL=WDTPW+WDTHOLD;
//---------------------------------------------------//
//并行寫1000Hz程序
ad9851_reset();
ad9851_wr_serial(0x01,1000);
//0X01為開六備頻
//ad9851_wr_parrel(0x00,1000);
//0X00為不開六備頻
//---------------------------------------------------//
//---------------------------------------------------//
//串行寫1000Hz程序
//ad9851_reset_serial();
//ad9851_wr_serial(0x01,1000);
//0X01為開六備頻
//ad9851_wr_serial(0x00,1000);
//0X00為不開六備頻
//---------------------------------------------------//
while(1)
{
}
return0;
}