no-OS
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
ad7616.h
Go to the documentation of this file.
1/***************************************************************************/
34#ifndef AD7616_H_
35#define AD7616_H_
36
37#include "no_os_gpio.h"
38
39#include <stdint.h>
40
41#ifdef XILINX_PLATFORM
42#include "no_os_pwm.h"
43#include "clk_axi_clkgen.h"
44#endif
45
46/* AD7616 CORE */
47#define AD7616_REG_PCORE_VERSION 0x400
48#define AD7616_REG_ID 0x404
49#define AD7616_REG_UP_SCRATCH 0x408
50#define AD7616_REG_UP_IF_TYPE 0x40C
51#define AD7616_REG_UP_CTRL 0x440
52#define AD7616_REG_UP_CONV_RATE 0x444
53#define AD7616_REG_UP_BURST_LENGTH 0x448
54#define AD7616_REG_UP_READ_DATA 0x44C
55#define AD7616_REG_UP_WRITE_DATA 0x450
56
57/* AD7616_REG_UP_CTRL */
58#define AD7616_CTRL_RESETN (1 << 0)
59#define AD7616_CTRL_CNVST_EN (1 << 1)
60
61#define AD7616_REG_CONFIG 0x02
62#define AD7616_REG_CHANNEL 0x03
63#define AD7616_REG_INPUT_RANGE_A1 0x04
64#define AD7616_REG_INPUT_RANGE_A2 0x05
65#define AD7616_REG_INPUT_RANGE_B1 0x06
66#define AD7616_REG_INPUT_RANGE_B2 0x07
67#define AD7616_REG_SEQUENCER_STACK(x) (0x20 + (x))
68
69/* AD7616_REG_CONFIG */
70#define AD7616_SDEF (1 << 7)
71#define AD7616_BURSTEN(x) ((x & 1) << 6)
72#define AD7616_BURSTEN_MASK (1 << 6)
73#define AD7616_SEQEN(x) ((x & 1) << 5)
74#define AD7616_SEQEN_MASK (1 << 5)
75#define AD7616_OS(x) (((x) & 0x7) << 2)
76#define AD7616_STATUSEN (1 << 1)
77#define AD7616_STATUSEN_MASK (1 << 1)
78#define AD7616_CRCEN (1 << 0)
79#define AD7616_CRCEN_MASK (1 << 0)
80
81/* AD7616_REG_CHANNEL */
82#define AD7616_CHA_MASK 0xF
83#define AD7616_CHB_MASK 0xF0
84#define AD7616_CHB_OFFSET 4
85#define AD7616_CHANNELS_MASK 0xFF
86
87/* AD7616_REG_INPUT_RANGE */
88#define AD7616_INPUT_RANGE(ch, x) (((x) & 0x3) << (((ch) & 0x3) * 2))
89
90/* AD7616_REG_SEQUENCER_STACK(x) */
91#define AD7616_ADDR(x) (((x) & 0x7F) << 9)
92#define AD7616_SSREN (1 << 8)
93#define AD7616_BSEL(x) (((x) & 0xF) << 4)
94#define AD7616_ASEL(x) (((x) & 0xF) << 0)
95
96/* AD7616_REG_STATUS */
97#define AD7616_STATUS_A(x) (((x) & 0xF) << 12)
98#define AD7616_STATUS_B(x) (((x) & 0xF) << 8)
99#define AD7616_STATUS_CRC(x) (((x) & 0xFF) << 0)
100
101/* AD7616 conversion results */
102#define AD7616_CHANNEL_A_SELF_TEST_VALUE 0xAAAA
103#define AD7616_CHANNEL_B_SELF_TEST_VALUE 0x5555
104
105/* AD7616_REG_PWM */
106#define AD7616_TRIGGER_PULSE_WIDTH_NS 50
107
112
117
146
152
163
165 /* SPI */
168 /* Clock gen for hdl design structure */
170 /* Trigger conversion PWM generator descriptor */
173 uint8_t crc;
174 /* GPIO */
183 /* AXI Core */
185 /* Device Settings */
191 void (*dcache_invalidate_range)(uint32_t address, uint32_t bytes_count);
192 /* Sequencer and burst mode */
193 uint8_t layers_nb;
194};
195
197 /* SPI */
200 /* PWM generator init structure */
202 /* Clock gen for hdl design init structure */
204 /* Clock generator rate */
207 uint8_t crc;
208 /* GPIO */
217 /* Core */
219 /* Device Settings */
224 void (*dcache_invalidate_range)(uint32_t address, uint32_t bytes_count);
225};
226
228 uint16_t channel_a;
229 uint16_t channel_b;
230};
231
236
237/* SPI read from device. */
238int32_t ad7616_read(struct ad7616_dev *dev,
239 uint8_t reg_addr,
240 uint16_t *reg_data);
241/* SPI write to device. */
242int32_t ad7616_write(struct ad7616_dev *dev,
243 uint8_t reg_addr,
244 uint16_t reg_data);
245/* SPI read from device using a mask. */
246int32_t ad7616_read_mask(struct ad7616_dev *dev,
247 uint8_t reg_addr,
248 uint16_t mask,
249 uint16_t *data);
250/* SPI write to device using a mask. */
251int32_t ad7616_write_mask(struct ad7616_dev *dev,
252 uint8_t reg_addr,
253 uint16_t mask,
254 uint16_t data);
255/* SPI read from device. */
256int32_t ad7616_spi_read(struct ad7616_dev *dev,
257 uint8_t reg_addr,
258 uint16_t *reg_data);
259/* SPI write to device. */
260int32_t ad7616_spi_write(struct ad7616_dev *dev,
261 uint8_t reg_addr,
262 uint16_t reg_data);
263/* PAR read from device. */
264int32_t ad7616_par_read(struct ad7616_dev *dev,
265 uint8_t reg_addr,
266 uint16_t *reg_data);
267/* PAR write to device. */
268int32_t ad7616_par_write(struct ad7616_dev *dev,
269 uint8_t reg_addr,
270 uint16_t reg_data);
271/* Perform a full reset of the device. */
272int32_t ad7616_reset(struct ad7616_dev *dev);
273/* Set the analog input range for the selected analog input channel. */
274int32_t ad7616_set_range(struct ad7616_dev *dev,
275 enum ad7616_ch ch,
276 enum ad7616_range range);
277/* Set the operation mode (software or hardware). */
278int32_t ad7616_set_mode(struct ad7616_dev *dev,
279 enum ad7616_mode mode);
280/* Set the oversampling ratio. */
281int32_t ad7616_set_oversampling_ratio(struct ad7616_dev *dev,
282 enum ad7616_osr osr);
283/* Read data in serial mode. */
284int32_t ad7616_read_data_serial(struct ad7616_dev *dev,
285 struct ad7616_conversion_result *results,
286 uint32_t samples);
287/* Read data in parallel mode. */
288int32_t ad7616_read_data_parallel(struct ad7616_dev *dev,
289 uint32_t *buf,
290 uint32_t samples);
291/* Initialize the core. */
292int32_t ad7616_core_setup(struct ad7616_dev *dev);
293/* Initialize the device. */
294int32_t ad7616_setup(struct ad7616_dev **device,
296/* Remove the device. */
297void ad7616_remove(struct ad7616_dev *device);
298/* Read conversion results. */
299int32_t ad7616_read_channel_source(struct ad7616_dev *dev, enum ad7616_ch *ch_a,
300 enum ad7616_ch *ch_b);
301/* Select the input source for a channel. */
302int32_t ad7616_select_channel_source(struct ad7616_dev *dev, enum ad7616_ch ch);
303/* Setup sequencer with given layers. */
304int32_t ad7616_setup_sequencer(struct ad7616_dev *dev,
305 struct ad7616_sequencer_layer *layers, uint32_t layers_nb, uint8_t burst);
306/* Disable the sequencer. */
307int32_t ad7616_disable_sequencer(struct ad7616_dev *dev);
308#endif
ad7616_interface
Definition ad7616.h:113
@ AD7616_PARALLEL
Definition ad7616.h:115
@ AD7616_SERIAL
Definition ad7616.h:114
int32_t ad7616_spi_write(struct ad7616_dev *dev, uint8_t reg_addr, uint16_t reg_data)
Definition ad7616.c:435
int32_t ad7616_select_channel_source(struct ad7616_dev *dev, enum ad7616_ch ch)
Select a new source for a channel.
Definition ad7616.c:275
void ad7616_remove(struct ad7616_dev *device)
Definition ad7616.c:1060
int32_t ad7616_setup(struct ad7616_dev **device, struct ad7616_init_param *init_param)
Definition ad7616.c:938
int32_t ad7616_read_data_serial(struct ad7616_dev *dev, struct ad7616_conversion_result *results, uint32_t samples)
Read conversion result from device, checking with CRC if enabled.
Definition ad7616.c:661
ad7616_ch
Definition ad7616.h:118
@ AD7616_VB_ALDO
Definition ad7616.h:141
@ AD7616_VB6
Definition ad7616.h:138
@ AD7616_VA_ALDO
Definition ad7616.h:128
@ AD7616_VB3
Definition ad7616.h:135
@ AD7616_VA6
Definition ad7616.h:125
@ AD7616_VB5
Definition ad7616.h:137
@ AD7616_VA_RESERVED1
Definition ad7616.h:129
@ AD7616_VB1
Definition ad7616.h:133
@ AD7616_VB_RESERVED2
Definition ad7616.h:144
@ AD7616_VA_SELF_TEST
Definition ad7616.h:130
@ AD7616_VA3
Definition ad7616.h:122
@ AD7616_VB0
Definition ad7616.h:132
@ AD7616_VA7
Definition ad7616.h:126
@ AD7616_VB4
Definition ad7616.h:136
@ AD7616_VA5
Definition ad7616.h:124
@ AD7616_VB2
Definition ad7616.h:134
@ AD7616_VB_RESERVED1
Definition ad7616.h:142
@ AD7616_VB7
Definition ad7616.h:139
@ AD7616_VA_VCC
Definition ad7616.h:127
@ AD7616_VB_SELF_TEST
Definition ad7616.h:143
@ AD7616_VA_RESERVED2
Definition ad7616.h:131
@ AD7616_VA2
Definition ad7616.h:121
@ AD7616_VA4
Definition ad7616.h:123
@ AD7616_VA1
Definition ad7616.h:120
@ AD7616_VA0
Definition ad7616.h:119
@ AD7616_VB_VCC
Definition ad7616.h:140
ad7616_mode
Definition ad7616.h:108
@ AD7616_SW
Definition ad7616.h:109
@ AD7616_HW
Definition ad7616.h:110
ad7616_osr
Definition ad7616.h:153
@ AD7616_OSR_16
Definition ad7616.h:158
@ AD7616_OSR_8
Definition ad7616.h:157
@ AD7616_OSR_32
Definition ad7616.h:159
@ AD7616_OSR_2
Definition ad7616.h:155
@ AD7616_OSR_0
Definition ad7616.h:154
@ AD7616_OSR_128
Definition ad7616.h:161
@ AD7616_OSR_4
Definition ad7616.h:156
@ AD7616_OSR_64
Definition ad7616.h:160
int32_t ad7616_disable_sequencer(struct ad7616_dev *dev)
Definition ad7616.c:877
int32_t ad7616_set_mode(struct ad7616_dev *dev, enum ad7616_mode mode)
Definition ad7616.c:549
int32_t ad7616_set_range(struct ad7616_dev *dev, enum ad7616_ch ch, enum ad7616_range range)
Definition ad7616.c:494
int32_t ad7616_read(struct ad7616_dev *dev, uint8_t reg_addr, uint16_t *reg_data)
Definition ad7616.c:320
int32_t ad7616_read_channel_source(struct ad7616_dev *dev, enum ad7616_ch *ch_a, enum ad7616_ch *ch_b)
Read the current selected channels.
Definition ad7616.c:297
int32_t ad7616_read_data_parallel(struct ad7616_dev *dev, uint32_t *buf, uint32_t samples)
Read from device in parallel mode. Enter register mode to read/write registers.
Definition ad7616.c:750
int32_t ad7616_setup_sequencer(struct ad7616_dev *dev, struct ad7616_sequencer_layer *layers, uint32_t layers_nb, uint8_t burst)
Setup the sequencer layers.
Definition ad7616.c:839
ad7616_range
Definition ad7616.h:147
@ AD7616_10V
Definition ad7616.h:150
@ AD7616_5V
Definition ad7616.h:149
@ AD7616_2V5
Definition ad7616.h:148
int32_t ad7616_read_mask(struct ad7616_dev *dev, uint8_t reg_addr, uint16_t mask, uint16_t *data)
Definition ad7616.c:355
int32_t ad7616_write_mask(struct ad7616_dev *dev, uint8_t reg_addr, uint16_t mask, uint16_t data)
Definition ad7616.c:380
int32_t ad7616_spi_read(struct ad7616_dev *dev, uint8_t reg_addr, uint16_t *reg_data)
Definition ad7616.c:409
int32_t ad7616_set_oversampling_ratio(struct ad7616_dev *dev, enum ad7616_osr osr)
Definition ad7616.c:578
int32_t ad7616_par_write(struct ad7616_dev *dev, uint8_t reg_addr, uint16_t reg_data)
Definition ad7616.c:727
int32_t ad7616_core_setup(struct ad7616_dev *dev)
int32_t ad7616_write(struct ad7616_dev *dev, uint8_t reg_addr, uint16_t reg_data)
Definition ad7616.c:337
int32_t ad7616_reset(struct ad7616_dev *dev)
Definition ad7616.c:454
int32_t ad7616_par_read(struct ad7616_dev *dev, uint8_t reg_addr, uint16_t *reg_data)
Definition ad7616.c:701
struct ad7616_init_param init_param
Definition ad7616_sdz.c:107
Driver for the Analog Devices AXI CLKGEN.
Header file of GPIO Interface.
Header file of PWM Interface.
Definition ad7616.h:227
uint16_t channel_b
Definition ad7616.h:229
uint16_t channel_a
Definition ad7616.h:228
Definition ad7616.h:164
enum ad7616_mode mode
Definition ad7616.h:187
struct no_os_gpio_desc * gpio_hw_rngsel1
Definition ad7616.h:176
enum ad7616_osr osr
Definition ad7616.h:190
enum ad7616_range va[8]
Definition ad7616.h:188
struct no_os_gpio_desc * gpio_hw_rngsel0
Definition ad7616.h:175
uint32_t core_baseaddr
Definition ad7616.h:184
uint8_t layers_nb
Definition ad7616.h:193
struct axi_clkgen * clkgen
Definition ad7616.h:169
struct no_os_spi_desc * spi_desc
Definition ad7616.h:166
struct no_os_gpio_desc * gpio_reset
Definition ad7616.h:177
struct no_os_gpio_desc * gpio_os2
Definition ad7616.h:180
enum ad7616_range vb[8]
Definition ad7616.h:189
uint32_t reg_access_speed
Definition ad7616.h:172
struct no_os_gpio_desc * gpio_os1
Definition ad7616.h:179
struct no_os_pwm_desc * trigger_pwm_desc
Definition ad7616.h:171
struct no_os_gpio_desc * gpio_busy
Definition ad7616.h:182
struct no_os_gpio_desc * gpio_convst
Definition ad7616.h:181
enum ad7616_interface interface
Definition ad7616.h:186
uint8_t crc
Definition ad7616.h:173
struct no_os_gpio_desc * gpio_os0
Definition ad7616.h:178
struct spi_engine_offload_init_param * offload_init_param
Definition ad7616.h:167
void(* dcache_invalidate_range)(uint32_t address, uint32_t bytes_count)
Definition ad7616.h:191
Definition ad7616.h:196
struct no_os_gpio_init_param * gpio_busy_param
Definition ad7616.h:216
struct no_os_pwm_init_param * trigger_pwm_init
Definition ad7616.h:201
uint8_t crc
Definition ad7616.h:207
struct no_os_gpio_init_param * gpio_convst_param
Definition ad7616.h:215
uint32_t core_baseaddr
Definition ad7616.h:218
struct no_os_gpio_init_param * gpio_hw_rngsel0_param
Definition ad7616.h:209
struct no_os_gpio_init_param * gpio_hw_rngsel1_param
Definition ad7616.h:210
uint32_t axi_clkgen_rate
Definition ad7616.h:205
enum ad7616_mode mode
Definition ad7616.h:220
struct axi_clkgen_init * clkgen_init
Definition ad7616.h:203
struct no_os_gpio_init_param * gpio_reset_param
Definition ad7616.h:211
uint32_t reg_access_speed
Definition ad7616.h:206
struct no_os_gpio_init_param * gpio_os2_param
Definition ad7616.h:214
struct no_os_spi_init_param * spi_param
Definition ad7616.h:198
enum ad7616_range vb[8]
Definition ad7616.h:222
struct no_os_gpio_init_param * gpio_os1_param
Definition ad7616.h:213
void(* dcache_invalidate_range)(uint32_t address, uint32_t bytes_count)
Definition ad7616.h:224
struct spi_engine_offload_init_param * offload_init_param
Definition ad7616.h:199
enum ad7616_range va[8]
Definition ad7616.h:221
enum ad7616_osr osr
Definition ad7616.h:223
struct no_os_gpio_init_param * gpio_os0_param
Definition ad7616.h:212
Definition ad7616.h:232
enum ad7616_ch ch_b
Definition ad7616.h:234
enum ad7616_ch ch_a
Definition ad7616.h:233
Definition clk_axi_clkgen.h:44
Definition clk_axi_clkgen.h:38
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 representing an PWM generator device.
Definition no_os_pwm.h:83
Structure containing the init parameters needed by the PWM generator.
Definition no_os_pwm.h:56
Structure holding SPI descriptor.
Definition no_os_spi.h:180
Structure holding the parameters for SPI initialization.
Definition no_os_spi.h:128
Structure containing the init parameters needed by the offload module.
Definition spi_engine.h:131