GNU Radio's M2K Package
adf4350.h
Go to the documentation of this file.
1/***************************************************************************//**
2 * @file adf4350.h
3 * @brief Header file of ADF4350 Driver.
4 * @author DBogdan (dragos.bogdan@analog.com)
5********************************************************************************
6 * Copyright 2012-2015(c) Analog Devices, Inc.
7 *
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions are met:
12 * - Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * - Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in
16 * the documentation and/or other materials provided with the
17 * distribution.
18 * - Neither the name of Analog Devices, Inc. nor the names of its
19 * contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 * - The use of this software may or may not infringe the patent rights
22 * of one or more patent holders. This license does not release you
23 * from the requirement that you obtain separate licenses from these
24 * patent holders to use this software.
25 * - Use of the software either in source or binary form, must be run
26 * on or directly connected to an Analog Devices Inc. component.
27 *
28 * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
29 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
30 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
31 * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
32 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
34 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
35 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
36 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 *
39*******************************************************************************/
40#ifndef __ADF4350_H__
41#define __ADF4350_H__
42
43/******************************************************************************/
44/***************************** Include Files **********************************/
45/******************************************************************************/
46#include <stdint.h>
47#include "spi.h"
48
49/******************************************************************************/
50/********************** Macros and Constants Definitions **********************/
51/******************************************************************************/
52
53/* Channels */
54#define ADF4350_RX_CHANNEL 0
55#define ADF4350_TX_CHANNEL 1
56
57/* Registers */
58#define ADF4350_REG0 0
59#define ADF4350_REG1 1
60#define ADF4350_REG2 2
61#define ADF4350_REG3 3
62#define ADF4350_REG4 4
63#define ADF4350_REG5 5
64
65/* REG0 Bit Definitions */
66#define ADF4350_REG0_FRACT(x) (((x) & 0xFFF) << 3)
67#define ADF4350_REG0_INT(x) (((x) & 0xFFFF) << 15)
68
69/* REG1 Bit Definitions */
70#define ADF4350_REG1_MOD(x) (((x) & 0xFFF) << 3)
71#define ADF4350_REG1_PHASE(x) (((x) & 0xFFF) << 15)
72#define ADF4350_REG1_PRESCALER (1 << 27)
73
74/* REG2 Bit Definitions */
75#define ADF4350_REG2_COUNTER_RESET_EN (1 << 3)
76#define ADF4350_REG2_CP_THREESTATE_EN (1 << 4)
77#define ADF4350_REG2_POWER_DOWN_EN (1 << 5)
78#define ADF4350_REG2_PD_POLARITY_POS (1 << 6)
79#define ADF4350_REG2_LDP_6ns (1 << 7)
80#define ADF4350_REG2_LDP_10ns (0 << 7)
81#define ADF4350_REG2_LDF_FRACT_N (0 << 8)
82#define ADF4350_REG2_LDF_INT_N (1 << 8)
83#define ADF4350_REG2_CHARGE_PUMP_CURR_uA(x) (((((x)-312) / 312) & 0xF) << 9)
84#define ADF4350_REG2_DOUBLE_BUFF_EN (1 << 13)
85#define ADF4350_REG2_10BIT_R_CNT(x) ((x) << 14)
86#define ADF4350_REG2_RDIV2_EN (1 << 24)
87#define ADF4350_REG2_RMULT2_EN (1 << 25)
88#define ADF4350_REG2_MUXOUT(x) ((x) << 26)
89#define ADF4350_REG2_NOISE_MODE(x) (((x) & 0x3) << 29)
90
91/* REG3 Bit Definitions */
92#define ADF4350_REG3_12BIT_CLKDIV(x) ((x) << 3)
93#define ADF4350_REG3_12BIT_CLKDIV_MODE(x) ((x) << 16)
94#define ADF4350_REG3_12BIT_CSR_EN (1 << 18)
95#define ADF4351_REG3_CHARGE_CANCELLATION_EN (1 << 21)
96#define ADF4351_REG3_ANTI_BACKLASH_3ns_EN (1 << 22)
97#define ADF4351_REG3_BAND_SEL_CLOCK_MODE_HIGH (1 << 23)
98
99/* REG4 Bit Definitions */
100#define ADF4350_REG4_OUTPUT_PWR(x) ((x) << 3)
101#define ADF4350_REG4_RF_OUT_EN (1 << 5)
102#define ADF4350_REG4_AUX_OUTPUT_PWR(x) ((x) << 6)
103#define ADF4350_REG4_AUX_OUTPUT_EN (1 << 8)
104#define ADF4350_REG4_AUX_OUTPUT_FUND (1 << 9)
105#define ADF4350_REG4_AUX_OUTPUT_DIV (0 << 9)
106#define ADF4350_REG4_MUTE_TILL_LOCK_EN (1 << 10)
107#define ADF4350_REG4_VCO_PWRDOWN_EN (1 << 11)
108#define ADF4350_REG4_8BIT_BAND_SEL_CLKDIV(x) ((x) << 12)
109#define ADF4350_REG4_RF_DIV_SEL(x) ((x) << 20)
110#define ADF4350_REG4_FEEDBACK_DIVIDED (0 << 23)
111#define ADF4350_REG4_FEEDBACK_FUND (1 << 23)
112
113/* REG5 Bit Definitions */
114#define ADF4350_REG5_LD_PIN_MODE_LOW (0 << 22)
115#define ADF4350_REG5_LD_PIN_MODE_DIGITAL (1 << 22)
116#define ADF4350_REG5_LD_PIN_MODE_HIGH (3 << 22)
117
118/* Specifications */
119#define ADF4350_MAX_OUT_FREQ 4400000000ULL /* Hz */
120#define ADF4350_MIN_OUT_FREQ 34375000 /* Hz */
121#define ADF4350_MIN_VCO_FREQ 2200000000ULL /* Hz */
122#define ADF4350_MAX_FREQ_45_PRESC 3000000000ULL /* Hz */
123#define ADF4350_MAX_FREQ_PFD 32000000 /* Hz */
124#define ADF4350_MAX_BANDSEL_CLK 125000 /* Hz */
125#define ADF4350_MAX_FREQ_REFIN 250000000 /* Hz */
126#define ADF4350_MAX_MODULUS 4095
127#define ADF4350_MAX_R_CNT 1023
128
129/******************************************************************************/
130/************************ Types Definitions ***********************************/
131/******************************************************************************/
133 uint32_t clkin;
136
137 uint16_t ref_div_factor; /* 10-bit R counter */
139 uint8_t ref_div2_en;
140
145};
146
182
183typedef struct {
186 uint32_t clkin;
187 uint32_t chspc; /* Channel Spacing */
188 uint32_t fpfd; /* Phase Frequency Detector */
189 uint32_t min_out_freq;
190 uint32_t r0_fract;
191 uint32_t r0_int;
192 uint32_t r1_mod;
194 uint32_t regs[6];
195 uint32_t regs_hw[6];
196 uint32_t val;
198
199/******************************************************************************/
200/************************ Functions Declarations ******************************/
201/******************************************************************************/
202/*! Initializes the ADF4350. */
203int32_t adf4350_setup(adf4350_dev **device,
204 adf4350_init_param init_param);
205/*! Writes 4 bytes of data to ADF4350. */
207 uint32_t data);
208/*! Stores PLL 0 frequency in Hz. */
210 int64_t Hz);
211/*! Stores PLL 0 frequency resolution/channel spacing in Hz. */
213 int32_t Hz);
214/*! Sets PLL 0 REFin frequency in Hz. */
216 int64_t Hz);
217/*! Powers down the PLL. */
219 int32_t pwd);
220
221#endif // __ADF4350_H__
int32_t adf4350_out_altvoltage0_powerdown(adf4350_dev *dev, int32_t pwd)
int64_t adf4350_out_altvoltage0_refin_frequency(adf4350_dev *dev, int64_t Hz)
int32_t adf4350_setup(adf4350_dev **device, adf4350_init_param init_param)
int64_t adf4350_out_altvoltage0_frequency(adf4350_dev *dev, int64_t Hz)
int32_t adf4350_write(adf4350_dev *dev, uint32_t data)
int32_t adf4350_out_altvoltage0_frequency_resolution(adf4350_dev *dev, int32_t Hz)
Definition adf4350.h:183
uint32_t r0_int
Definition adf4350.h:191
uint32_t fpfd
Definition adf4350.h:188
uint32_t min_out_freq
Definition adf4350.h:189
uint32_t val
Definition adf4350.h:196
struct adf4350_platform_data * pdata
Definition adf4350.h:185
uint32_t regs_hw[6]
Definition adf4350.h:195
uint32_t clkin
Definition adf4350.h:186
uint32_t r1_mod
Definition adf4350.h:192
uint32_t regs[6]
Definition adf4350.h:194
uint32_t r0_fract
Definition adf4350.h:190
uint32_t r4_rf_div_sel
Definition adf4350.h:193
spi_desc * spi_desc
Definition adf4350.h:184
uint32_t chspc
Definition adf4350.h:187
Definition adf4350.h:147
uint8_t lock_detect_precision_6ns_enable
Definition adf4350.h:161
uint32_t clk_divider_mode
Definition adf4350.h:173
uint8_t phase_detector_polarity_positive_enable
Definition adf4350.h:160
uint8_t low_spur_mode_enable
Definition adf4350.h:165
spi_init_param spi_init
Definition adf4350.h:149
uint8_t charge_cancellation_enable
Definition adf4350.h:169
uint8_t aux_output_fundamental_enable
Definition adf4350.h:177
uint32_t clkin
Definition adf4350.h:152
uint8_t cycle_slip_reduction_enable
Definition adf4350.h:168
uint32_t muxout_select
Definition adf4350.h:164
uint32_t reference_div_factor
Definition adf4350.h:155
uint32_t channel_spacing
Definition adf4350.h:153
uint8_t mute_till_lock_enable
Definition adf4350.h:178
uint32_t clk_divider_12bit
Definition adf4350.h:172
uint8_t reference_div2_enable
Definition adf4350.h:157
uint8_t reference_doubler_enable
Definition adf4350.h:156
uint8_t aux_output_enable
Definition adf4350.h:176
uint32_t output_power
Definition adf4350.h:179
uint8_t anti_backlash_3ns_enable
Definition adf4350.h:170
uint32_t charge_pump_current
Definition adf4350.h:163
uint8_t lock_detect_function_integer_n_enable
Definition adf4350.h:162
uint32_t aux_output_power
Definition adf4350.h:180
uint32_t power_up_frequency
Definition adf4350.h:154
uint8_t band_select_clock_mode_high_enable
Definition adf4350.h:171
Definition adf4350.h:132
uint32_t r2_user_settings
Definition adf4350.h:141
uint32_t r3_user_settings
Definition adf4350.h:142
uint16_t ref_div_factor
Definition adf4350.h:137
uint64_t power_up_frequency
Definition adf4350.h:135
uint32_t channel_spacing
Definition adf4350.h:134
uint32_t r4_user_settings
Definition adf4350.h:143
uint8_t ref_doubler_en
Definition adf4350.h:138
uint32_t clkin
Definition adf4350.h:133
uint8_t ref_div2_en
Definition adf4350.h:139
int32_t gpio_lock_detect
Definition adf4350.h:144