关于HMC833LP6GE出现的问题
时间:10-02
整理:3721RD
点击:
跪求高手帮忙分析分析下面的程序中对HMC833LP6GE的寄存器配置是否正确,此程序下载硬件调试没有出来程序中设置的频率,只有2分频VCO基本频率,没加程序的时候是2.55GMHz加上程序后是1.27GMHz
//说明:利用HMC833LP6CE二分频产生1030M频率,晶振是20M,鉴相频率是20M ,该程序为整数分频
#include <reg922.h>
#include<stdio.h>
#include "intrins.h"
sbit SEN=P0^0;
sbit SDI = P0^1;
sbit CLK = P0^2;
sbit SD_LD0=P0^3;
//函数声明
void PORT_INIT();
void Delay_us(unsigned int n);
void Write_REG(unsigned char ADD,unsigned long int WR_DAT);
unsigned long int Read_REG(unsigned char ADD);
/****************************************/
void main()
{
// unsigned long int return_dat;
Delay_us(500); //HMC833开机时间为250US,所以单片机工作要延时
Delay_us(500);
PORT_INIT();
SEN=0; //选择模式,如果首先是SEN的上升沿,就选择一个从机模式;如果首先是CLK的上升沿则选择多从机的模式
_nop_();
_nop_();
SEN=1;
_nop_();
_nop_();
Write_REG(0x00,0x000000); //如果电源开电时间超过了250US,要进行一次软件复位
Write_REG(0x00,0x000020); //从复位状态释放出来
Write_REG(0x0F,0x0000c1); //锁定指示配置,设置为一直使能,并输出为锁定指示
Write_REG(0x02,0x000001); //设定R=1值
Write_REG(0x06,0x2027ca); //选择整数模式
// Write_REG(0x09,0x1fffff); //设置电荷泵的电流为2.54mA,补偿电流为235UA
Write_REG(0x09,0x0bcf3c); //设置电荷泵的电流为1.2mA,补偿电流为300uA
Write_REG(0x05,0x000b88); //配置VCO_01
Write_REG(0x05,0x006110); //配置VCO_02 2分频
Write_REG(0x05,0x002898); //配置VCO_03 不倍频
Write_REG(0x05,0x000000); //清楚VCO寄存器的地址
Write_REG(0x03,0x00006d); //频率为1030,是由2060二分频,刚好能被整除 ,为整数分频的N
// Write_REG(0x04,0x000000); //小数分频的N
while(1)
{
Delay_us(500);
if(SD_LD0==0)
{
Write_REG(0x00,0x000000); //如果电源开电时间超过了250US,要进行一次软件复位
Write_REG(0x00,0x000020); //从复位状态释放出来
Write_REG(0x0F,0x0000c1); //锁定指示配置,设置为一直使能,并输出为锁定指示
Write_REG(0x02,0x000001); //设定R=1值
Write_REG(0x06,0x2027ca); //选择整数模式
// Write_REG(0x09,0x1fffff); //设置电荷泵的电流为2.54mA,补偿电流为235UA
Write_REG(0x09,0x0bcf3c); //设置电荷泵的电流为1.2mA,补偿电流为300uA
Write_REG(0x05,0x000b88); //配置VCO_01
Write_REG(0x05,0x006110); //配置VCO_02 2分频
Write_REG(0x05,0x002898); //配置VCO_03 不倍频
Write_REG(0x05,0x000000); //清楚VCO寄存器的地址
Write_REG(0x03,0x00006d); //频率为1030,是由2060二分频,刚好能被整除,为整数分频的N
// Write_REG(0x04,0x000000); //小数分频的N
}
else;
}
}
void PORT_INIT()
{
P0M1 = 0X08;
P0M2 = 0X00;
}
/*延时函数
/****************************************************************************************/
void Delay_us(unsigned int n)
{
unsigned int i;
for(i=0;i<n;i++)
{
_nop_();
}
}
/**************给HMC833寄存器写数据函数*************************/
void Write_REG(unsigned char ADD,unsigned long int WR_DAT)
{
unsigned int m=0,j=0;
unsigned long int temp1=0x800000;
unsigned char temp2=0x20;
// SEN=0;
_nop_();
_nop_();
SEN=1;
SDI=0;
CLK=0;
_nop_();
_nop_();
_nop_();
_nop_();
CLK=1;
for(m=0;m<6;m++)
{
CLK=1;
_nop_();
_nop_();
if(( ADD&temp2)==0x0)
SDI=0;
else
SDI=1;
_nop_();
CLK=0;
_nop_();
temp2=temp2>>1;
}
for(j=0;j<24;j++)
{
CLK=1;
_nop_();
if((WR_DAT&temp1)==0X0)
SDI=0;
else
SDI=1;
_nop_();
CLK=0 ;
_nop_();
temp1=temp1>>1;
}
CLK=1;
Delay_us(2);
CLK=0;
Delay_us(2);
CLK=1;
Delay_us(2);
CLK=0;
Delay_us(2);
SEN=0;
Delay_us(10);
}
//说明:利用HMC833LP6CE二分频产生1030M频率,晶振是20M,鉴相频率是20M ,该程序为整数分频
#include <reg922.h>
#include<stdio.h>
#include "intrins.h"
sbit SEN=P0^0;
sbit SDI = P0^1;
sbit CLK = P0^2;
sbit SD_LD0=P0^3;
//函数声明
void PORT_INIT();
void Delay_us(unsigned int n);
void Write_REG(unsigned char ADD,unsigned long int WR_DAT);
unsigned long int Read_REG(unsigned char ADD);
/****************************************/
void main()
{
// unsigned long int return_dat;
Delay_us(500); //HMC833开机时间为250US,所以单片机工作要延时
Delay_us(500);
PORT_INIT();
SEN=0; //选择模式,如果首先是SEN的上升沿,就选择一个从机模式;如果首先是CLK的上升沿则选择多从机的模式
_nop_();
_nop_();
SEN=1;
_nop_();
_nop_();
Write_REG(0x00,0x000000); //如果电源开电时间超过了250US,要进行一次软件复位
Write_REG(0x00,0x000020); //从复位状态释放出来
Write_REG(0x0F,0x0000c1); //锁定指示配置,设置为一直使能,并输出为锁定指示
Write_REG(0x02,0x000001); //设定R=1值
Write_REG(0x06,0x2027ca); //选择整数模式
// Write_REG(0x09,0x1fffff); //设置电荷泵的电流为2.54mA,补偿电流为235UA
Write_REG(0x09,0x0bcf3c); //设置电荷泵的电流为1.2mA,补偿电流为300uA
Write_REG(0x05,0x000b88); //配置VCO_01
Write_REG(0x05,0x006110); //配置VCO_02 2分频
Write_REG(0x05,0x002898); //配置VCO_03 不倍频
Write_REG(0x05,0x000000); //清楚VCO寄存器的地址
Write_REG(0x03,0x00006d); //频率为1030,是由2060二分频,刚好能被整除 ,为整数分频的N
// Write_REG(0x04,0x000000); //小数分频的N
while(1)
{
Delay_us(500);
if(SD_LD0==0)
{
Write_REG(0x00,0x000000); //如果电源开电时间超过了250US,要进行一次软件复位
Write_REG(0x00,0x000020); //从复位状态释放出来
Write_REG(0x0F,0x0000c1); //锁定指示配置,设置为一直使能,并输出为锁定指示
Write_REG(0x02,0x000001); //设定R=1值
Write_REG(0x06,0x2027ca); //选择整数模式
// Write_REG(0x09,0x1fffff); //设置电荷泵的电流为2.54mA,补偿电流为235UA
Write_REG(0x09,0x0bcf3c); //设置电荷泵的电流为1.2mA,补偿电流为300uA
Write_REG(0x05,0x000b88); //配置VCO_01
Write_REG(0x05,0x006110); //配置VCO_02 2分频
Write_REG(0x05,0x002898); //配置VCO_03 不倍频
Write_REG(0x05,0x000000); //清楚VCO寄存器的地址
Write_REG(0x03,0x00006d); //频率为1030,是由2060二分频,刚好能被整除,为整数分频的N
// Write_REG(0x04,0x000000); //小数分频的N
}
else;
}
}
void PORT_INIT()
{
P0M1 = 0X08;
P0M2 = 0X00;
}
/*延时函数
/****************************************************************************************/
void Delay_us(unsigned int n)
{
unsigned int i;
for(i=0;i<n;i++)
{
_nop_();
}
}
/**************给HMC833寄存器写数据函数*************************/
void Write_REG(unsigned char ADD,unsigned long int WR_DAT)
{
unsigned int m=0,j=0;
unsigned long int temp1=0x800000;
unsigned char temp2=0x20;
// SEN=0;
_nop_();
_nop_();
SEN=1;
SDI=0;
CLK=0;
_nop_();
_nop_();
_nop_();
_nop_();
CLK=1;
for(m=0;m<6;m++)
{
CLK=1;
_nop_();
_nop_();
if(( ADD&temp2)==0x0)
SDI=0;
else
SDI=1;
_nop_();
CLK=0;
_nop_();
temp2=temp2>>1;
}
for(j=0;j<24;j++)
{
CLK=1;
_nop_();
if((WR_DAT&temp1)==0X0)
SDI=0;
else
SDI=1;
_nop_();
CLK=0 ;
_nop_();
temp1=temp1>>1;
}
CLK=1;
Delay_us(2);
CLK=0;
Delay_us(2);
CLK=1;
Delay_us(2);
CLK=0;
Delay_us(2);
SEN=0;
Delay_us(10);
}