precision-converters-firmware
Loading...
Searching...
No Matches
ad4692_support.h
Go to the documentation of this file.
1/*************************************************************************/
14#ifndef AD4692_SUPPORT_H
15#define AD4692_SUPPORT_H
16
17/******************************************************************************/
18/***************************** Include Files **********************************/
19/******************************************************************************/
20
21#include "no_os_gpio.h"
22#include "iio.h"
23#include "iio_trigger.h"
24#include "ad4692.h"
25
26/******************************************************************************/
27/********************** Macros and Constants Definition ***********************/
28/******************************************************************************/
29
30/* Maximum number of slots in the advanced sequencer */
31#define AD4692_MAX_SLOTS_AS 128
32
33/* Enable toggling of CS */
34#define CS_CHANGE 1
35
36/* Number of bytes per transaction for accumulator data */
37#define AD4692_N_BYTES_TXN_24BIT 5
38
39/* Number of bytes per transaction for averaged data */
40#define AD4692_N_BYTES_TXN_16BIT 4
41
42/* Number of bytes of command for data capture */
43#define AD4692_N_BYTES_TXN_OFFSET 2
44
45/* Number of CNV toggles to register the channel ID */
46#define AD4692_N_CNV_TOGGLES 2
47
48/* Exit manual mode */
49#define AD4692_EXIT_MANUAL_MODE 0x0
50
51/* Converts pwm period in nanoseconds to sampling frequency in samples per second */
52#define PWM_PERIOD_TO_FREQUENCY(x) (1E9 / x)
53
54/******************************************************************************/
55/********************** Variables and User Defined Data Types *****************/
56/******************************************************************************/
57
66
75
81 int32_t (*initialize)(struct ad4692_desc *desc);
82 int32_t (*prepare_transfer)(void *dev, uint32_t ch_mask);
83 int32_t (*submit_samples)(struct iio_device_data *iio_dev_data);
84 int32_t (*trigger_handler)(struct iio_device_data *iio_dev_data);
85 int32_t (*end_transfer)(void *dev);
86 int32_t (*remove)(struct ad4692_desc *desc);
87 int32_t (*read_converted_data)(struct ad4692_desc *desc, uint8_t chn,
88 uint32_t *adc_data);
89 int32_t (*update_sampling_frequency)(uint32_t *sampling_rate);
90 uint32_t (*get_max_sampling_rate)(void);
91};
92
93/* Mode-specific data transfer system instances */
98
99/* Shared state accessed by mode files */
100extern uint8_t ad4692_active_channels[];
101extern uint8_t num_of_active_channels;
102extern uint16_t channel_mask;
103extern uint8_t ad4692_acc_count[];
104extern uint8_t channel_priorities[];
105extern uint8_t n_data_bytes;
106extern uint8_t n_bytes_per_transaction;
107extern volatile bool ad4692_conversion_flag;
108extern volatile bool buf_size_updated;
111extern enum ad4692_int_osc_sel ad4692_osc_freq_id;
112extern struct iio_hw_trig *ad4692_hw_trig_desc;
113
114/******************************************************************************/
115/************************ Public Declarations *********************************/
116/******************************************************************************/
117
118/* Utility functions */
119int ad4692_configure_channel(struct ad4692_desc *desc);
120int ad4692_configure_channel_priorities(uint8_t *chn_priorities,
121 uint8_t* channel_sequence, uint8_t *num_as_slots, uint8_t *acc_count);
123 enum ad4692_sequencer_modes sequencer, uint8_t *chn_priorities);
124int ad4692_exit_manual_mode(struct ad4692_desc *desc);
125int ad4692_configure_pwm_rate(struct no_os_pwm_desc *desc,
126 uint32_t sampling_rate);
127void ad4692_get_tx_command(uint8_t *local_tx_data);
128
129/* Common utility functions */
130void ad4692_update_active_channels(uint32_t ch_mask);
131
132/* Delegation functions */
133int32_t ad4692_data_transfer_init(struct ad4692_desc *desc,
134 enum ad4692_spi_mode mode);
135int32_t ad4692_data_transfer_prepare(void *dev, uint32_t ch_mask);
136int32_t ad4692_data_transfer_submit(struct iio_device_data *iio_dev_data);
137int32_t ad4692_data_transfer_trigger_handler(struct iio_device_data
138 *iio_dev_data);
139int32_t ad4692_data_transfer_end(void *dev);
140int32_t ad4692_data_transfer_remove(struct ad4692_desc *desc);
141int32_t ad4692_data_transfer_read_converted_data(struct ad4692_desc *desc,
142 uint8_t chn, uint32_t *adc_data);
143int32_t ad4692_data_transfer_update_freq(uint32_t *sampling_rate);
144uint32_t ad4692_get_max_sampling_rate(enum ad4692_spi_mode mode);
145
146#endif /* end of AD4692_SUPPORT_H */
uint8_t channel_sequence[AD4692_MAX_SLOTS_AS]
Definition ad4692_iio.c:321
struct ad4692_data_transfer_system ad4692_data_transfer_cnv_clock_mode
Definition ad4692_support_cnv_clock_mode.c:459
int ad4692_configure_acc_mask(uint16_t channel_mask, enum ad4692_sequencer_modes sequencer, uint8_t *chn_priorities)
Configure the accumulator mask.
Definition ad4692_support.c:321
ad4692_readback_options
AD4692 readback options.
Definition ad4692_support.h:71
@ ACCUMULATOR_DATA
Definition ad4692_support.h:73
@ AVERAGED_DATA
Definition ad4692_support.h:72
void ad4692_get_tx_command(uint8_t *local_tx_data)
Get the Tx buffer respective to the enabled channels.
Definition ad4692_support.c:278
enum ad4692_int_osc_sel ad4692_osc_freq_id
Definition ad4692_iio.c:309
struct ad4692_data_transfer_system ad4692_data_transfer_spi_burst_mode
Definition ad4692_support_spi_burst_mode.c:510
uint8_t n_data_bytes
Definition ad4692_iio.c:327
uint16_t channel_mask
Definition ad4692_iio.c:232
ad4692_sequencer_modes
AD4692 sequencer modes.
Definition ad4692_support.h:62
@ STANDARD_SEQUENCER
Definition ad4692_support.h:63
@ ADVANCED_SEQUENCER
Definition ad4692_support.h:64
int32_t ad4692_data_transfer_update_freq(uint32_t *sampling_rate)
Delegation: update sampling frequency for active mode.
Definition ad4692_support.c:239
int32_t ad4692_data_transfer_read_converted_data(struct ad4692_desc *desc, uint8_t chn, uint32_t *adc_data)
Delegation: read converted data from active mode.
Definition ad4692_support.c:98
struct ad4692_data_transfer_system ad4692_data_transfer_cnv_burst_mode
Definition ad4692_support_cnv_burst_mode.c:487
int32_t ad4692_data_transfer_submit(struct iio_device_data *iio_dev_data)
Delegation: submit samples for active mode.
Definition ad4692_support.c:202
struct ad4692_data_transfer_system ad4692_data_transfer_manual_mode
Definition ad4692_support_manual_mode.c:945
uint8_t channel_priorities[]
Definition ad4692_iio.c:318
int32_t ad4692_data_transfer_init(struct ad4692_desc *desc, enum ad4692_spi_mode mode)
Initialize the data transfer system for a given ADC mode.
Definition ad4692_support.c:52
enum ad4692_sequencer_modes ad4692_sequencer_mode
Definition ad4692_iio.c:294
uint8_t n_bytes_per_transaction
Definition ad4692_iio.c:330
int32_t ad4692_data_transfer_trigger_handler(struct iio_device_data *iio_dev_data)
Delegation: trigger handler for active mode.
Definition ad4692_support.c:220
uint8_t num_of_active_channels
Definition ad4170_iio.c:195
int32_t ad4692_data_transfer_end(void *dev)
Delegation: end transfer for active mode.
Definition ad4692_support.c:166
int ad4692_configure_channel(struct ad4692_desc *desc)
Configure the per channel accumulator count limit and enable the desired channels in the AD4692 devic...
Definition ad4692_support.c:492
int ad4692_exit_manual_mode(struct ad4692_desc *desc)
Exit manual mode and switch to CNV clock mode.
Definition ad4692_support.c:534
int32_t ad4692_data_transfer_remove(struct ad4692_desc *desc)
Delegation: remove active mode resources.
Definition ad4692_support.c:184
uint32_t ad4692_get_max_sampling_rate(enum ad4692_spi_mode mode)
Get maximum sampling rate for a given ADC mode.
Definition ad4692_support.c:257
void ad4692_update_active_channels(uint32_t ch_mask)
Update active channels based on sequencer mode and channel mask.
Definition ad4692_support.c:117
int ad4692_configure_pwm_rate(struct no_os_pwm_desc *desc, uint32_t sampling_rate)
Configure PWM with optimal prescaler for given sampling rate.
Definition ad4692_support.c:574
int ad4692_configure_channel_priorities(uint8_t *chn_priorities, uint8_t *channel_sequence, uint8_t *num_as_slots, uint8_t *acc_count)
Configure the advanced sequencer slots.
Definition ad4692_support.c:372
volatile bool ad4692_conversion_flag
Definition ad4692_iio.c:220
int32_t ad4692_data_transfer_prepare(void *dev, uint32_t ch_mask)
Delegation: prepare transfer for active mode.
Definition ad4692_support.c:148
uint8_t ad4692_acc_count[]
Definition ad4692_iio.c:235
volatile bool buf_size_updated
Definition ad4692_support.c:37
uint8_t ad4692_active_channels[]
Definition ad4692_iio.c:214
struct iio_hw_trig * ad4692_hw_trig_desc
Definition ad4692_iio.c:154
enum ad4692_readback_options ad4692_readback_option
Definition ad4692_iio.c:303
AD4692 Data transfer system function pointers (per ADC mode)
Definition ad4692_support.h:80
int32_t(* trigger_handler)(struct iio_device_data *iio_dev_data)
Definition ad4692_support.h:84
int32_t(* submit_samples)(struct iio_device_data *iio_dev_data)
Definition ad4692_support.h:83
int32_t(* remove)(struct ad4692_desc *desc)
Definition ad4692_support.h:86
int32_t(* end_transfer)(void *dev)
Definition ad4692_support.h:85
int32_t(* update_sampling_frequency)(uint32_t *sampling_rate)
Definition ad4692_support.h:89
int32_t(* prepare_transfer)(void *dev, uint32_t ch_mask)
Definition ad4692_support.h:82
uint32_t(* get_max_sampling_rate)(void)
Definition ad4692_support.h:90
int32_t(* read_converted_data)(struct ad4692_desc *desc, uint8_t chn, uint32_t *adc_data)
Definition ad4692_support.h:87
int32_t(* initialize)(struct ad4692_desc *desc)
Definition ad4692_support.h:81
Definition ad77681.h:497