no-OS
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
adf4106.h
Go to the documentation of this file.
1/**************************************************************************/
34#ifndef __ADF4106_H__
35#define __ADF4106_H__
36
37#include <stdint.h>
38#include "no_os_delay.h"
39#include "no_os_gpio.h"
40#include "no_os_spi.h"
41
42/* GPIOs */
43#define ADF4106_LE_OUT no_os_gpio_direction_output(dev->gpio_le, \
44 NO_OS_GPIO_HIGH)
45#define ADF4106_LE_LOW no_os_gpio_set_value(dev->gpio_le, \
46 NO_OS_GPIO_LOW)
47#define ADF4106_LE_HIGH no_os_gpio_set_value(dev->gpio_le, \
48 NO_OS_GPIO_HIGH)
49
50#define ADF4106_CE_OUT no_os_gpio_direction_output(dev->gpio_ce, \
51 NO_OS_GPIO_HIGH)
52#define ADF4106_CE_LOW no_os_gpio_set_value(dev->gpio_ce, \
53 NO_OS_GPIO_LOW)
54#define ADF4106_CE_HIGH no_os_gpio_set_value(dev->gpio_ce, \
55 NO_OS_GPIO_HIGH)
56
57#define ADF4106_LE2_OUT no_os_gpio_direction_output(dev->gpio_le2, \
58 NO_OS_GPIO_HIGH)
59#define ADF4106_LE2_LOW no_os_gpio_set_value(dev->gpio_le2, \
60 NO_OS_GPIO_LOW)
61#define ADF4106_LE2_HIGH no_os_gpio_set_value(dev->gpio_le2, \
62 NO_OS_GPIO_HIGH)
63
64#define ADF4106_CE2_OUT no_os_gpio_direction_output(dev->gpio_ce2, \
65 NO_OS_GPIO_HIGH)
66#define ADF4106_CE2_LOW no_os_gpio_set_value(dev->gpio_ce2, \
67 NO_OS_GPIO_LOW)
68#define ADF4106_CE2_HIGH no_os_gpio_set_value(dev->gpio_ce2, \
69 NO_OS_GPIO_HIGH)
70
71/* Control Bits */
72#define ADF4106_CTRL_MASK 0x3
73
74#define ADF4106_CTRL_R_COUNTER 0 /* Reference Counter */
75#define ADF4106_CTRL_N_COUNTER 1 /* N Counter */
76#define ADF4106_CTRL_FUNCTION_LATCH 2 /* Function Latch*/
77#define ADF4106_CTRL_INIT_LATCH 3 /* Initialization Latch*/
78
79/* Reference Counter Latch */
80
81#define ADF4106_R_COUNTER_OFFSET 2
82#define ADF4106_R_COUNTER_MASK 0x3FFFul
83#define ADF4106_R_COUNTER(x) ((x) & ADF4106_R_COUNTER_MASK) \
84 << ADF4106_R_COUNTER_OFFSET
85/* Anti-backlash Pulse Width options */
86#define ADF4106_R_ABP_OFFSET 16
87#define ADF4106_R_ABP_MASK 0x3
88#define ADF4106_R_ABP(x) ((x) & ADF4106_R_ABP_MASK) \
89 << ADF4106_R_ABP_OFFSET
90#define ADF4106_R_ABP_2_9NS 0
91#define ADF4106_R_ABP_1_3NS 1
92#define ADF4106_R_ABP_6_0NS 2
93
94/* Test Mode Bits */
95#define ADF4106_R_TMB_OFFSET 18
96#define ADF4106_R_TMB_MASK 0x1
97#define ADF4106_R_TMB(x) ((x) & ADF4106_R_TMB_MASK) \
98 << ADF4106_R_TMB_OFFSET
99#define ADF4106_R_TMB_NORMAL 0
100/* Lock Detect Precision */
101#define ADF4106_R_LDP_OFFSET 20
102#define ADF4106_R_LDP_MASK 0x1
103#define ADF4106_R_LDP(x) ((x) & ADF4106_R_LDP_MASK) \
104 << ADF4106_R_LDP_OFFSET
105#define ADF4106_R_LDP_3 0
106#define ADF4106_R_LDP_5 1
107
108/* N Counter Latch */
109#define ADF4106_N_COUNTER_A_OFFSET 2
110#define ADF4106_N_COUNTER_A_MASK 0x3F
111#define ADF4106_N_COUNTER_A(x) ((x) & ADF4106_N_COUNTER_A_MASK) \
112 << ADF4106_N_COUNTER_A_OFFSET
113#define ADF4106_N_COUNTER_B_OFFSET 8
114#define ADF4106_N_COUNTER_B_MASK 0x1FFF
115#define ADF4106_N_COUNTER_B(x) ((x) & ADF4106_N_COUNTER_B_MASK) \
116 << ADF4106_N_COUNTER_B_OFFSET
117/* Charge Pump Gain Settings */
118#define ADF4106_N_CP_OFFSET 21
119#define ADF4106_N_CP_MASK 0x1
120#define ADF4106_N_CP(x) ((x) & ADF4106_N_CP_MASK) \
121 << ADF4106_N_CP_OFFSET
122#define ADF4106_N_CP_GAIN_1 0
123#define ADF4106_N_CP_GAIN_2 1
124
125/********* Function and Initialization register offsets and masks ************/
126/* Counter Reset Bit */
127#define ADF4106_CR_OFFSET 2
128#define ADF4106_CR_MASK 0x1ul
129#define ADF4106_CR(x) ((x) & ADF4106_CR_MASK) \
130 << ADF4106_CR_OFFSET
131/* Power Down Bit 1 */
132#define ADF4106_PD1_OFFSET 3
133#define ADF4106_PD1_MASK 0x1
134#define ADF4106_PD1(x) ((x) & ADF4106_PD1_MASK) \
135 << ADF4106_PD1_OFFSET
136/* Muxout Control */
137#define ADF4106_MUXOUT_OFFSET 4
138#define ADF4106_MUXOUT_MASK 0x7
139#define ADF4106_MUXOUT(x) ((x) & ADF4106_MUXOUT_MASK) \
140 << ADF4106_MUXOUT_OFFSET
141/* Phase Detector Polarity */
142#define ADF4106_PDPOL_OFFSET 7
143#define ADF4106_PDPOL_MASK 0x1
144#define ADF4106_PDPOL(x) ((x) & ADF4106_PDPOL_MASK) \
145 << ADF4106_PDPOL_OFFSET
146/* Charge Pump Output*/
147#define ADF4106_CP_OFFSET 8
148#define ADF4106_CP_MASK 0x1
149#define ADF4106_CP(x) ((x) & ADF4106_CP_MASK) \
150 << ADF4106_CP_OFFSET
151/* Fast-lock Mode */
152#define ADF4106_FASTLOCK_OFFSET 9
153#define ADF4106_FASTLOCK_MASK 0x3
154#define ADF4106_FASTLOCK(x) ((x) & ADF4106_FASTLOCK_MASK) \
155 << ADF4106_FASTLOCK_OFFSET
156/* Timer Counter Control */
157#define ADF4106_TCC_OFFSET 11
158#define ADF4106_TCC_MASK 0xF
159#define ADF4106_TCC(x) ((x) & ADF4106_TCC_MASK) \
160 << ADF4106_TCC_OFFSET
161/* Current Setting Position */
162#define ADF4106_CS1_OFFSET 15
163#define ADF4106_CS1_MASK 0x7
164#define ADF4106_CS1(x) ((x) << ADF4106_CS1_OFFSET)
165#define ADF4106_CS2_OFFSET 18
166#define ADF4106_CS2_MASK 0x7
167#define ADF4106_CS2(x) ((x) << ADF4106_CS2_OFFSET)
168
169/* Synchronous or asynchronous power down*/
170#define ADF4106_PD2_OFFSET 21
171#define ADF4106_PD2_MASK 0x1
172#define ADF4106_PD2(x) ((x) & ADF4106_PD2_MASK) \
173 << ADF4106_PD2_OFFSET
174/* Prescaler value */
175#define ADF4106_PS_OFFSET 22
176#define ADF4106_PS_MASK 0x3
177#define ADF4106_PS(x) ((x) & ADF4106_PS_MASK) \
178 << ADF4106_PS_OFFSET
179
180/* Counter Reset Bit Definition */
181#define ADF4106_CR_NORMAL 0
182#define ADF4106_CR_RESET 1
183/* Power Down Bit 1 Definition */
184#define ADF4106_PD1_NORMAL 0
185#define ADF4106_PD1_POWER_DOWN 1
186/* Muxout Control Definition */
187#define ADF4106_MUXOUT_3STATE 0
188#define ADF4106_MUXOUT_DLOCK_DETECT 1
189#define ADF4106_MUXOUT_NDIV_OUTPUT 2
190#define ADF4106_MUXOUT_AVDD 3
191#define ADF4106_MUXOUT_RDIV_OUTPUT 4
192#define ADF4106_MUXOUT_NCH_OPENDRAIN 5
193#define ADF4106_MUXOUT_SERIAL_OUTPUT 6
194#define ADF4106_MUXOUT_DGND 7
195/* Phase Detector Polarity Definition */
196#define ADF4106_PDPOL_NEGATIVE 0
197#define ADF4106_PDPOL_POSITIVE 1
198/* Charge Pump Output Definition */
199#define ADF4106_CP_NORMAL 0
200#define ADF4106_CP_THREE_STATE 1
201/* Fast-lock Mode Definition */
202#define ADF4106_FASTLOCK_DISABLE 0
203#define ADF4106_FASTLOCK_MODE1 1
204#define ADF4106_FASTLOCK_MODE2 3
205/* Timer Counter Control Definition */
206#define ADF4106_TCC_3 0
207#define ADF4106_TCC_7 1
208#define ADF4106_TCC_11 2
209#define ADF4106_TCC_15 3
210#define ADF4106_TCC_19 4
211#define ADF4106_TCC_23 5
212#define ADF4106_TCC_27 6
213#define ADF4106_TCC_31 7
214#define ADF4106_TCC_35 8
215#define ADF4106_TCC_39 9
216#define ADF4106_TCC_43 10
217#define ADF4106_TCC_47 11
218#define ADF4106_TCC_51 12
219#define ADF4106_TCC_55 13
220#define ADF4106_TCC_59 14
221#define ADF4106_TCC_63 15
222/* Current Settings Definitions */
223#define ADF4106_CS_0_62 0
224#define ADF4106_CS_1_25 1
225#define ADF4106_CS_1_87 2
226#define ADF4106_CS_2_5 3
227#define ADF4106_CS_3_12 4
228#define ADF4106_CS_3_75 5
229#define ADF4106_CS_4_37 6
230#define ADF4106_CS_5_0 7
231/* Synchronous or asynchronous power down Definition */
232#define ADF4106_ASYNC_PWD 0
233#define ADF4106_SYNC_PWD 1
234/* Prescaler value Definition */
235#define ADF4106_PS_8_9 0
236#define ADF4106_PS_16_17 1
237#define ADF4106_PS_32_33 2
238#define ADF4106_PS_64_65 3
239
240/* Default prescaler for ADF4001 and ADF4002 */
241#define ADF4106_PRESCALE(x) (8 << (x))
242
248
250
252 uint32_t ref_in;
253
255 uint32_t pfd_max;
256
258 uint16_t ref_counter : 14;
265 uint8_t test_mode_bits : 1;
270
271 /* N Latch */
273 uint8_t a_n_counter : 6;
275 uint16_t b_n_counter : 13;
277 uint8_t cp_gain : 1;
278
279 /* Functional/Initialization latch */
281 uint8_t counter_reset : 1;
283 uint8_t power_down1 : 1;
285 uint8_t muxout_control : 3;
289 uint8_t cp_type : 1;
291 uint8_t fast_lock_mode : 2;
299 uint8_t current_setting1 : 3;
303 uint8_t current_setting2 : 3;
305 uint8_t power_down2 : 1;
307 uint8_t prescaler_value : 2;
308
309};
310
311/* Supported devices */
317
318/* Initialization methods */
324
331
333 /* SPI */
335 /* GPIO */
340 /* Device Settings */
344 /* Internal buffers for each latch */
345 uint32_t r_latch;
346 uint32_t n_latch;
347 uint32_t f_latch;
348 uint32_t i_latch;
349};
350
364
365/* Initialize the communication with the device */
366int8_t adf4106_init(struct adf4106_dev **device,
368
369/* Free the resources allocated by adf4106_init(). */
370int32_t adf4106_remove(struct adf4106_dev *dev);
371
372/* Update register function */
373void adf4106_update_latch(struct adf4106_dev *dev,
374 uint32_t latch_data);
375
376/* Return the value of a desired latch */
377uint32_t adf4106_read_latch(struct adf4106_dev *dev,
378 uint8_t latch_type);
379
380/* PLL initialization functions */
381void adf4106_init_latch_method(struct adf4106_dev *dev);
382void adf4106_init_cepin_method(struct adf4106_dev *dev);
384
385/* Set the frequency to a desired value */
386uint64_t adf4106_set_frequency(struct adf4106_dev *dev,
387 uint64_t frequency);
388
389#endif // __ADF4106_H__
struct ad7616_init_param init_param
Definition ad7616_sdz.c:107
int8_t adf4106_init(struct adf4106_dev **device, struct adf4106_init_param init_param)
Initialize SPI and Initial Values for ADF4106 Board.
Definition adf4106.c:79
adf4106_init_t
Definition adf4106.h:319
@ INIT_COUNTER_RESET
Definition adf4106.h:322
@ INIT_CEPIN
Definition adf4106.h:321
@ INIT_LATCH
Definition adf4106.h:320
uint32_t adf4106_read_latch(struct adf4106_dev *dev, uint8_t latch_type)
Return the value of a desired latch.
Definition adf4106.c:343
void adf4106_init_latch_method(struct adf4106_dev *dev)
Initialization latch method.
Definition adf4106.c:209
void adf4106_init_counte_reset_method(struct adf4106_dev *dev)
Counter reset method.
Definition adf4106.c:289
int32_t adf4106_remove(struct adf4106_dev *dev)
Free the resources allocated by adf4106_init().
Definition adf4106.c:145
void adf4106_init_cepin_method(struct adf4106_dev *dev)
CE Pin method.
Definition adf4106.c:249
uint64_t adf4106_set_frequency(struct adf4106_dev *dev, uint64_t frequency)
Sets the output frequency.
Definition adf4106.c:394
adf4106_type_t
Definition adf4106.h:312
@ ID_ADF4106
Definition adf4106.h:315
@ ID_ADF4001
Definition adf4106.h:313
@ ID_ADF4002
Definition adf4106.h:314
void adf4106_update_latch(struct adf4106_dev *dev, uint32_t latch_data)
Update one of the latch via the SPI interface.
Definition adf4106.c:167
Header file of Delay functions.
Header file of GPIO Interface.
Header file of SPI Interface.
Definition adf4106.h:325
uint64_t vco_max_frequency
Definition adf4106.h:326
uint32_t pfd_max_frequency
Definition adf4106.h:327
uint32_t vco_min_frequency
Definition adf4106.h:328
uint32_t pfd_min_frequency
Definition adf4106.h:329
Definition adf4106.h:332
uint32_t r_latch
Definition adf4106.h:345
struct no_os_spi_desc * spi_desc
Definition adf4106.h:334
struct no_os_gpio_desc * gpio_le2
Definition adf4106.h:338
struct no_os_gpio_desc * gpio_le
Definition adf4106.h:336
struct adf4106_settings_t adf4106_st
Definition adf4106.h:342
uint32_t i_latch
Definition adf4106.h:348
uint32_t n_latch
Definition adf4106.h:346
struct adf4106_chip_info chip_info
Definition adf4106.h:341
uint32_t f_latch
Definition adf4106.h:347
enum adf4106_type_t this_device
Definition adf4106.h:343
struct no_os_gpio_desc * gpio_ce
Definition adf4106.h:337
struct no_os_gpio_desc * gpio_ce2
Definition adf4106.h:339
Definition adf4106.h:351
struct no_os_gpio_init_param gpio_ce2
Definition adf4106.h:358
enum adf4106_init_t init_method
Definition adf4106.h:361
struct no_os_spi_init_param spi_init
Definition adf4106.h:353
struct no_os_gpio_init_param gpio_ce
Definition adf4106.h:356
struct adf4106_settings_t adf4106_st
Definition adf4106.h:362
struct no_os_gpio_init_param gpio_le2
Definition adf4106.h:357
enum adf4106_type_t this_device
Definition adf4106.h:360
struct no_os_gpio_init_param gpio_le
Definition adf4106.h:355
store the value of all the latch and the input reference frequency
Definition adf4106.h:249
uint8_t a_n_counter
Definition adf4106.h:273
uint8_t anti_backlash_width
Definition adf4106.h:263
uint8_t phase_detector_pol
Definition adf4106.h:287
uint8_t cp_gain
Definition adf4106.h:277
uint8_t current_setting2
Definition adf4106.h:303
uint8_t muxout_control
Definition adf4106.h:285
uint8_t current_setting1
Definition adf4106.h:299
uint8_t power_down1
Definition adf4106.h:283
uint32_t ref_in
Definition adf4106.h:252
uint8_t test_mode_bits
Definition adf4106.h:265
uint32_t pfd_max
Definition adf4106.h:255
uint8_t cp_type
Definition adf4106.h:289
uint16_t b_n_counter
Definition adf4106.h:275
uint8_t timer_counter_control
Definition adf4106.h:295
uint16_t ref_counter
Definition adf4106.h:258
uint8_t lock_detect_precision
Definition adf4106.h:269
uint8_t fast_lock_mode
Definition adf4106.h:291
uint8_t power_down2
Definition adf4106.h:305
uint8_t counter_reset
Definition adf4106.h:281
uint8_t prescaler_value
Definition adf4106.h:307
Definition ad9361_util.h:63
Structure holding the GPIO descriptor.
Definition no_os_gpio.h:84
Structure holding the parameters for GPIO initialization.
Definition no_os_gpio.h:67
Structure holding SPI descriptor.
Definition no_os_spi.h:180
Structure holding the parameters for SPI initialization.
Definition no_os_spi.h:128