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

Implementation of ad5710r Driver. More...

#include "ad5710r.h"
#include <stdlib.h>
#include <string.h>
#include "no_os_delay.h"
#include "no_os_error.h"
#include "no_os_print_log.h"
#include "no_os_gpio.h"
#include "no_os_spi.h"
#include "no_os_util.h"
Include dependency graph for ad5710r.c:

Macros

#define AD5710R_DATA_INDEX(x)
 
#define AD5710R_INSTR_LEN(x)
 
#define AD5710R_ADDR_INDEX(x)
 
#define AD5710R_BUFF_LEN(x)
 
#define AD5710R_CRC_BUFF_LEN(x)
 
#define AD5710R_CRC_INDEX(x)
 

Functions

int ad5710r_update_interface_cfg (struct ad5710r_desc *desc, struct ad5710r_transfer_config *cfg)
 Updates the interface configuration.
 
int ad5710r_reg_write (struct ad5710r_desc *desc, uint32_t reg_addr, uint16_t reg_val)
 Write into device register.
 
int ad5710r_multiple_reg_write (struct ad5710r_desc *desc, uint32_t start_addr, uint8_t count, uint8_t *buff)
 Write multiple register's values.
 
int ad5710r_reg_read (struct ad5710r_desc *desc, uint32_t reg_addr, uint16_t *reg_val)
 Read from device register.
 
int ad5710r_multiple_reg_read (struct ad5710r_desc *desc, uint32_t addr, uint8_t count, uint8_t *buff)
 Read multiple register's values.
 
int ad5710r_spi_write_mask (struct ad5710r_desc *desc, uint32_t addr, uint32_t mask, uint16_t val)
 SPI write to device using a mask.
 
int ad5710r_set_reference (struct ad5710r_desc *desc, enum ad5710r_ch_vref_select reference_selector)
 Set reference configuration.
 
int ad5710r_set_operating_mode (struct ad5710r_desc *desc, uint8_t chn_num, enum ad5710r_operating_mode chn_op_mode)
 Set operating mode for each channel.
 
int ad5710r_set_output_range (struct ad5710r_desc *desc, enum ad5710r_ch_output_range range_sel)
 Set output range for all channels.
 
int ad5710r_set_crc_enable (struct ad5710r_desc *desc, bool en_di)
 Configures the CRC selection bit.
 
int ad5710r_set_mux_out_select (struct ad5710r_desc *desc, enum ad5710r_mux_out_select mux_output_sel)
 Set the multiplexer output select register.
 
int ad5710r_set_hw_ldac (struct ad5710r_desc *desc, uint8_t mask_hw_ldac)
 Set the hardware ldac configuration.
 
int ad5710r_set_sw_ldac (struct ad5710r_desc *desc, uint8_t mask_sw_ldac)
 Set the software ldac configuration.
 
int ad5710r_set_dac_value (struct ad5710r_desc *desc, uint16_t dac_value, uint8_t dac_channel, enum ad5710r_write_mode write_mode)
 Set dac value based on the user selected DAC update mode.
 
int ad5710r_set_multidac_value (struct ad5710r_desc *desc, uint16_t dac_value, uint8_t dac_chn_mask, enum ad5710r_write_mode write_mode)
 Sets dac value for multiple channels.
 
int ad5710r_sw_ldac_trigger (struct ad5710r_desc *desc)
 Trigger the LDAC using software.
 
int ad5710r_hw_ldac_trigger (struct ad5710r_desc *desc)
 Trigger the LDAC using hardware.
 
int ad5710r_reset (struct ad5710r_desc *desc)
 Perform a hard/soft reset.
 
int ad5710r_channel_output_select (struct ad5710r_desc *desc, uint8_t chn_num, enum ad5710r_ch_mode_select ch_mode)
 Selects the output mode for a specific channel of the AD5710R DAC.
 
int ad5710r_device_config (struct ad5710r_desc *desc, struct ad5710r_init_param *dev_param)
 Configures the device.
 
int ad5710r_init (struct ad5710r_desc **desc, struct ad5710r_init_param *init_param)
 Initialize the device structure.
 
int ad5710r_remove (struct ad5710r_desc *desc)
 Free the device descriptor.
 

Detailed Description

Implementation of ad5710r Driver.

Author
Sai Kiran Gudla (saiki.nosp@m.ran..nosp@m.gudla.nosp@m.@ana.nosp@m.log.c.nosp@m.om)

Copyright 2025(c) Analog Devices, Inc.

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  • Neither the name of Analog Devices, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
  • The use of this software may or may not infringe the patent rights of one or more patent holders. This license does not release you from the requirement that you obtain separate licenses from these patent holders to use this software.
  • Use of the software either in source or binary form, must be run on or directly connected to an Analog Devices Inc. component.

THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

  • LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Macro Definition Documentation

◆ AD5710R_ADDR_INDEX

#define AD5710R_ADDR_INDEX ( x)
Value:
x ? 0 : 1

◆ AD5710R_BUFF_LEN

#define AD5710R_BUFF_LEN ( x)
Value:
x ? 2 : 3

◆ AD5710R_CRC_BUFF_LEN

#define AD5710R_CRC_BUFF_LEN ( x)
Value:
x ? 3 : 4

◆ AD5710R_CRC_INDEX

#define AD5710R_CRC_INDEX ( x)
Value:
#define AD5710R_ADDR_INDEX(x)
Definition ad5710r.c:60

◆ AD5710R_DATA_INDEX

#define AD5710R_DATA_INDEX ( x)
Value:
x ? 1 : 2

◆ AD5710R_INSTR_LEN

#define AD5710R_INSTR_LEN ( x)
Value:
#define AD5710R_DATA_INDEX(x)
Definition ad5710r.c:58

Function Documentation

◆ ad5710r_channel_output_select()

int ad5710r_channel_output_select ( struct ad5710r_desc * desc,
uint8_t chn_num,
enum ad5710r_ch_mode_select ch_mode )

Selects the output mode for a specific channel of the AD5710R DAC.

Parameters
desc- The device structure.
chn_num- Channel number to configure.
ch_mode- Output mode to select for the channel (voltage or current).
Returns
0 in case of success, negative error code otherwise.

◆ ad5710r_device_config()

int ad5710r_device_config ( struct ad5710r_desc * desc,
struct ad5710r_init_param * dev_param )

Configures the device.

Parameters
desc- The device structure to be initialized.
dev_param- Configuration parameters for the device.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad5710r_hw_ldac_trigger()

int ad5710r_hw_ldac_trigger ( struct ad5710r_desc * desc)

Trigger the LDAC using hardware.

Parameters
desc- The device structure.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad5710r_init()

int ad5710r_init ( struct ad5710r_desc ** desc,
struct ad5710r_init_param * init_param )

Initialize the device structure.

Parameters
desc- The device structure to be initialized.
init_param- Initialization parameter for the device descriptor.
Returns
0 in case of success, negative error code otherwise.

◆ ad5710r_multiple_reg_read()

int ad5710r_multiple_reg_read ( struct ad5710r_desc * desc,
uint32_t addr,
uint8_t count,
uint8_t * buff )

Read multiple register's values.

Parameters
desc- The device structure.
addr- Starting register address to read from.
count- Number of bytes to read.
buff- Buffer to store data.
Returns
0 in case of success, negative error otherwise.

◆ ad5710r_multiple_reg_write()

int ad5710r_multiple_reg_write ( struct ad5710r_desc * desc,
uint32_t start_addr,
uint8_t count,
uint8_t * buff )

Write multiple register's values.

Parameters
desc- The device structure.
start_addr- Starting register address to write into.
count- Number of bytes to write.
buff- Buffer to write data from.
Returns
0 in case of success, negative error otherwise.

◆ ad5710r_reg_read()

int ad5710r_reg_read ( struct ad5710r_desc * desc,
uint32_t reg_addr,
uint16_t * reg_val )

Read from device register.

Parameters
desc- The device structure.
reg_addr- The register's address.
reg_val- The register's read value.
Returns
0 in case of success, negative error otherwise.
Here is the caller graph for this function:

◆ ad5710r_reg_write()

int ad5710r_reg_write ( struct ad5710r_desc * desc,
uint32_t reg_addr,
uint16_t reg_val )

Write into device register.

Parameters
desc- The device structure.
reg_addr- The register's address.
reg_val- The register's value.
Returns
0 in case of success, negative error otherwise.
Here is the caller graph for this function:

◆ ad5710r_remove()

int ad5710r_remove ( struct ad5710r_desc * desc)

Free the device descriptor.

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

◆ ad5710r_reset()

int ad5710r_reset ( struct ad5710r_desc * desc)

Perform a hard/soft reset.

Parameters
desc- The device structure.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad5710r_set_crc_enable()

int ad5710r_set_crc_enable ( struct ad5710r_desc * desc,
bool en_di )

Configures the CRC selection bit.

Parameters
desc- The device structure.
en_di- boolean selection for crc bit.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad5710r_set_dac_value()

int ad5710r_set_dac_value ( struct ad5710r_desc * desc,
uint16_t dac_value,
uint8_t dac_channel,
enum ad5710r_write_mode write_mode )

Set dac value based on the user selected DAC update mode.

Parameters
desc- The device structure.
dac_value- value that will be set in the register.
dac_channel- selected channel.
write_mode- selected write mode.
Returns
0 in case of success, negative error code otherwise.

◆ ad5710r_set_hw_ldac()

int ad5710r_set_hw_ldac ( struct ad5710r_desc * desc,
uint8_t mask_hw_ldac )

Set the hardware ldac configuration.

Parameters
desc- The device structure.
mask_hw_ldac- The array contains HW LDAC channel masks.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad5710r_set_multidac_value()

int ad5710r_set_multidac_value ( struct ad5710r_desc * desc,
uint16_t dac_value,
uint8_t dac_chn_mask,
enum ad5710r_write_mode write_mode )

Sets dac value for multiple channels.

Parameters
desc- The device structure.
dac_value- value that will be set in the register.
dac_chn_mask- mask for selected channels.
write_mode- selected write mode.
Returns
0 in case of success, negative error code otherwise.

◆ ad5710r_set_mux_out_select()

int ad5710r_set_mux_out_select ( struct ad5710r_desc * desc,
enum ad5710r_mux_out_select mux_output_sel )

Set the multiplexer output select register.

Parameters
desc- The device structure.
mux_output_sel- signal to be monitored on the mux_out pin.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad5710r_set_operating_mode()

int ad5710r_set_operating_mode ( struct ad5710r_desc * desc,
uint8_t chn_num,
enum ad5710r_operating_mode chn_op_mode )

Set operating mode for each channel.

Parameters
desc- The device structure.
chn_num- Channel number to be configured.
chn_op_mode- Operation mode to be set.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad5710r_set_output_range()

int ad5710r_set_output_range ( struct ad5710r_desc * desc,
enum ad5710r_ch_output_range range_sel )

Set output range for all channels.

Parameters
desc- The device structure.
range_sel- Output range to be selected.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad5710r_set_reference()

int ad5710r_set_reference ( struct ad5710r_desc * desc,
enum ad5710r_ch_vref_select reference_selector )

Set reference configuration.

Parameters
desc- The device structure.
reference_selector- The reference to be selected.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad5710r_set_sw_ldac()

int ad5710r_set_sw_ldac ( struct ad5710r_desc * desc,
uint8_t mask_sw_ldac )

Set the software ldac configuration.

Parameters
desc- The device structure.
mask_sw_ldac- The array contains SW LDAC channel masks.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad5710r_spi_write_mask()

int ad5710r_spi_write_mask ( struct ad5710r_desc * desc,
uint32_t addr,
uint32_t mask,
uint16_t val )

SPI write to device using a mask.

Parameters
desc- The device structure.
addr- The register's address.
mask- The mask for a specific register field.
val- The register's value.
Returns
0 in case of success, negative error otherwise.
Here is the caller graph for this function:

◆ ad5710r_sw_ldac_trigger()

int ad5710r_sw_ldac_trigger ( struct ad5710r_desc * desc)

Trigger the LDAC using software.

Parameters
desc- The device structure.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ad5710r_update_interface_cfg()

int ad5710r_update_interface_cfg ( struct ad5710r_desc * desc,
struct ad5710r_transfer_config * cfg )

Updates the interface configuration.

Parameters
desc- The device structure.
cfg- Updated interface configuration structure.
Returns
0 in case of success, negative error otherwise.
Here is the caller graph for this function: