ADF5355的C设置代码

66 篇文章 22 订阅
58 篇文章 27 订阅

#include "config.h" 
//26MHZ  0.5PPM  本振源
#define R00 0X201050
#define R01 0X89D89D1
#define R02 0X1180822
#define R03 0x3
#define R04 0X30008B84  //差分时钟输入(目前芯片有问题)
#define R04_EN 0X30008B94
#define R05 0X800025			
#define R06 0X35A08076
#define R07 0X12000007	
#define R08 0X102D0428
#define R09 0XB0B3CC9
#define R10 0XC0107A
#define R11 0X61300B
#define R12 0X1041C	


#define Fref_in 26000	 //输入时钟
#define F_pfd   26000  //鉴相频率
#define MODE1    16777216; //第一部分小数分频模数
#define MODE2    130;  //第二部分小数分频模数

/*25MHZ  20PPM  本振源
#define R00 0X201100
#define R01 0X1
#define R02 0X7D2
#define R03 0x3
#define R04 0X30008B84  //差分时钟输入(目前芯片有问题)
#define R04_EN 0X30008B94
#define R05 0X800025			
#define R06 0X35A08076
#define R07 0X12000007	
#define R08 0X102D0428
#define R09 0XB0ABCC9
#define R10 0XC00FBA
#define R11 0X61300B
#define R12 0X1041C	


#define Fref_in 25000	 //输入时钟
#define F_pfd   25000  //鉴相频率
#define MODE1    16777216; //第一部分小数分频模数
#define MODE2    125;  //第二部分小数分频模数
*/
void WriteToADF5355(unsigned long BUF)   //写寄存器 一共32位
{unsigned char 	j = 0;
 unsigned long ValueToWrite = 0;
  ValueToWrite =BUF;
  ADF5355_CLK=0;ADF5355_LE=0;
  for(j=0; j<32; j++)
     {if(0x80000000 == (ValueToWrite & 0x80000000))
       {ADF5355_DATA=1;}   //Send one to SDO pin
       else{ADF5355_DATA=0;}   //Send zero to SDO pin   
       ADF5355_CLK=1;
       ValueToWrite <<= 1; //Rotate data
       ADF5355_CLK=0;
      }
  ADF5355_CLK=0;
  ADF5355_LE=1;ADF5355_LE=0;
}




void   Write_frequence_AMP(unsigned long Freq,unsigned long Amp)  //写频率和幅度
//AMP ==> 0:-4dbm 1:-1dbm 2:2dbm 3:5dbm
{float Freq_N,Freq_temp;
 unsigned long 	INT,FRAC1,FRAC2; //整数分频,  小数分频1 小数分频2  
 unsigned long R0_temp=0;  //控制INT 
 unsigned long R4_temp=0,MODE2_temp; //改变输出的分频控制字,一共分成7段   
 unsigned long Out_Divider,RF_Divider;//输出分频控制,3位  及对应的分频数 
 unsigned long xdata I_CP=9000,I_BLEED_N;
if((53125<=Freq)&&(Freq<106250))   { Out_Divider=6; RF_Divider=64;}  //分频段
if((106250<=Freq)&&(Freq<212500))  { Out_Divider=5; RF_Divider=32;} //                                                         
if((212500<=Freq)&&(Freq<425000))  { Out_Divider=4; RF_Divider=16;}  //
if((425000<=Freq)&&(Freq<850000))  { Out_Divider=3; RF_Divider=8; }   //
if((850000<=Freq)&&(Freq<1700000)) { Out_Divider=2; RF_Divider=4; }   //
if((1700000<=Freq)&&(Freq<3400000)){ Out_Divider=1; RF_Divider=2; }  //
if((3400000<=Freq)&&(Freq<6800000)){ Out_Divider=0; RF_Divider=1; }
  Freq_temp=Freq;
  Freq2VCO=(Freq_temp*RF_Divider)*2;//计算出2倍VCO,从B端口输出
  //计算整数分频INT;小数分频1FRAC1;小数分频2FRAC2
  Freq_temp=Freq;  
  Freq_N=(Freq_temp*RF_Divider)/F_pfd; //计算出N分频值,带有小数位

  Freq_temp=Freq_N;
  INT=(unsigned long)Freq_temp;//计算出整数分频INT

  I_BLEED_N=I_CP*4/(INT*375); //计算bleed 电流对应的值
  I_BLEED_N=(unsigned long)I_BLEED_N;

  Freq_temp=(Freq_N-INT)*MODE1;
  FRAC1=(unsigned long)Freq_temp;    //计算出小数分频1-FRAC1

  Freq_temp=(Freq_N-INT)*MODE1
  Freq_temp=Freq_temp-FRAC1;
  FRAC2=(unsigned long)Freq_temp*MODE2;

  MODE2_temp=MODE2;
  WriteToADF5355((Out_Divider<<21)|(I_BLEED_N<<13)|(Amp<<4)|0X35000046);//R6
  WriteToADF5355(R04_EN);  //R4-计数器复位  
  WriteToADF5355(2|(MODE2_temp<<4)|(FRAC2<<18));//R2
  WriteToADF5355(1|(FRAC1<<4));  //R1
  WriteToADF5355(INT<<4);  //R0
  WriteToADF5355(R04);  //R4-计数器启动
  WriteToADF5355(0X200000|(INT<<4));
}


void Init_ADF5355(void)
{ 
  
 WriteToADF5355(R12);	
 WriteToADF5355(R11);
 WriteToADF5355(R10);
 WriteToADF5355(R09);
 WriteToADF5355(R08);
 WriteToADF5355(R07);
 WriteToADF5355(R06);   
 WriteToADF5355(R05);
 WriteToADF5355(R04);
 WriteToADF5355(R03);
 WriteToADF5355(R02);
 WriteToADF5355(R01);
 WriteToADF5355(R00);  

}

这是来源网络的一段代码,是否争取还位置,需要测试一下。之后的实验要用这个代码测试,如果不成功就要就要根据数据手册死磕每个寄存器的内容。

暂时放在这里之后调试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值