precision-converters-firmware
Loading...
Searching...
No Matches
Macros | Enumerations | Functions | Variables
ad5706r_iio.c File Reference

Implementation of AD5706R IIO Appication Interface. More...

#include <string.h>
#include <stdint.h>
#include <stdio.h>
#include "app_config.h"
#include "ad5706r_iio.h"
#include "ad5706r_regs.h"
#include "common.h"
#include "ad5706r_user_config.h"
#include "no_os_error.h"
#include "iio_trigger.h"
#include "iio.h"
#include "no_os_util.h"
#include "no_os_alloc.h"
#include "version.h"
#include "no_os_delay.h"
Include dependency graph for ad5706r_iio.c:

Macros

#define AD5706_CHN_ATTR(_name, _priv)
 
#define AD5706_CHN_AVAIL_ATTR(_name, _priv)
 
#define AD5706_DAC_CH(_name, _dev, _idx)
 
#define DATA_BUFFER_SIZE   (32768)
 
#define BYTES_PER_SAMPLE   sizeof(uint16_t)
 
#define CHN_STORAGE_BITS   (BYTES_PER_SAMPLE * 8)
 
#define BYTE_SIZE   (uint32_t)8
 
#define BYTE_MASK   (uint32_t)0xff
 
#define DAC_MAX_COUNT   (NO_OS_BIT(AD5706_DAC_RESOLUTION ) - 1)
 
#define AD5706R_REG_VAL   0x01
 
#define AD5706R_REG_DEFAULT_VAL   0x0
 
#define AD5706_DEFAULT_REF_VOLTS   (float)2.5
 
#define AD5706_N_BYTES_SW_LDAC   4
 
#define AD5706_SW_LDAC_N_BYTES_WITH_DATA   8
 
#define AD5706_DEFAULT_CHN_SCAN
 

Enumerations

enum  ad5706r_attribute_ids {
  DAC_DEV_ADDR_ATTR_ID ,
  DAC_SAMPLE_RATE_ATTR_ID ,
  DAC_HW_LDAC_TG_STATE_ATTR_ID ,
  DAC_HW_LDAC_TG_PWM_ATTR_ID ,
  DAC_HW_SHUTDOWN_STATE_ATTR_ID ,
  DAC_ADDR_ASCENSION_ATTR_ID ,
  DAC_SINGLE_INSTR_ATTR_ID ,
  DAC_MUX_OUT_SEL_ATTR_ID ,
  MULTI_DAC_INPUT_A_ATTR_ID ,
  MULTI_DAC_SW_LDAC_ATTR_ID ,
  DAC_REF_SELECT_ATTR_ID ,
  DAC_REF_VOLTS_ATTR_ID ,
  RESTART_IIO_ATTR_ID ,
  NUM_OF_DEV_ATTR ,
  DAC_CH_RAW_ATTR_ID ,
  DAC_CH_SCALE_ATTR_ID ,
  DAC_CH_OFFSET_ATTR_ID ,
  DAC_CH_INPUT_A_ATTR_ID ,
  DAC_CH_INPUT_B_ATTR_ID ,
  DAC_CH_HW_ACTIVE_EDGE_ATTR_ID ,
  DAC_CH_RANGE_SEL_ATTR_ID ,
  DAC_CH_LDAC_TRIGGER_ATTR_ID ,
  DAC_CH_TOGGLE_TRIGGER_ATTR_ID ,
  DAC_CH_DITHER_TRIGGER_ATTR_ID ,
  DAC_CH_OUTPUT_STATE_ATTR_ID ,
  MULTI_DAC_CH_SEL_ATTR_ID ,
  NUM_OF_CHN_ATTR = DAC_CH_OUTPUT_STATE_ATTR_ID - NUM_OF_DEV_ATTR
}
 

Functions

int32_t ad5706r_set_sampling_rate (uint32_t *sampling_rate)
 Set the sampling rate and get the updated value supported by MCU platform.
 
int ad5706r_reconfig_ldac (struct ad5706r_dev *device)
 Reconfigure LDAC pin as GPIO output.
 
void ad5706r_populate_func_mode_data (struct ad5706r_dev *device)
 Build the command word for Func Mode Update.
 
void ad5706r_populate_ldac_mode_data (struct ad5706r_dev *device, struct iio_device_data *iio_dev_data)
 Build the comman word for a SW LDAC Update with the data to be written to the respective input register.
 
int32_t ad5706r_iio_initialize (void)
 Initialize the IIO interface for AD5706R IIO device.
 
void iio_params_deinit (void)
 DeInitialize the IIO parameters.
 
void ad5706r_iio_event_handler (void)
 Run the AD5706R IIO event handler.
 

Variables

struct ad5706r_dev * ad5706r_dev_inst [NUM_IIO_DEVICES] = { NULL, NULL }
 
struct iio_device * ad5706r_iio_dev [NUM_IIO_DEVICES]
 
struct scan_type iio_ad5706r_scan_type [NUM_IIO_DEVICES][AD5706R_NUM_CH]
 
uint32_t ad5706r_update_rate = AD5706_MAX_UPDATE_RATE
 
uint8_t n_bytes = 0
 
struct iio_trigger_init iio_trigger_init_params
 
struct iio_init_param iio_init_params
 
bool hw_mode_enabled = false
 
bool sw_mode_enabled = false
 

Detailed Description

Implementation of AD5706R IIO Appication Interface.

This module acts as an interface for AD5706R IIO device

Copyright (c) 2024-2026 Analog Devices, Inc.

This software is proprietary to Analog Devices, Inc. and its licensors. By using this software you agree to the terms of the associated Analog Devices Software License Agreement.

Macro Definition Documentation

◆ AD5706_CHN_ATTR

#define AD5706_CHN_ATTR (   _name,
  _priv 
)
Value:
{\
.name = _name,\
.priv = _priv,\
.show = iio_ad5706r_attr_get,\
.store = iio_ad5706r_attr_set\
}

◆ AD5706_CHN_AVAIL_ATTR

#define AD5706_CHN_AVAIL_ATTR (   _name,
  _priv 
)
Value:
{\
.name = _name,\
.priv = _priv,\
.show = iio_ad5706r_attr_available_get,\
.store = iio_ad5706r_attr_available_set\
}

◆ AD5706_DAC_CH

#define AD5706_DAC_CH (   _name,
  _dev,
  _idx 
)
Value:
{\
.name = _name # _idx, \
.ch_type = IIO_CURRENT,\
.ch_out = true,\
.indexed = true,\
.channel = _idx,\
.scan_index = _idx,\
.scan_type = &iio_ad5706r_scan_type[_dev][_idx],\
.attributes = iio_ad5706r_dac_ch_attributes[_dev]\
}
struct scan_type iio_ad5706r_scan_type[NUM_IIO_DEVICES][AD5706R_NUM_CH]
Definition ad5706r_iio.c:184

◆ AD5706_DEFAULT_CHN_SCAN

#define AD5706_DEFAULT_CHN_SCAN
Value:
{\
.sign = 'u',\
.realbits = AD5706_DAC_RESOLUTION,\
.storagebits = CHN_STORAGE_BITS,\
.shift = 0,\
.is_big_endian = false\
}
#define AD5706_DAC_RESOLUTION
Definition app_config.h:41
#define CHN_STORAGE_BITS
Definition ad5706r_iio.c:102

◆ AD5706_DEFAULT_REF_VOLTS

#define AD5706_DEFAULT_REF_VOLTS   (float)2.5

◆ AD5706_N_BYTES_SW_LDAC

#define AD5706_N_BYTES_SW_LDAC   4

◆ AD5706_SW_LDAC_N_BYTES_WITH_DATA

#define AD5706_SW_LDAC_N_BYTES_WITH_DATA   8

◆ AD5706R_REG_DEFAULT_VAL

#define AD5706R_REG_DEFAULT_VAL   0x0

◆ AD5706R_REG_VAL

#define AD5706R_REG_VAL   0x01

◆ BYTE_MASK

#define BYTE_MASK   (uint32_t)0xff

◆ BYTE_SIZE

#define BYTE_SIZE   (uint32_t)8

◆ BYTES_PER_SAMPLE

#define BYTES_PER_SAMPLE   sizeof(uint16_t)

◆ CHN_STORAGE_BITS

#define CHN_STORAGE_BITS   (BYTES_PER_SAMPLE * 8)

◆ DAC_MAX_COUNT

#define DAC_MAX_COUNT   (NO_OS_BIT(AD5706_DAC_RESOLUTION ) - 1)

◆ DATA_BUFFER_SIZE

#define DATA_BUFFER_SIZE   (32768)

Enumeration Type Documentation

◆ ad5706r_attribute_ids

Enumerator
DAC_DEV_ADDR_ATTR_ID 
DAC_SAMPLE_RATE_ATTR_ID 
DAC_HW_LDAC_TG_STATE_ATTR_ID 
DAC_HW_LDAC_TG_PWM_ATTR_ID 
DAC_HW_SHUTDOWN_STATE_ATTR_ID 
DAC_ADDR_ASCENSION_ATTR_ID 
DAC_SINGLE_INSTR_ATTR_ID 
DAC_MUX_OUT_SEL_ATTR_ID 
MULTI_DAC_INPUT_A_ATTR_ID 
MULTI_DAC_SW_LDAC_ATTR_ID 
DAC_REF_SELECT_ATTR_ID 
DAC_REF_VOLTS_ATTR_ID 
RESTART_IIO_ATTR_ID 
NUM_OF_DEV_ATTR 
DAC_CH_RAW_ATTR_ID 
DAC_CH_SCALE_ATTR_ID 
DAC_CH_OFFSET_ATTR_ID 
DAC_CH_INPUT_A_ATTR_ID 
DAC_CH_INPUT_B_ATTR_ID 
DAC_CH_HW_ACTIVE_EDGE_ATTR_ID 
DAC_CH_RANGE_SEL_ATTR_ID 
DAC_CH_LDAC_TRIGGER_ATTR_ID 
DAC_CH_TOGGLE_TRIGGER_ATTR_ID 
DAC_CH_DITHER_TRIGGER_ATTR_ID 
DAC_CH_OUTPUT_STATE_ATTR_ID 
MULTI_DAC_CH_SEL_ATTR_ID 
NUM_OF_CHN_ATTR 

Function Documentation

◆ ad5706r_iio_event_handler()

void ad5706r_iio_event_handler ( void  )

Run the AD5706R IIO event handler.

Returns
none

This function monitors the new IIO client event

Here is the caller graph for this function:

◆ ad5706r_iio_initialize()

int32_t ad5706r_iio_initialize ( void  )

Initialize the IIO interface for AD5706R IIO device.

Returns
0 in case of success,negative error code otherwise
Here is the caller graph for this function:

◆ ad5706r_populate_func_mode_data()

void ad5706r_populate_func_mode_data ( struct ad5706r_dev *  device)

Build the command word for Func Mode Update.

Parameters
device[in]- AD5706R Device descriptor
Returns
0 in case of success or negative value otherwise.

◆ ad5706r_populate_ldac_mode_data()

void ad5706r_populate_ldac_mode_data ( struct ad5706r_dev *  device,
struct iio_device_data *  iio_dev_data 
)

Build the comman word for a SW LDAC Update with the data to be written to the respective input register.

Parameters
device[in]- AD5706R Device descriptor
iio_dev_data[in]- IIO Device Data
Returns
0 in case of success or negative value otherwise.

◆ ad5706r_reconfig_ldac()

int ad5706r_reconfig_ldac ( struct ad5706r_dev *  device)

Reconfigure LDAC pin as GPIO output.

Parameters
device[in]- AD5706R device instance
Returns
0 in case of success, negative error code otherwise

◆ ad5706r_set_sampling_rate()

int32_t ad5706r_set_sampling_rate ( uint32_t *  sampling_rate)

Set the sampling rate and get the updated value supported by MCU platform.

Parameters
update_rate[in,out]- Update rate value
Returns
0 in case of success, negative error code otherwise

◆ iio_params_deinit()

void iio_params_deinit ( void  )

DeInitialize the IIO parameters.

Here is the caller graph for this function:

Variable Documentation

◆ ad5706r_dev_inst

struct ad5706r_dev* ad5706r_dev_inst[NUM_IIO_DEVICES] = { NULL, NULL }

◆ ad5706r_iio_dev

struct iio_device* ad5706r_iio_dev[NUM_IIO_DEVICES]

◆ ad5706r_update_rate

uint32_t ad5706r_update_rate = AD5706_MAX_UPDATE_RATE

◆ hw_mode_enabled

bool hw_mode_enabled = false

◆ iio_ad5706r_scan_type

struct scan_type iio_ad5706r_scan_type[NUM_IIO_DEVICES][AD5706R_NUM_CH]

◆ iio_init_params

struct iio_init_param iio_init_params
Initial value:
= {
.phy_type = USE_UART,
}
struct iio_trigger_init iio_trigger_init_params
Definition ad5706r_iio.c:503

◆ iio_trigger_init_params

struct iio_trigger_init iio_trigger_init_params
Initial value:
= {
.descriptor = &ad5706r_iio_trig_desc,
.name = AD5706_IIO_TRIGGER_NAME,
}

◆ n_bytes

uint8_t n_bytes = 0

◆ sw_mode_enabled

bool sw_mode_enabled = false