adf4002.c


/**********************************************************
                       康威科技
更多电子需求,请到淘宝店,康威电子竭诚为您服务 ^_^
https://kvdz.taobao.com/
**********************************************************/

#include "adf4002.h"
#include "sys_zdyz.h"

long int ReadData;

//long int Reg0x00 = 0x001F40;//r
//long int Reg0x01 = 0x0DAC01;//n

long int functionReg0x02R = 0x0D80C2; //function FUNCTION  0000 1101 1000 0000 1100 0010 //function寄存器 设置R DIVIDER OUTPUT
long int initReg0x03R = 0x0D80C3;//init  0000 1101 1000 0000 1100 0011  //INITIALIZATION 寄存器 设置R DIVIDER OUTPUT

long int functionReg0x02N = 0x0D80A2; //function 0000 1101 1000 0000 1010 0010 //function寄存器 设置N DIVIDER OUTPUT
long int initReg0x03N = 0x0D80A3;//init  0000 1101 1000 0000 1010 0011   //INITIALIZATION寄存器 设置N DIVIDER OUTPUT

long int Reg0x02_LEDON  = 0x0D80B2; //MUXOUT CONTROL : DVDD 0000 1101 1000 0000 1011 0010   functionlatch
long int Reg0x02_LEDOFF = 0x0D80F2; //MUXOUT CONTROL: DGND 0000 1101 1000 0000 1111 0010     functionlatch


void Delay(unsigned int z)
{
  unsigned int i,j;
  
  for(i = z; i > 0; i--)
    for(j = 10; j > 0; j--) ;
}

void DelayMs(void)
{
  unsigned int i, j;
  
  for(i = 0; i < 1000; i++)
  {
    for(j = 0; j < 1000; j++)
    {
      Delay(1000);
    }
  }
}
//adf4002 IO口初始化
void InitADF4002(void)
{
//	GPIO_InitTypeDef  GPIO_InitStructure;
//
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);	 //使能PC端口时钟
//
//	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;				 //
//	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
//	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//	GPIO_Init(GPIOC, &GPIO_InitStructure);

	PLL_SCK_0;
	PLL_SDI_0;
	PLL_SEN_0;
	SendDataPll(initReg0x03R); //INIT
  //  SendDataPll(functionReg0x02R); //funtion(执行功能锁存加载)
	SendDataPll(Reg0x02_LEDOFF); //INIT
	//RDivideTest(1);

}

void SendDataPll(unsigned long int Data)          //传送的数据
{
  unsigned char i;

	PLL_SCK_0;
  PLL_SEN_0;

  for(i = 0; i < 24; i++)
  {
    if(Data & 0x800000)
    {
      PLL_SDI_1;
    }
    else
    {
       PLL_SDI_0;
    }
    Data <<= 1;     
    PLL_SCK_1;
    
    Delay(100);
    
    PLL_SCK_0;
    Delay(100);
  }
  PLL_SDI_0;

  PLL_SEN_0;
  Delay(100);
  PLL_SEN_1;
}

void RDivideTest(u16 RData)
{
	u32 S_R = 0;
	
  S_R = Pre_R + (RData<<2) + R_Address;
  SendDataPll(functionReg0x02R); //funtion
  SendDataPll(0X000001);
  SendDataPll(S_R);
  SendDataPll(0X000001);
}
void NDivideTest(u16 NData)
{
	u32 S_N = 0;
	
  S_N = Pre_N + (NData<<8) + N_Address;
  SendDataPll(functionReg0x02N); //funtion
	SendDataPll(0X000000);
  SendDataPll(S_N);

}














adf4002.h

(cubemx配置了三个gpio output)


/**********************************************************
                       康威科技
更多电子需求,请到淘宝店,康威电子竭诚为您服务 ^_^
https://kvdz.taobao.com/
**********************************************************/

#ifndef _adf4002_h_
#define _adf4002_h_

#include "sys_zdyz.h"
#include "main.h"
#define R_Address 0X000000
#define N_Address 0X000001
#define F_Address 0X000002
#define I_Address 0X000003
#define Pre_R 0X000000          //X000,0000,DAT(14),00
#define Pre_N 0X000000          //XX0,DAT(13),XXXXXX,01

//管脚声明
//GND
//#define PLL_SCK PCout(9)// PC9
//#define PLL_SDI PCout(10)// PC10
//#define PLL_SEN PCout(11)// PC11
//
//#define PLL_SCK_0 PLL_SCK = 0
//#define PLL_SCK_1 PLL_SCK = 1
//
//#define PLL_SDI_0 PLL_SDI = 0
//#define PLL_SDI_1 PLL_SDI = 1
//
//#define PLL_SEN_0 PLL_SEN = 0
//#define PLL_SEN_1 PLL_SEN = 1


#define PLL_SCK_0 (HAL_GPIO_WritePin(PLL_SCK_GPIO_Port, PLL_SCK_Pin, GPIO_PIN_RESET))
#define PLL_SCK_1 (HAL_GPIO_WritePin(PLL_SCK_GPIO_Port, PLL_SCK_Pin, GPIO_PIN_SET))
#define PLL_SDI_0 (HAL_GPIO_WritePin(PLL_SDI_GPIO_Port, PLL_SDI_Pin, GPIO_PIN_RESET))
#define PLL_SDI_1 (HAL_GPIO_WritePin(PLL_SDI_GPIO_Port, PLL_SDI_Pin, GPIO_PIN_SET))
#define PLL_SEN_0 (HAL_GPIO_WritePin(PLL_SEN_GPIO_Port, PLL_SEN_Pin, GPIO_PIN_RESET))
#define PLL_SEN_1 (HAL_GPIO_WritePin(PLL_SEN_GPIO_Port, PLL_SEN_Pin, GPIO_PIN_SET))

void InitADF4002(void);
void Delay(unsigned int z);
void DelayMs(void);
void SendDataPll(unsigned long int Data);

void RDivideTest(u16 RData);
void NDivideTest(u16 NData);


#endif

main.c

InitADF4002();
	NDivideTest(10);//RF-IN输入时 值为1-8191
	//RDivideTest(10);//REF-IN输入时  值为1-16383

物联沃分享整理
物联沃-IOTWORD物联网 » 康威ADF4002分频器详解

发表评论