/*****************************************************
AD9834波形產生程序
*****************************************************/
#include<MSP430x16x.h>
#define FSYNCL P2OUT &= ~BIT5
#define FSYNCH P2OUT |= BIT5
#define SCLKL P2OUT &= ~BIT6
#define SCLKH P2OUT |= BIT6
#define SDATAL P2OUT &= ~BIT7
#define SDATAH P2OUT |= BIT7
double data=1000 ;
#define FCLK 50
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
int x;
/**************************
發送控制字
**************************/
void Send_Con(uint Con_word)
{
uchar i;
FSYNCL;
for(i=0;i<16;i++)
{
if ((Con_word&0x8000)==0x8000)
{SDATAH;}
else
SDATAL ;
Con_word<<=1;
SCLKL;
SCLKH;
}
FSYNCH;
}
/***********************************************************************************
初始化函數:
-------------------------------------------------------------------
功能:軟件位控制,IOUT正弦波,SIGNBITOUT方波,寫FREQREG0,寫PHASE0
Send_Con(0x2038) 一次性寫FREQREG0
Send_Con(0x0038) 單獨改寫FREQREG0的LSB
Send_Con(0x1038) 單獨改寫FREQREG0的MSB
-------------------------------------------------------------------
功能:軟件位控制,IOUT三角波寫FREQREG0,寫PHASE0
Send_Con(0x2002) 一次性寫FREQREG0
Send_Con(0x0002) 單獨改寫FREQREG0的LSB
Send_Con(0x1008) 單獨改寫FREQREG0的 MSB************************************************************************************/
/****************************
發送頻率字
****************************/
void Send_Freq(uint Freq_word)
{
uchar i;
FSYNCL;
for(i=0;i<16;i++)
{
if ((Freq_word&0x8000)==0x8000)
{SDATAH;}
else
SDATAL ;
Freq_word<<=1;
SCLKL;
SCLKH;
}
FSYNCH;
}
/***************************** q
發送相位字
注:根據情況可設定入口參數,設置相位
*****************************/
void Send_Phase()
{
Send_Con(0xC000); //設置初相位為0
}
/*******************************************************
設置頻率值 Freq_value(value)=Freq_data(data)*FCLK/2^28
2^28=268435456=0x10000000
*******************************************************/
void zhengxianbo(ulong Freq_value )
{
ulong value1,value2;
uint LSB_D,MSB_D;
SCLKH;
FSYNCH;
value1= Freq_value;
value2= Freq_value;
LSB_D=(value1%0x4000)+0x4000; //寫FREQ0 REG 的LSB
MSB_D=(value2/0x4000)+0x4000; //寫FREQ0 REG 的MSB
Send_Con(0x2038); //DDS初始化設置,IOUT正弦波,SIGNBITOUT方波,一次性寫FREQREG0
Send_Freq(LSB_D);
Send_Freq(MSB_D);
void Send_Phase();
}
void main()
{uint n;
static ulong x=0;
static ulong Freq_value;
WDTCTL=WDTPW+WDTHOLD;
P2DIR=0Xff;
while(1)
{
for(x=0;x<10;x++)
{
if(x==9)
data=1000;
else
data=data+1000*x;
Freq_value=(ulong)(data*5.3687);
zhengxianbo(Freq_value);
for(n=0;n<20000;n++);
}
}
}