no-OS
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
axi_adc_core.h
Go to the documentation of this file.
1/***************************************************************************/
33#ifndef AXI_ADC_CORE_H_
34#define AXI_ADC_CORE_H_
35
36#include <stdint.h>
37#include "no_os_util.h"
38
39#define AXI_ADC_REG_CONFIG 0x000C
40#define AXI_ADC_IQCORRECTION_DISABLE NO_OS_BIT(0)
41#define AXI_ADC_DCFILTER_DISABLE NO_OS_BIT(1)
42#define AXI_ADC_DATAFORMAT_DISABLE NO_OS_BIT(2)
43#define AXI_ADC_USERPORTS_DISABLE NO_OS_BIT(3)
44#define AXI_ADC_MODE_1R1T NO_OS_BIT(4)
45#define AXI_ADC_DELAY_CONTROL_DISABLE NO_OS_BIT(5)
46#define AXI_ADC_CMOS_OR_LVDS_N NO_OS_BIT(7)
47#define AXI_ADC_PPS_RECEIVER_ENABLE NO_OS_BIT(8)
48#define AXI_ADC_SCALECORRECTION_ONLY NO_OS_BIT(9)
49
50#define AXI_ADC_REG_RSTN 0x0040
51#define AXI_ADC_MMCM_RSTN NO_OS_BIT(1)
52#define AXI_ADC_RSTN NO_OS_BIT(0)
53
54#define AXI_ADC_REG_CNTRL 0x0044
55#define AXI_ADC_R1_MODE NO_OS_BIT(2)
56#define AXI_ADC_DDR_EDGESEL NO_OS_BIT(1)
57#define AXI_ADC_PIN_MODE NO_OS_BIT(0)
58
59#define AXI_ADC_REG_CNTRL_3 0x004C
60#define AXI_ADC_CRC_EN NO_OS_BIT(8)
61
62#define AXI_ADC_REG_CLK_FREQ 0x0054
63#define AXI_ADC_CLK_FREQ(x) (((x) & 0xFFFFFFFF) << 0)
64#define AXI_ADC_TO_CLK_FREQ(x) (((x) >> 0) & 0xFFFFFFFF)
65
66#define AXI_ADC_REG_CLK_RATIO 0x0058
67#define AXI_ADC_CLK_RATIO(x) (((x) & 0xFFFFFFFF) << 0)
68#define AXI_ADC_TO_CLK_RATIO(x) (((x) >> 0) & 0xFFFFFFFF)
69
70#define AXI_ADC_REG_STATUS 0x005C
71#define AXI_ADC_MUX_PN_ERR NO_OS_BIT(3)
72#define AXI_ADC_MUX_PN_OOS NO_OS_BIT(2)
73#define AXI_ADC_MUX_OVER_RANGE NO_OS_BIT(1)
74#define AXI_ADC_STATUS NO_OS_BIT(0)
75
76#define AXI_ADC_REG_DELAY_CNTRL 0x0060
77#define ADC_DELAY_SEL NO_OS_BIT(17)
78#define ADC_DELAY_RWN NO_OS_BIT(16)
79#define ADC_DELAY_ADDRESS(x) (((x) & 0xFF) << 8)
80#define ADC_TO_DELAY_ADDRESS(x) (((x) >> 8) & 0xFF)
81#define ADC_DELAY_WDATA(x) (((x) & 0x1F) << 0)
82#define ADC_TO_DELAY_WDATA(x) (((x) >> 0) & 0x1F)
83
84#define AXI_ADC_REG_CHAN_CNTRL(c) (0x0400 + (c) * 0x40)
85#define AXI_ADC_PN_SEL NO_OS_BIT(10)
86#define AXI_ADC_IQCOR_ENB NO_OS_BIT(9)
87#define AXI_ADC_DCFILT_ENB NO_OS_BIT(8)
88#define AXI_ADC_FORMAT_SIGNEXT NO_OS_BIT(6)
89#define AXI_ADC_FORMAT_TYPE NO_OS_BIT(5)
90#define AXI_ADC_FORMAT_ENABLE NO_OS_BIT(4)
91#define AXI_ADC_PN23_TYPE NO_OS_BIT(1)
92#define AXI_ADC_ENABLE NO_OS_BIT(0)
93
94#define AXI_ADC_REG_CHAN_STATUS(c) (0x0404 + (c) * 0x40)
95#define AXI_ADC_PN_ERR NO_OS_BIT(2)
96#define AXI_ADC_PN_OOS NO_OS_BIT(1)
97#define AXI_ADC_OVER_RANGE NO_OS_BIT(0)
98
99#define AXI_ADC_REG_CHAN_CNTRL_1(c) (0x0410 + (c) * 0x40)
100#define AXI_ADC_DCFILT_OFFSET(x) (((x) & 0xFFFFL) << 16)
101#define AXI_ADC_TO_DCFILT_OFFSET(x) (((x) >> 16) & 0xFFFF)
102#define AXI_ADC_DCFILT_COEFF(x) (((x) & 0xFFFF) << 0)
103#define AXI_ADC_TO_DCFILT_COEFF(x) (((x) >> 0) & 0xFFFF)
104
105#define AXI_ADC_REG_CHAN_CNTRL_2(c) (0x0414 + (c) * 0x40)
106#define AXI_ADC_IQCOR_COEFF_1(x) (((x) & 0xFFFFL) << 16)
107#define AXI_ADC_TO_IQCOR_COEFF_1(x) (((x) >> 16) & 0xFFFF)
108#define AXI_ADC_IQCOR_COEFF_2(x) (((x) & 0xFFFF) << 0)
109#define AXI_ADC_TO_IQCOR_COEFF_2(x) (((x) >> 0) & 0xFFFF)
110
111#define AXI_ADC_REG_CHAN_CNTRL_3(c) (0x0418 + (c) * 0x40)
112#define AXI_ADC_ADC_PN_SEL(x) (((x) & 0xF) << 16)
113#define AXI_ADC_TO_ADC_PN_SEL(x) (((x) >> 16) & 0xF)
114#define AXI_ADC_ADC_DATA_SEL(x) (((x) & 0xF) << 0)
115#define AXI_ADC_TO_ADC_DATA_SEL(x) (((x) >> 0) & 0xF)
116
117#define AXI_ADC_REG_DELAY(l) (0x0800 + (l) * 0x4)
118
123struct axi_adc {
125 const char *name;
127 uint32_t base;
129 uint32_t slave_base;
135 uint64_t clock_hz;
137 uint32_t mask;
138};
139
146 const char *name;
148 uint32_t base;
152 uint32_t slave_base;
155};
156
169
171int32_t axi_adc_init_begin(struct axi_adc **adc_core,
172 const struct axi_adc_init *init);
174int32_t axi_adc_init_finish(struct axi_adc *adc);
176int32_t axi_adc_init(struct axi_adc **adc_core,
177 const struct axi_adc_init *init);
179int32_t axi_adc_remove(struct axi_adc *adc);
181int32_t axi_adc_read(struct axi_adc *adc,
182 uint32_t reg_addr,
183 uint32_t *reg_data);
185int32_t axi_adc_write(struct axi_adc *adc,
186 uint32_t reg_addr,
187 uint32_t reg_data);
189int32_t axi_adc_set_pnsel(struct axi_adc *adc,
190 uint32_t chan,
191 enum axi_adc_pn_sel sel);
193int32_t axi_adc_pn_mon(struct axi_adc *adc,
194 enum axi_adc_pn_sel sel,
195 uint32_t delay_ms);
197int32_t axi_adc_get_sampling_freq(struct axi_adc *adc,
198 uint32_t chan,
199 uint64_t *sampling_freq);
201void axi_adc_idelay_set(struct axi_adc *adc,
202 uint32_t lane,
203 uint32_t val);
205int32_t axi_adc_delay_set(struct axi_adc *adc,
206 uint32_t no_of_lanes,
207 uint32_t delay);
209int32_t axi_adc_delay_calibrate(struct axi_adc *core,
210 uint32_t no_of_lanes,
211 enum axi_adc_pn_sel sel);
213int32_t axi_adc_set_calib_phase(struct axi_adc *adc,
214 uint32_t chan,
215 int32_t val,
216 int32_t val2);
218int32_t axi_adc_get_calib_phase(struct axi_adc *adc,
219 uint32_t chan,
220 int32_t *val,
221 int32_t *val2);
223int32_t axi_adc_set_calib_scale(struct axi_adc *adc,
224 uint32_t chan,
225 int32_t val,
226 int32_t val2);
228int32_t axi_adc_get_calib_scale(struct axi_adc *adc,
229 uint32_t chan,
230 int32_t *val,
231 int32_t *val2);
233int32_t axi_adc_set_calib_bias(struct axi_adc *adc,
234 uint32_t chan,
235 int32_t val,
236 int32_t val2);
238int32_t axi_adc_get_calib_bias(struct axi_adc *adc,
239 uint32_t chan,
240 int32_t *val,
241 int32_t *val2);
243int32_t axi_adc_update_active_channels(struct axi_adc *adc, uint32_t mask);
244#endif
uint64_t sampling_freq
Definition headless.c:77
int32_t axi_adc_init(struct axi_adc **adc_core, const struct axi_adc_init *init)
AXI ADC Main Initialization.
Definition axi_adc_core.c:638
int32_t axi_adc_remove(struct axi_adc *adc)
AXI ADC Resources deallocation.
Definition axi_adc_core.c:678
void axi_adc_idelay_set(struct axi_adc *adc, uint32_t lane, uint32_t val)
Set input/output delay primitive for specific interface line.
Definition axi_adc_core.c:189
int32_t axi_adc_write(struct axi_adc *adc, uint32_t reg_addr, uint32_t reg_data)
AXI ADC Data Write.
Definition axi_adc_core.c:68
int32_t axi_adc_pn_mon(struct axi_adc *adc, enum axi_adc_pn_sel sel, uint32_t delay_ms)
Monitor the AXI ADC PN Sequence.
Definition axi_adc_core.c:133
axi_adc_pn_sel
Definition axi_adc_core.h:157
@ AXI_ADC_PN23
Definition axi_adc_core.h:162
@ AXI_ADC_PN_CUSTOM
Definition axi_adc_core.h:164
@ AXI_ADC_PN23A
Definition axi_adc_core.h:159
@ AXI_ADC_PN_END
Definition axi_adc_core.h:167
@ AXI_ADC_PN15
Definition axi_adc_core.h:161
@ AXI_ADC_PN31
Definition axi_adc_core.h:163
@ AXI_ADC_PN_RAMP_NIBBLE
Definition axi_adc_core.h:165
@ AXI_ADC_PN9
Definition axi_adc_core.h:158
@ AXI_ADC_PN7
Definition axi_adc_core.h:160
@ AXI_ADC_PN_RAMP_16
Definition axi_adc_core.h:166
int32_t axi_adc_get_sampling_freq(struct axi_adc *adc, uint32_t chan, uint64_t *sampling_freq)
Get the AXI ADC Sampling Frequency.
Definition axi_adc_core.c:168
int32_t axi_adc_read(struct axi_adc *adc, uint32_t reg_addr, uint32_t *reg_data)
AXI ADC Data read.
Definition axi_adc_core.c:52
int32_t axi_adc_delay_set(struct axi_adc *adc, uint32_t no_of_lanes, uint32_t delay)
Set input/output delay primitive for number of lines.
Definition axi_adc_core.c:204
int32_t axi_adc_delay_calibrate(struct axi_adc *core, uint32_t no_of_lanes, enum axi_adc_pn_sel sel)
Calibrate Delay using specific PN sequence.
Definition axi_adc_core.c:239
int32_t axi_adc_set_calib_scale(struct axi_adc *adc, uint32_t chan, int32_t val, int32_t val2)
Calibrate scale for specific AXI ADC channel.
Definition axi_adc_core.c:462
int32_t axi_adc_update_active_channels(struct axi_adc *adc, uint32_t mask)
Update active AXI ADC channels.
Definition axi_adc_core.c:536
int32_t axi_adc_set_calib_bias(struct axi_adc *adc, uint32_t chan, int32_t val, int32_t val2)
Calibrate bias for specific AXI ADC channel.
Definition axi_adc_core.c:494
int32_t axi_adc_init_begin(struct axi_adc **adc_core, const struct axi_adc_init *init)
Begin AXI ADC Initialization.
Definition axi_adc_core.c:584
int32_t axi_adc_get_calib_scale(struct axi_adc *adc, uint32_t chan, int32_t *val, int32_t *val2)
Get the scale calibration values for AXI ADC channel.
Definition axi_adc_core.c:478
int32_t axi_adc_get_calib_phase(struct axi_adc *adc, uint32_t chan, int32_t *val, int32_t *val2)
Get the phase calibration values for AXI ADC channel.
Definition axi_adc_core.c:446
int32_t axi_adc_init_finish(struct axi_adc *adc)
Begin AXI ADC Initialization.
Definition axi_adc_core.c:609
int32_t axi_adc_set_calib_phase(struct axi_adc *adc, uint32_t chan, int32_t val, int32_t val2)
Calibrate phase for specific AXI ADC channel.
Definition axi_adc_core.c:430
int32_t axi_adc_get_calib_bias(struct axi_adc *adc, uint32_t chan, int32_t *val, int32_t *val2)
Get the scale calibration values for AXI ADC channel.
Definition axi_adc_core.c:518
int32_t axi_adc_set_pnsel(struct axi_adc *adc, uint32_t chan, enum axi_adc_pn_sel sel)
Set AXI ADC PN sequence.
Definition axi_adc_core.c:112
Header file of utility functions.
AXI ADC Initialization Parameters structure.
Definition axi_adc_core.h:144
uint8_t num_slave_channels
Definition axi_adc_core.h:154
const char * name
Definition axi_adc_core.h:146
uint32_t slave_base
Definition axi_adc_core.h:152
uint32_t base
Definition axi_adc_core.h:148
uint8_t num_channels
Definition axi_adc_core.h:150
AXI ADC Device Descriptor.
Definition axi_adc_core.h:123
const char * name
Definition axi_adc_core.h:125
uint32_t base
Definition axi_adc_core.h:127
uint32_t mask
Definition axi_adc_core.h:137
uint8_t num_slave_channels
Definition axi_adc_core.h:133
uint8_t num_channels
Definition axi_adc_core.h:131
uint64_t clock_hz
Definition axi_adc_core.h:135
uint32_t slave_base
Definition axi_adc_core.h:129