⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adf4001.c

📁 基于ADF4001的锁相环程序
💻 C
字号:
#include<avr/io.h>
#define uchar unsigned char
#define ulong  unsigned long
#define nop() __asm__ __volatile__ ("nop");
#define ADF4110_CONTROL PORTB
#define ADF4110_DDR     DDRB
#define ADF4110_LE_H     ADF4110_CONTROL|=_BV(PB0)
#define ADF4110_LE_L     ADF4110_CONTROL&=~_BV(PB0)
#define ADF4110_DATA_H   ADF4110_CONTROL|=_BV(PB1)
#define ADF4110_DATA_L   ADF4110_CONTROL&=~_BV(PB1)
#define ADF4110_CLK_H    ADF4110_CONTROL|=_BV(PB2)
#define ADF4110_CLK_L    ADF4110_CONTROL&=~_BV(PB2)
#define ADF4110_CE_H     ADF4110_CONTROL|=_BV(PB3)
#define ADF4110_CE_L     ADF4110_CONTROL&=~_BV(PB3)
volatile unsigned long test_data;///////////////////////test/////////////////////
void delayN(unsigned int N)
{  unsigned int i;
   for(i=0;i<N;i++)
      nop();
}
void ADF4110_data_input(unsigned long data)
{  uchar i=0;
   uchar N=24; 
   do
     {  test_data=0x800000>>i;////////////////test///////////
        test_data=test_data&data; /////test///////////
       if(test_data!=0 )
        { ADF4110_DATA_H;
	    }
       else
	    { ADF4110_DATA_L; 
	    }
		ADF4110_CLK_H;
	    i++;
		ADF4110_CLK_L;
	  }while(--N);
      ADF4110_LE_H;
	  ADF4110_LE_L;
}
void ADF4110_INT()
{  ADF4110_DDR|=_BV(0)|_BV(1)|_BV(2)|_BV(3); //把ADF4110_DDR设置成输出,但不影响剩下的IO口
   //ADF4110_CONTROL&=(~_BV(0))&(~_BV(1))&(~_BV(2));//把ADF4110的用到的四个断口输出置为0
   ADF4110_LE_L;
   ADF4110_CLK_L;
   ADF4110_DATA_L;
   ADF4110_CE_H;
}
/********************************************************************************************
函数adf4110_control 的入口参数: lock_frequency 为需要锁定的频率(adf4110要大于80M) 
step_frequency 为频率的步进(也就是参考分频器的输出频率)   FREFin_frequency 为晶振频率
以上参数的单位都是HZ
********************************************************************************************/
void adf4110_control(ulong lock_frequency,ulong step_frequency,ulong FREFin_frequency)
{  ulong adf4110_data;
   ulong N;
   adf4110_data=0x1ff893;//极性:正
   //adf4110_data=0x1ff813;//极性:负
   ADF4110_data_input(adf4110_data);//set initialization latch,P=8  fastlock mode disabled, Icp=5ma
   delayN(40);//延时60us
   adf4110_data=0x020000|( (FREFin_frequency/step_frequency)<<2 );
   ADF4110_data_input(adf4110_data);//set R latch
   delayN(40);//延时60us
   N=lock_frequency/step_frequency;
   adf4110_data=0x000001|(N<<8);
   ADF4110_data_input(adf4110_data);//set AB latch
}
void main()
{  ADF4110_INT();
   adf4110_control(34000000,100000,5000000);
   while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -