ADF4350的程序设计
0赞
/*****************************************************************
*文件名:VCO4350.C
*功能:实现4350的频率系数的分配,以及完成送数过程
*说明:无
******************************************************************/
#include "config.h"
#define REF1 10000 //10MHz
struct TData1
{
uint32 RE[6];
}TD1;
/******************************************************************
*函数:Turn_Feq_4350_P
*功能:完成4350的频率分配,正向锁定
*说明:Feq:待锁定的频率,step:步长,prescale:预分频系数
*******************************************************************/
void Turn_Feq_4350_P(uint32 Feq,uint16 Step,uint8 prescaler)
{
uint8 prescaler_S;
if(prescaler==4) prescaler_S=0;
if(prescaler==8) prescaler_S=1;
TD1.RE[5]=(0x01<<22) //DIGITAL LOCK DETECT
|(0x03<<19)
|0x05;
TD1.RE[4]=(0x01<<23)
|((REF1/Step*2)<<12) //BAND SELECT CLOCK DIVIDER
|(0x01<<5) //RF OUTPUT ENABLE
|(0x03<<3) //OUTPUT POWER +5
|0x04;
TD1.RE[3]=(0x00<<18)
|(150<<3) //FAST LOCK 150
|0x03;
TD1.RE[2]=(0x00<<29) //LOW NOISE
|(0x06<<26) //DIGITAL LOCK DETECT
|(0x01<<14) //R DIV
|(0x07<<9) //CHARGE PUMP 2.5mA
|(0x01<<7) //LDP
|(0x01<<6) //POSITIVE
|0x02;
TD1.RE[1]=(prescaler_S<<27) //PRESCALER 8/9 | 4/5
|(0x01<<15) //PHASE
|(((REF1/Step))<<3) //MOD
|0x01;
TD1.RE[0]=((Feq/REF1)<<15) //INT
|(((Feq%REF1)/Step)<<3) //FRAC
|0x00;
}
/***********************************************************************
*函数:OutputADF4350
*功能:完成送数的过程
*说明:无
************************************************************************/
void OutputADF4350(uint8 indexPll)
{
uint8 i=0,j=0;
uint32 AndRef=0x80000000;
//---------------setup Bits----------------
for(i=0;i<6;i++)
{
if(indexPll==pll_one) PULL_DOWN(LE1,0);
if(indexPll==pll_two) PULL_DOWN(LE2,0);
if(indexPll==pll_three) PULL_DOWN(LE3,0);
if(indexPll==pll_four) PULL_DOWN(LE4,0);
DelayNS(1);
AndRef=0x80000000;
for(j=0;j<32;j++)
{
if((TD1.RE[5-i])&AndRef) PULL_UP(SPI_DATA,0);
else PULL_DOWN(SPI_DATA,0);
AndRef=AndRef>>1;
PULL_UP(SPI_CLK,1);
DelayNS(1);
PULL_DOWN(SPI_CLK,1);
DelayNS(1);
}
DelayNS(1);
if(indexPll==pll_one) PULL_UP(LE1,0);
if(indexPll==pll_two) PULL_UP(LE2,0);
if(indexPll==pll_three) PULL_UP(LE3,0);
if(indexPll==pll_four) PULL_UP(LE4,0);
DelayNS(1);
}
}
