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

📄 adf4118.c

📁 // 移频选频原理 //Fvco=[(P*B)+A]*Frefin/R //P=32 //loop filter 100k----prescribe //R=12.8M/100K=128--
💻 C
字号:
/****************************************Copyright (c)**************************
/******************************************************************************/
// 移频选频原理
//Fvco=[(P*B)+A]*Frefin/R
//P=32
//loop filter	 100k----prescribe
//R=12.8M/100K=128---Parameter1
//Fvco=频点*2+170280 -1400
//B=Fvco/32-----------Parameter2
//A=Fvco-32*B
/******************************************************************************/
#include <iom128v.h>
#include <eeprom.h>
#include <macros.h>
#include <MATH.H>
#include "MF.H"
#include "GJB_define.h"
#define CLK_SEL			(DDRB |=BIT6)
#define CLK_SET  		(PORTB|=BIT6)																			      																					
#define CLK_CLR			(PORTB&=~BIT6)
#define DATA_SEL		(DDRB |=BIT7)
#define DATA_SET		(PORTB|=BIT7)
#define DATA_CLR		(PORTB&=~BIT7)
#ifdef allwinjk11
unsigned char  LCAlarm[6]={0,0,0,0,0,0};
//------------------------------------------------------------------------------	
void delay(int length)
{
while (length >=0)
    length--;
}
//------------------------------------------------------------------------------
void LATCH_SET(UNchar channel)
{
  select_CS(channel);  
 _NOP(); _NOP();
 _NOP(); _NOP();
 select_CS(0);
}	
//------------------------------------------------------------------------------    		
void LATCH_CLR(UNchar channel)	
{
   select_CS(0);
}	
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void Freg_Init(void)
{
   DDRA |= 0xFF;
   DDRC |= (BIT5 + BIT6 + BIT7);
   DDRG |= (BIT0 + BIT1);
   PORTG|=BIT1+BIT0;
   DATA_SEL;
   CLK_SEL;
   DATA_SET;
   CLK_SET;
}
//------------------------------------------------------------------------------
//	R_Counter			R Register		   already answer=128
//	F_Function			C Register		   Function Latch		   
//	N_Counter			N Register         N=BP+A
//	channel				LATCH			   latch pin
//------------------------------------------------------------------------------
void ADF4118_Drive(UNlong  R_Counter, UNlong  F_Function,UNlong  N_Counter,UNchar channel)
{
	UNlong  temp1;
	int i;
	temp1=0x100000;
//Update R Latch, the writing order should be R, C, N
	CLK_SET ;
	DATA_SET;
	LATCH_CLR(channel);
	//delay(30);
  	for(i=0;i<21;i++)		
		{
	 	if((temp1&R_Counter)==0x0)		
			DATA_CLR;
		else
			DATA_SET;
		CLK_CLR;	
		delay(30);
		CLK_SET ;
		temp1=temp1>>1;
		delay(30); 
		}
	
	LATCH_SET(channel);
	delay(30);
	temp1=0x100000;
	LATCH_CLR(channel);
	for(i=0;i<21;i++)			//Update C Latch	
		{
		if((temp1&F_Function)==0x0)		
			DATA_CLR;
		else
			DATA_SET;
		CLK_CLR;
		delay(30);
		CLK_SET ;
		temp1=temp1>>1;
		delay(30); 
		}
	temp1=0x100000;
	LATCH_SET(channel);
	delay(30);
	LATCH_CLR(channel);
	delay(5000);				//interval between programming C and N register needs to be at least 5ms
	for(i=0;i<21;i++)			//Update N Register
	{
		
		if((temp1&N_Counter)==0x0)		
			DATA_CLR;
		else
			DATA_SET;
		CLK_CLR;
		delay(30);
		CLK_SET ;
		delay(30);
		temp1=temp1>>1; 
	}
	LATCH_SET(channel);
}
/******************************************************************************/
/*Function :设置900频段子函数*/ 
/*Entrance :
		   //ChannelNumber-----设置的频点号 
		   //CsNumber----------频点对应的硬件编号
		   //MType-------------移频类型:0---下行移频  1---上行移频			  */	
/*Return   :0----所设置的频点不符合要求,1---频点设置成功		   			  */
/******************************************************************************/
UNchar Set900FreqMove(UNint ChannelNumber, UNchar CsNumber,UNchar MType)
{
	UNchar i;
	UNint BaseFreq;
	UNlong R_Value;
	UNlong N_Value;
	UNlong A_Value;
	UNlong B_Value;
	UNlong F_Value;
	UNlong Fvco;
	if((ChannelNumber <= 124)||((ChannelNumber >= 975) && (ChannelNumber <= 1023)))
		{
		if(MType==0)
			{		
			if (ChannelNumber <= 124 )
		   	   	 BaseFreq = 9350; 	   		   //935--954MHZ
			else if ((ChannelNumber >= 975) && (ChannelNumber <= 1023))
		     	 BaseFreq = 7302;	   		   //9250-0.2*974=7302
		   	}	
		else if(MType==1)
			{		
			if (ChannelNumber <= 124 )
		   	   	 BaseFreq = 8900; 	   		   //885---909MHZ
			else if ((ChannelNumber >= 975) && (ChannelNumber <= 1023))
		     	 BaseFreq = 6852;	   		   //8800-0.2*974=6852
		   	}	 
		R_Value =0x000200;
		F_Value =0x00092;
//under is parameter  
		Fvco=(ChannelNumber*2+ BaseFreq-1400)/32;
    	Fvco<<=7; //设置了B
		B_Value=Fvco;
    	A_Value=(((ChannelNumber*2+ BaseFreq-1400)%32)<<2); //设置了A
		N_Value=B_Value+A_Value+0x01;
//		N_Value=0x7c89;
		ADF4118_Drive(R_Value,F_Value, N_Value,CsNumber);
		i=1;	   
		}			  
	else{
		i=0;
		}
	return(i);
}

/******************************************************************************/
/*Function :设置1800频段子函数*/ 
/*Entrance :
		   //ChannelNumber-----设置的频点号 
		   //Cs----------------频点对应的硬件编号
		   //MType-------------移频类型:0---下行移频  1---上行移频			  */	
/*Return   :0----所设置的频点不符合要求,1---频点设置成功		   			  */
/******************************************************************************/
UNchar Set1800FreqMove(UNint ChannelNumber, UNchar Cs,UNchar MType)
{
	UNchar i;
	UNlong BaseFreq1800;
	UNlong R_Value;
	UNlong N_Value;
	UNlong A_Value;
	UNlong B_Value;
	UNlong F_Value;
	UNlong Fvco;
	if ((ChannelNumber >= 512) && (ChannelNumber <= 735))
	   {
	    if(MType==0)
			BaseFreq1800 = 17028; 			   //down 1805---1880  17028=1805-511*0.2
	    else if(MType==1)
			BaseFreq1800 = 16078;             //up 1710----1785  16124=1710-511*0.2
		R_Value =0x000100;
		F_Value =0x00092;
		//under is parameter  		
		Fvco=((ChannelNumber*2+BaseFreq1800-1400)/2)/32;
		Fvco<<=7; 
		B_Value=Fvco;
		A_Value=((((ChannelNumber*2+  BaseFreq1800-1400)/2)%32)<<2);
		N_Value =B_Value+A_Value+0x01;
		//N_Value=0x8239;
		ADF4118_Drive(R_Value,F_Value, N_Value,Cs);
		i=1;	
	   }
 	else
	   i=0;
 return(i);	 
}
/******************************************************************************/
UNchar Set900DownFreqSelect(unsigned int ChannelNumber,unsigned char CsNumber)   //下行的900选频
{
	UNchar i;
	UNint BaseFreq;
	UNlong R_Value;
	UNlong N_Value;
	UNlong A_Value;
	UNlong B_Value;
	UNlong F_Value;
	UNlong Fvco;
	if((ChannelNumber <= 124)||((ChannelNumber >= 975) && (ChannelNumber <= 1023)))
	{
		if (ChannelNumber <= 124 )
		   	 BaseFreq = 9350; 	   		   //935--954MHZ
		else if ((ChannelNumber >= 975) && (ChannelNumber <= 1023))
		    	 BaseFreq = 7302;	   		   //9250-0.2*974=7302
		   		
		R_Value =0x000200;
		F_Value =0x00093;
//under is parameter  
		Fvco=(ChannelNumber*2+ BaseFreq-710)/32;
    	Fvco<<=7; //设置了B
		B_Value=Fvco;
    	A_Value=(((ChannelNumber*2+ BaseFreq-710)%32)<<2); //设置了A
		N_Value=B_Value+A_Value+0x01;
//		N_Value=0x7c89;
		ADF4118_Drive(R_Value,F_Value, N_Value,CsNumber);
		i=1;	   
	}			  
	else{
		i=0;
		}
	return(i);
}
/******************************************************************************/
#endif

⌨️ 快捷键说明

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