no-OS
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
axi_dac_core.h
Go to the documentation of this file.
1/***************************************************************************/
33#ifndef AXI_DAC_CORE_H_
34#define AXI_DAC_CORE_H_
35
36#include <stdint.h>
37
42
48
53struct axi_dac {
55 const char *name;
57 uint32_t base;
59 uint8_t num_channels;
61 uint64_t clock_hz;
65 uint32_t bus_type;
66};
67
70 const char *name;
72 uint32_t base;
74 uint8_t num_channels;
78 uint8_t rate;
80 uint32_t bus_type;
81};
82
95
97 uint32_t dds_frequency_0; // in hz (1000*1000 for MHz)
98 uint32_t dds_phase_0; // in milli(?) angles (90*1000 for 90 degrees = pi/2)
99 int32_t dds_scale_0; // in micro units (1.0*1000*1000 is 1.0)
100 uint32_t dds_frequency_1; // in hz (1000*1000 for MHz)
101 uint32_t dds_phase_1; // in milli(?) angles (90*1000 for 90 degrees = pi/2)
102 int32_t dds_scale_1; // in micro units (1.0*1000*1000 is 1.0)
103 uint32_t dds_dual_tone; // if using single tone for this channel, set to 0x0
104 uint32_t pat_data; // if using SED/debug that sort of thing
105 enum axi_dac_data_sel sel; // set to one of the enumerated type above.
106};
107
108extern const uint16_t sine_lut[128];
109
110extern const uint32_t sine_lut_iq[1024];
111
113int32_t axi_dac_init_begin(struct axi_dac **dac_core,
114 const struct axi_dac_init *init);
116int32_t axi_dac_init_finish(struct axi_dac *dac);
118int32_t axi_dac_init(struct axi_dac **dac_core,
119 const struct axi_dac_init *init);
121int32_t axi_dac_remove(struct axi_dac *dac);
123int32_t axi_dac_set_datasel(struct axi_dac *dac,
124 int32_t chan,
125 enum axi_dac_data_sel sel);
127int32_t axi_dac_dds_set_frequency(struct axi_dac *dac,
128 uint32_t chan, uint32_t freq_hz);
130int32_t axi_dac_dds_get_frequency(struct axi_dac *dac,
131 uint32_t chan, uint32_t *freq);
133int32_t axi_dac_dds_set_phase(struct axi_dac *dac,
134 uint32_t chan, uint32_t phase);
136int32_t axi_dac_dds_get_phase(struct axi_dac *dac,
137 uint32_t chan, uint32_t *phase);
139int32_t axi_dac_dds_set_scale(struct axi_dac *dac,
140 uint32_t chan,
141 int32_t scale_micro_units);
143int32_t axi_dac_dds_get_scale(struct axi_dac *dac,
144 uint32_t chan,
145 int32_t *scale_micro_units);
147int32_t axi_dac_set_buff(struct axi_dac *dac,
148 uint32_t address,
149 uint16_t *buff,
150 uint32_t buff_size);
152uint32_t axi_dac_set_sine_lut(struct axi_dac *dac,
153 uint32_t address);
155int32_t axi_dac_dds_get_calib_scale(struct axi_dac *dac,
156 uint32_t chan,
157 int32_t *val,
158 int32_t *val2);
160int32_t axi_dac_dds_get_calib_phase(struct axi_dac *dac,
161 uint32_t chan,
162 int32_t *val,
163 int32_t *val2);
165int32_t axi_dac_dds_set_calib_scale(struct axi_dac *dac,
166 uint32_t chan,
167 int32_t val,
168 int32_t val2);
170int32_t axi_dac_dds_set_calib_phase(struct axi_dac *dac,
171 uint32_t chan,
172 int32_t val,
173 int32_t val2);
175int32_t axi_dac_load_custom_data(struct axi_dac *dac,
176 const uint32_t *custom_data_iq,
177 uint32_t custom_tx_count,
178 uint32_t address);
180int32_t axi_dac_data_setup(struct axi_dac *dac);
182int32_t axi_dac_bus_read(struct axi_dac *dac,
183 uint32_t reg_addr,
184 uint32_t *reg_data,
185 uint8_t data_size);
187int32_t axi_dac_bus_write(struct axi_dac *dac,
188 uint32_t reg_addr,
189 uint32_t reg_data,
190 uint8_t data_size);
192int32_t axi_dac_set_ddr(struct axi_dac *dac,
193 bool enable);
195int32_t axi_dac_set_io_mode(struct axi_dac *dac,
196 enum axi_io_mode mode);
198int32_t axi_dac_set_data_stream(struct axi_dac *dac,
199 bool enable);
201int32_t axi_dac_data_transfer_addr(struct axi_dac *dac,
202 uint32_t address);
204int32_t axi_dac_data_format_set(struct axi_dac *dac,
205 int format);
206
207#endif
const uint16_t sine_lut[128]
Definition adc_demo.c:43
const uint32_t sine_lut_iq[1024]
Definition axi_dac_core.c:140
int32_t axi_dac_dds_set_calib_phase(struct axi_dac *dac, uint32_t chan, int32_t val, int32_t val2)
Calibrate phase for specific AXI DAC channel.
Definition axi_dac_core.c:950
int32_t axi_dac_dds_get_scale(struct axi_dac *dac, uint32_t chan, int32_t *scale_micro_units)
AXI DAC Get DDS scale for specific channel.
Definition axi_dac_core.c:754
int32_t axi_dac_set_buff(struct axi_dac *dac, uint32_t address, uint16_t *buff, uint32_t buff_size)
AXI DAC Set data buffer.
Definition axi_dac_core.c:1045
int32_t axi_dac_bus_write(struct axi_dac *dac, uint32_t reg_addr, uint32_t reg_data, uint8_t data_size)
AXI DAC Bus Data Write.
Definition axi_dac_core.c:439
axi_iface
Definition axi_dac_core.h:38
@ AXI_DAC_BUS_TYPE_QSPI
Definition axi_dac_core.h:40
@ AXI_DAC_BUS_TYPE_NONE
Definition axi_dac_core.h:39
axi_dac_data_sel
Definition axi_dac_core.h:83
@ AXI_DAC_DATA_SEL_DDS
Definition axi_dac_core.h:84
@ AXI_DAC_DATA_SEL_SED
Definition axi_dac_core.h:85
@ AXI_DAC_DATA_SEL_PN23
Definition axi_dac_core.h:90
@ AXI_DAC_DATA_SEL_LB
Definition axi_dac_core.h:92
@ AXI_DAC_DATA_SEL_PN7
Definition axi_dac_core.h:88
@ AXI_DAC_DATA_SEL_PN15
Definition axi_dac_core.h:89
@ AXI_DAC_DATA_SEL_PN31
Definition axi_dac_core.h:91
@ AXI_DAC_DATA_SEL_DMA
Definition axi_dac_core.h:86
@ AXI_DAC_DATA_SEL_ZERO
Definition axi_dac_core.h:87
@ AXI_DAC_DATA_SEL_PNXX
Definition axi_dac_core.h:93
int32_t axi_dac_set_ddr(struct axi_dac *dac, bool enable)
AXI DAC Set DDR (bus double-data-rate) mode.
Definition axi_dac_core.c:515
int32_t axi_dac_bus_read(struct axi_dac *dac, uint32_t reg_addr, uint32_t *reg_data, uint8_t data_size)
AXI DAC Bus Data Read.
Definition axi_dac_core.c:483
int32_t axi_dac_set_io_mode(struct axi_dac *dac, enum axi_io_mode mode)
AXI DAC Set IO mode.
Definition axi_dac_core.c:529
int32_t axi_dac_remove(struct axi_dac *dac)
AXI DAC Resources deallocation.
Definition axi_dac_core.c:1247
int32_t axi_dac_dds_get_calib_scale(struct axi_dac *dac, uint32_t chan, int32_t *val, int32_t *val2)
Get the scale calibration values for AXI DAC channel.
Definition axi_dac_core.c:934
int32_t axi_dac_dds_get_frequency(struct axi_dac *dac, uint32_t chan, uint32_t *freq)
AXI DAC Get DDS frequency for specific channel.
Definition axi_dac_core.c:647
int32_t axi_dac_data_transfer_addr(struct axi_dac *dac, uint32_t address)
AXI DAC Set starting dma data trasfer address.
Definition axi_dac_core.c:559
axi_io_mode
Definition axi_dac_core.h:43
@ AXI_DAC_IO_MODE_QSPI
Definition axi_dac_core.h:46
@ AXI_DAC_IO_MODE_SPI
Definition axi_dac_core.h:44
@ AXI_DAC_IO_MODE_DSPI
Definition axi_dac_core.h:45
int32_t axi_dac_set_datasel(struct axi_dac *dac, int32_t chan, enum axi_dac_data_sel sel)
AXI DAC Set Data type for specific channel.
Definition axi_dac_core.c:599
int32_t axi_dac_data_format_set(struct axi_dac *dac, int format)
AXI DAC data format.
Definition axi_dac_core.c:579
uint32_t axi_dac_set_sine_lut(struct axi_dac *dac, uint32_t address)
AXI DAC Set data based on a Sine Lookup Table.
Definition axi_dac_core.c:980
int32_t axi_dac_dds_get_calib_phase(struct axi_dac *dac, uint32_t chan, int32_t *val, int32_t *val2)
Get the phase calibration values for AXI DAC channel.
Definition axi_dac_core.c:966
int32_t axi_dac_init_begin(struct axi_dac **dac_core, const struct axi_dac_init *init)
Begin AXI DAC Initialization.
Definition axi_dac_core.c:1107
int32_t axi_dac_init(struct axi_dac **dac_core, const struct axi_dac_init *init)
AXI DAC Main Initialization.
Definition axi_dac_core.c:1163
int32_t axi_dac_dds_set_calib_scale(struct axi_dac *dac, uint32_t chan, int32_t val, int32_t val2)
Calibrate scale for specific AXI DAC channel.
Definition axi_dac_core.c:918
int32_t axi_dac_dds_get_phase(struct axi_dac *dac, uint32_t chan, uint32_t *phase)
AXI DAC Get DDS phase for specific channel.
Definition axi_dac_core.c:697
int32_t axi_dac_dds_set_phase(struct axi_dac *dac, uint32_t chan, uint32_t phase)
AXI DAC Set DDS phase for specific channel.
Definition axi_dac_core.c:672
int32_t axi_dac_init_finish(struct axi_dac *dac)
Begin AXI DAC Initialization.
Definition axi_dac_core.c:1132
int32_t axi_dac_load_custom_data(struct axi_dac *dac, const uint32_t *custom_data_iq, uint32_t custom_tx_count, uint32_t address)
AXI DAC Load custom data.
Definition axi_dac_core.c:1072
int32_t axi_dac_data_setup(struct axi_dac *dac)
AXI DAC Data Setup.
Definition axi_dac_core.c:1202
int32_t axi_dac_dds_set_frequency(struct axi_dac *dac, uint32_t chan, uint32_t freq_hz)
AXI DAC Set DDS frequency for specific channel.
Definition axi_dac_core.c:623
int32_t axi_dac_dds_set_scale(struct axi_dac *dac, uint32_t chan, int32_t scale_micro_units)
AXI DAC Set DDS scale for specific channel.
Definition axi_dac_core.c:723
int32_t axi_dac_set_data_stream(struct axi_dac *dac, bool enable)
AXI DAC Set data stream mode.
Definition axi_dac_core.c:544
Definition axi_dac_core.h:96
uint32_t dds_phase_0
Definition axi_dac_core.h:98
uint32_t dds_phase_1
Definition axi_dac_core.h:101
uint32_t dds_dual_tone
Definition axi_dac_core.h:103
uint32_t dds_frequency_1
Definition axi_dac_core.h:100
uint32_t pat_data
Definition axi_dac_core.h:104
uint32_t dds_frequency_0
Definition axi_dac_core.h:97
enum axi_dac_data_sel sel
Definition axi_dac_core.h:105
int32_t dds_scale_1
Definition axi_dac_core.h:102
int32_t dds_scale_0
Definition axi_dac_core.h:99
Definition axi_dac_core.h:68
uint32_t bus_type
Definition axi_dac_core.h:80
uint8_t num_channels
Definition axi_dac_core.h:74
uint8_t rate
Definition axi_dac_core.h:78
uint32_t base
Definition axi_dac_core.h:72
const char * name
Definition axi_dac_core.h:70
struct axi_dac_channel * channels
Definition axi_dac_core.h:76
AXI DAC Device Descriptor.
Definition axi_dac_core.h:53
uint64_t clock_hz
Definition axi_dac_core.h:61
uint32_t bus_type
Definition axi_dac_core.h:65
uint8_t num_channels
Definition axi_dac_core.h:59
uint32_t base
Definition axi_dac_core.h:57
struct axi_dac_channel * channels
Definition axi_dac_core.h:63
const char * name
Definition axi_dac_core.h:55