#include "ti_msp_dl_config.h"
#include "ad9850.h"
#include <stdio.h>#define ad9850_w_clk(bit) ((bit) == 0 ? DL_GPIO_clearPins(GPIOA, GPIO_AD9850_PIN_W_CLK_PIN) : DL_GPIO_setPins(GPIOA, GPIO_AD9850_PIN_W_CLK_PIN) )
#define ad9850_fq_ud(bit) ((bit) == 0 ? DL_GPIO_clearPins(GPIOB, GPIO_AD9850_PIN_FQ_UD_PIN) : DL_GPIO_setPins(GPIOB, GPIO_AD9850_PIN_FQ_UD_PIN) )
#define ad9850_rest(bit) ((bit) == 0 ? DL_GPIO_clearPins(GPIOA, GPIO_AD9850_PIN_REST_PIN) : DL_GPIO_setPins(GPIOA, GPIO_AD9850_PIN_REST_PIN) )
#define ad9850_bit_data(bit) ((bit) == 0 ? DL_GPIO_clearPins(GPIOA, GPIO_AD9850_PIN_BIT_DATA_PIN) : DL_GPIO_setPins(GPIOA, GPIO_AD9850_PIN_BIT_DATA_PIN) )
// 串行初始化
void ad9850_init_serial(void) {
ad9850_w_clk(0);
ad9850_fq_ud(0);
//rest信号
ad9850_rest(0);
ad9850_rest(1);
ad9850_rest(0);
//w_clk信号
ad9850_w_clk(0);
ad9850_w_clk(1);
ad9850_w_clk(0);
//fq_up信号
ad9850_fq_ud(0);
ad9850_fq_ud(1);
ad9850_fq_ud(0);
}
//***************************************************//
// 向ad9850中写命令与数据(串口) //
//---------------------------------------------------//
void ad9850_wr_serial(unsigned char w0, const double frequence) {
unsigned char i = 0, w = 0;
long long y = 0;
long double x = 0.0f;
//计算频率的HEX值
x = 4294967295.0/125.0;//适合125M晶振
long double freq = frequence;
freq = freq / 1000000.0 * x;
y = freq;
//写w4数据
w=(y>>=0);
for(i=0;i<8;i++) {
uint8_t data = (w>>i)&0x01;
ad9850_bit_data(data);
ad9850_w_clk(1);
ad9850_w_clk(0);
}
//写w3数据
w=(y>>8);
for(i=0;i<8;i++) {
uint8_t data = (w>>i)&0x01;
ad9850_bit_data(data);
ad9850_w_clk(1);
ad9850_w_clk(0);
}
//写w2数据
w=(y>>16);
for(i=0;i<8;i++) {
uint8_t data = (w>>i)&0x01;
ad9850_bit_data(data);
ad9850_w_clk(1);
ad9850_w_clk(0);
}
//写w1数据
w=(y>>24);
for(i=0;i<8;i++) {
uint8_t data = (w>>i)&0x01;
ad9850_bit_data(data);
ad9850_w_clk(1);
ad9850_w_clk(0);
}
//写w0数据
w=w0;
for(i=0;i<8;i++) {
uint8_t data = (w>>i)&0x01;
ad9850_bit_data(data);
ad9850_w_clk(1);
ad9850_w_clk(0);
}
//移入始能
ad9850_fq_ud(1);
ad9850_fq_ud(0);
}