no-OS
Loading...
Searching...
No Matches
ad7616.c File Reference

Implementation of AD7616 Driver. More...

#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <stdio.h>
#include "ad7616.h"
#include "no_os_gpio.h"
#include "no_os_error.h"
#include "no_os_delay.h"
#include "no_os_alloc.h"
#include "no_os_util.h"
#include "no_os_spi.h"
Include dependency graph for ad7616.c:

Macros

#define AD7616_GET_BIT(v, b)
 
#define AD7616_TOGGLE_TIMEOUT_DELAY   (8192 * 1024)
 
#define SPI_ENGINE_WORDS_PER_READ   1
 

Functions

int32_t ad7616_select_channel_source (struct ad7616_dev *dev, enum ad7616_ch ch)
 Select a new source for a channel.
 
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.
 
int32_t ad7616_read (struct ad7616_dev *dev, uint8_t reg_addr, uint16_t *reg_data)
 
int32_t ad7616_write (struct ad7616_dev *dev, uint8_t reg_addr, uint16_t reg_data)
 
int32_t ad7616_read_mask (struct ad7616_dev *dev, uint8_t reg_addr, uint16_t mask, uint16_t *data)
 
int32_t ad7616_write_mask (struct ad7616_dev *dev, uint8_t reg_addr, uint16_t mask, uint16_t data)
 
int32_t ad7616_spi_read (struct ad7616_dev *dev, uint8_t reg_addr, uint16_t *reg_data)
 
int32_t ad7616_spi_write (struct ad7616_dev *dev, uint8_t reg_addr, uint16_t reg_data)
 
int32_t ad7616_reset (struct ad7616_dev *dev)
 
int32_t ad7616_set_range (struct ad7616_dev *dev, enum ad7616_ch ch, enum ad7616_range range)
 
int32_t ad7616_set_mode (struct ad7616_dev *dev, enum ad7616_mode mode)
 
int32_t ad7616_set_oversampling_ratio (struct ad7616_dev *dev, enum ad7616_osr osr)
 
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.
 
int32_t ad7616_par_read (struct ad7616_dev *dev, uint8_t reg_addr, uint16_t *reg_data)
 
int32_t ad7616_par_write (struct ad7616_dev *dev, uint8_t reg_addr, uint16_t reg_data)
 
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.
 
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.
 
int32_t ad7616_disable_sequencer (struct ad7616_dev *dev)
 
int32_t ad7616_self_test (struct ad7616_dev *dev)
 Perform a self test. Channels selection will be left untouched.
 
int32_t ad7616_setup (struct ad7616_dev **device, struct ad7616_init_param *init_param)
 
void ad7616_remove (struct ad7616_dev *dev)
 

Detailed Description

Implementation of AD7616 Driver.

Author
DBogdan (drago.nosp@m.s.bo.nosp@m.gdan@.nosp@m.anal.nosp@m.og.co.nosp@m.m)
Antoniu Miclaus (anton.nosp@m.iu.m.nosp@m.iclau.nosp@m.s@an.nosp@m.alog..nosp@m.com)
Esteban Blanc (eblan.nosp@m.c@ba.nosp@m.ylibr.nosp@m.e.co.nosp@m.m)

Copyright 2020(c) Analog Devices, Inc. Copyright 2023(c) BayLibre, SAS.

SPDX-License-Identifier: BSD-3-Clause

Macro Definition Documentation

◆ AD7616_GET_BIT

#define AD7616_GET_BIT ( v,
b )
Value:
((v >> b) & 1)

◆ AD7616_TOGGLE_TIMEOUT_DELAY

#define AD7616_TOGGLE_TIMEOUT_DELAY   (8192 * 1024)

◆ SPI_ENGINE_WORDS_PER_READ

#define SPI_ENGINE_WORDS_PER_READ   1

Function Documentation

◆ ad7616_disable_sequencer()

int32_t ad7616_disable_sequencer ( struct ad7616_dev * dev)

◆ ad7616_par_read()

int32_t ad7616_par_read ( struct ad7616_dev * dev,
uint8_t reg_addr,
uint16_t * reg_data )

PAR read from device.

Parameters
dev- The device structure.
reg_addr- The register address.
reg_data- The register data.
Returns
0 in case of success, negative error code otherwise.

◆ ad7616_par_write()

int32_t ad7616_par_write ( struct ad7616_dev * dev,
uint8_t reg_addr,
uint16_t reg_data )

PAR write to device.

Parameters
dev- The device structure.
reg_addr- The register address.
reg_data- The register data.
Returns
0 in case of success, negative error code otherwise.

◆ ad7616_read()

int32_t ad7616_read ( struct ad7616_dev * dev,
uint8_t reg_addr,
uint16_t * reg_data )

Read from device.

Parameters
dev- The device structure.
reg_addr- The register address.
reg_data- The register data.
Returns
0 in case of success, negative error code otherwise.

◆ ad7616_read_channel_source()

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.

Parameters
dev- The device structure
ch_a- Pointer to store the current source for channel A
ch_b- Pointer to store the current source for channel B
Returns
0 on success, an error code otherwise

◆ ad7616_read_data_parallel()

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.

Parameters
dev- ad7616_dev device handler.
buf- data buffer.
samples- sample number.
Returns
0 in case of success, -1 otherwise.

◆ ad7616_read_data_serial()

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.

Parameters
dev- ad7616_dev device handler.
results- results buffer.
samples- sample number.
Returns
0 in case of success, -1 otherwise.

◆ ad7616_read_mask()

int32_t ad7616_read_mask ( struct ad7616_dev * dev,
uint8_t reg_addr,
uint16_t mask,
uint16_t * data )

Read from device using a mask.

Parameters
dev- The device structure.
reg_addr- The register address.
mask- The mask.
data- The register data.
Returns
0 in case of success, negative error code otherwise.

◆ ad7616_remove()

void ad7616_remove ( struct ad7616_dev * dev)

◆ ad7616_reset()

int32_t ad7616_reset ( struct ad7616_dev * dev)

Perform a full reset of the device.

Parameters
dev- The device structure.
Returns
0 in case of success, negative error code otherwise.

◆ ad7616_select_channel_source()

int32_t ad7616_select_channel_source ( struct ad7616_dev * dev,
enum ad7616_ch ch )

Select a new source for a channel.

Parameters
dev- The device structure.
ch- The new channel source
Returns
0 on success, an error code otherwise

◆ ad7616_self_test()

int32_t ad7616_self_test ( struct ad7616_dev * dev)

Perform a self test. Channels selection will be left untouched.

Self test

Parameters
devThe device structure
Returns
0 in case of success, negative error code otherwise

◆ ad7616_set_mode()

int32_t ad7616_set_mode ( struct ad7616_dev * dev,
enum ad7616_mode mode )

Set the operation mode (software or hardware).

Parameters
dev- The device structure.
mode- The operation mode. Accepted values: AD7616_SW AD7616_HW
Returns
0 in case of success, negative error code otherwise.

◆ ad7616_set_oversampling_ratio()

int32_t ad7616_set_oversampling_ratio ( struct ad7616_dev * dev,
enum ad7616_osr osr )

Set the oversampling ratio.

Parameters
dev- The device structure.
osr- The oversampling ratio. Accepted values: AD7616_OSR_0 AD7616_OSR_2 AD7616_OSR_4 AD7616_OSR_8 AD7616_OSR_16 AD7616_OSR_32 AD7616_OSR_64 AD7616_OSR_128
Returns
0 in case of success, negative error code otherwise.

◆ ad7616_set_range()

int32_t ad7616_set_range ( struct ad7616_dev * dev,
enum ad7616_ch ch,
enum ad7616_range range )

Set the analog input range for the selected analog input channel.

Parameters
dev- The device structure.
ch- The channel number. Accepted values: AD7616_VA0 AD7616_VA1 AD7616_VA2 AD7616_VA3 AD7616_VA4 AD7616_VA5 AD7616_VA6 AD7616_VA7 AD7616_VB0 AD7616_VB1 AD7616_VB2 AD7616_VB3 AD7616_VB4 AD7616_VB5 AD7616_VB6 AD7616_VB7
range- The analog input range. Accepted values: AD7616_2V5 AD7616_5V AD7616_10V
Returns
0 in case of success, negative error code otherwise.

◆ ad7616_setup()

int32_t ad7616_setup ( struct ad7616_dev ** device,
struct ad7616_init_param * init_param )

Initialize the device.

Parameters
device- The device structure.
init_param- The structure that contains the device initial parameters.
Returns
0 in case of success, negative error code otherwise.

◆ ad7616_setup_sequencer()

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.

Parameters
devThe device structure
layersArrays of layers
layers_nbNubers of items in the layers array.
burst1 if needed, 0 otherwise
Returns
0 on success, an error value otherwise

◆ ad7616_spi_read()

int32_t ad7616_spi_read ( struct ad7616_dev * dev,
uint8_t reg_addr,
uint16_t * reg_data )

SPI read from device.

Parameters
dev- The device structure.
reg_addr- The register address.
reg_data- The register data.
Returns
0 in case of success, negative error code otherwise.

◆ ad7616_spi_write()

int32_t ad7616_spi_write ( struct ad7616_dev * dev,
uint8_t reg_addr,
uint16_t reg_data )

SPI write to device.

Parameters
dev- The device structure.
reg_addr- The register address.
reg_data- The register data.
Returns
0 in case of success, negative error code otherwise.

◆ ad7616_write()

int32_t ad7616_write ( struct ad7616_dev * dev,
uint8_t reg_addr,
uint16_t reg_data )

Write to device.

Parameters
dev- The device structure.
reg_addr- The register address.
reg_data- The register data.
Returns
0 in case of success, negative error code otherwise.

◆ ad7616_write_mask()

int32_t ad7616_write_mask ( struct ad7616_dev * dev,
uint8_t reg_addr,
uint16_t mask,
uint16_t data )

SPI write to device using a mask.

Parameters
dev- The device structure.
reg_addr- The register address.
mask- The mask.
data- The register data.
Returns
0 in case of success, negative error code otherwise.