?? ad9852.c
字號:
#define AD9852_GLOBALS
#include "ad9852.h"
//P0.3~P0.8 -> GPIO -> A0~5
//P0.12 -> GPIO -> DDS_RST
//P0.25 -> GPIO -> DDS_SHAP
//P0.28 -> GPIO -> DDS_WR
//P0.29 -> GPIO -> DDS_RD
//P0.30 -> GPIO -> DDS_FSK
//P1.25 -> GPIO -> DDS_UD
//P1.16~P1.23 -> GPIO -> DATA0~7
//********************************************************************************//
void TimeDly(unsigned int t)
{
unsigned int i;
while(t--)
{
i = 10;
while(i--);
}
}
//********************************************************************************//
void AD9852_WriData(INT8U Add,INT8U Data)
{
//發地址有效
IO0CLR = 0x000001f8;
IO0SET = ((INT32U)Add)<<3;
TimeDly(10);
IO0CLR = DDS_WR_BIT;
//發數據有效
IO1CLR = 0x00ff0000;
IO1SET = ((INT32U)Data)<<16;
TimeDly(10);
//數據寫入
IO0SET = DDS_WR_BIT;
TimeDly(10);
}
//********************************************************************************//
void AD9852_UpData(void)
{
IO1SET = DDS_UD_BIT;
TimeDly(10);
IO1CLR = DDS_UD_BIT;
TimeDly(10);
}
//********************************************************************************//
//復位AD9852
void RST_AD9852(void)
{
//Init_Freq.lFreq = (uint64_t)0x000000EC8EC2;
//相關引腳上升到高電平
IO0SET = DDS_SHAP_BIT;//0.25
IO0SET = DDS_WR_BIT; //0.28
IO0SET = DDS_RD_BIT; //0.29
IO0SET = DDS_FSK_BIT; //0.30
IO1CLR = DDS_UD_BIT; //1.25
IO0CLR = DDS_RST_BIT; //0.12
//硬復位
IO0CLR = DDS_RST_BIT;
IO0SET = DDS_RST_BIT;
TimeDly(1000);
IO0CLR = DDS_RST_BIT;
//寫寄存器
SetMode(SIN_Cfg);
//寫初始化頻率
SetFreq(F1_ADD,2000000);
}
//********************************************************************************//
//寫AD9852的頻率控制器
void SetFreq(INT8U Add,INT32U Freq)
{
INT8U i;
//INT8U fre[6] ={0x01,0xB4,0xE8,0x1B,0x4E,0x80};
TW_FREQ TW_Freq;
//INT8U *pChar = &(TW_Freq.cFreq[0]);
TW_Freq.lFreq = (((((uint64_t)Freq)<<16)/MUL)*(uint64_t)2<<32/(uint64_t)CLK);
//TW_Freq.lFreq = (uint64_t)0xA740DA741;
for(i=0;i<6;i++)
{
AD9852_WriData(4+i,TW_Freq.cFreq[6-i]);
//AD9852_WriData(4+i,fre[i]);
}
AD9852_UpData();
}
//********************************************************************************//
//設置AD9852工作模式
void SetMode(INT8U *pCfg)
{
INT8U i;
INT8U Add = CFG_ADD;
//轉為外同步模式
AD9852_WriData(0x1f,0x00);
//寫寄存器
for(i=0;i<4;i++)
{
AD9852_WriData(Add+i,SIN_Cfg[i]);
}
AD9852_UpData();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -