?? 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設(shè)置成輸出,但不影響剩下的IO口
//ADF4110_CONTROL&=(~_BV(0))&(~_BV(1))&(~_BV(2));//把ADF4110的用到的四個斷口輸出置為0
ADF4110_LE_L;
ADF4110_CLK_L;
ADF4110_DATA_L;
ADF4110_CE_H;
}
/********************************************************************************************
函數(shù)adf4110_control 的入口參數(shù): lock_frequency 為需要鎖定的頻率(adf4110要大于80M)
step_frequency 為頻率的步進(jìn)(也就是參考分頻器的輸出頻率) FREFin_frequency 為晶振頻率
以上參數(shù)的單位都是HZ
********************************************************************************************/
void adf4110_control(ulong lock_frequency,ulong step_frequency,ulong FREFin_frequency)
{ ulong adf4110_data;
ulong N;
adf4110_data=0x1ff893;//極性:正
//adf4110_data=0x1ff813;//極性:負(fù)
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);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -