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

Source file of AD74416H Driver. More...

#include "ad74416h.h"
#include "no_os_crc8.h"
#include "no_os_delay.h"
#include "no_os_error.h"
#include "no_os_util.h"
#include "no_os_alloc.h"
Include dependency graph for ad74416h.c:

Macros

#define AD74416H_CRC_POLYNOMIAL   0x7
 
#define AD74416H_DIN_DEBOUNCE_LEN   NO_OS_BIT(5)
 
#define AD77416H_DEV_ADDRESS_MSK   NO_OS_GENMASK(5, 4)
 

Functions

 NO_OS_DECLARE_CRC8_TABLE (_crc_table)
 
int ad74416h_dac_voltage_to_code (struct ad74416h_desc *desc, int32_t mvolts, uint16_t *code, uint32_t ch)
 Converts a millivolt value in the corresponding DAC 16 bit code.
 
int ad74416h_dac_current_to_code (struct ad74416h_desc *desc, uint32_t uamps, uint16_t *code)
 Convers a microamp value in the corresponding DAC 16 bit code.
 
int ad74416h_reg_read_raw (struct ad74416h_desc *desc, uint32_t addr, uint8_t *val)
 Read a raw communication frame.
 
int ad74416h_reg_write (struct ad74416h_desc *desc, uint32_t addr, uint16_t val)
 Write a register's value.
 
int ad74416h_reg_read (struct ad74416h_desc *desc, uint32_t addr, uint16_t *val)
 Read a register's value.
 
int ad74416h_reg_update (struct ad74416h_desc *desc, uint32_t addr, uint16_t mask, uint16_t val)
 Update a register's field.
 
int ad74416h_nb_active_channels (struct ad74416h_desc *desc, uint8_t *nb_channels)
 Get the number of active channels.
 
int ad74416h_get_raw_adc_result (struct ad74416h_desc *desc, uint32_t ch, uint32_t *val)
 Read the raw ADC raw conversion value.
 
int ad74416h_set_adc_channel_enable (struct ad74416h_desc *desc, uint32_t ch, bool status)
 Enable/disable a specific ADC channel.
 
int ad74416h_set_diag_channel_enable (struct ad74416h_desc *desc, uint32_t ch, bool status)
 Enable conversions on a diagnostic register.
 
int ad74416h_get_adc_range (struct ad74416h_desc *desc, uint32_t ch, uint16_t *val)
 Get the ADC measurement range for a specific channel.
 
int ad74416h_set_adc_range (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_adc_range val)
 Set the ADC measurement range for a specific channel.
 
int ad74416h_get_adc_rate (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_adc_rate *val)
 Get the ADC Conversion Rate for a specific channel.
 
int ad74416h_set_adc_rate (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_adc_rate val)
 Set the ADC Conversion Rate for a specific channel.
 
int ad74416h_get_adc_conv_mux (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_adc_conv_mux *val)
 Get the ADC Input Node for conversion.
 
int ad74416h_set_adc_conv_mux (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_adc_conv_mux val)
 Set the ADC Input Node for conversion.
 
int ad74416h_set_adc_conv_seq (struct ad74416h_desc *desc, enum ad74416h_conv_seq status)
 Start or stop ADC conversions.
 
int ad74416h_get_adc_single (struct ad74416h_desc *desc, uint32_t ch, uint32_t *val)
 Get a single ADC raw value for a specific channel, then power down the ADC.
 
int ad74416h_get_temp (struct ad74416h_desc *desc, uint32_t ch, uint16_t *temp)
 Read the die's temperature from the diagnostic register.
 
int ad74416h_set_channel_function (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_op_mode ch_func)
 Set the operation mode for a specific channel.
 
int ad74416h_set_channel_vout_range (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_vout_range vout_range)
 Set the voltage range for a specific channel.
 
int ad74416h_set_channel_i_limit (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_i_limit i_limit)
 Set the current limit for a specific DAC channel in vout mode.
 
int ad74416h_set_channel_dac_code (struct ad74416h_desc *desc, uint32_t ch, uint16_t dac_code)
 Set and load a code for the DAC on a specific channel.
 
int ad74416h_set_diag (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_diag_mode diag_code)
 Set which diagnostic value to be loaded in the DIAG_RESULT register.
 
int ad74416h_get_diag (struct ad74416h_desc *desc, uint32_t ch, uint16_t *diag_code)
 Get the diagnostic value for a specific channel.
 
int ad74416h_set_debounce_mode (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_debounce_mode mode)
 Set the debounce mode for the IOx inputs when the ADC is running in digital input mode.
 
int ad74416h_set_debounce_time (struct ad74416h_desc *desc, uint32_t ch, uint32_t time)
 Set the debounce settle time for the IOx inputs when the ADC is running in digital input mode.
 
int ad74416h_gpio_get (struct ad74416h_desc *desc, uint32_t ch, uint8_t *val)
 Get the GPO value for a specific channel.
 
int ad74416h_set_gpio_config (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_gpio_select config)
 Set the GPIO operation mode.
 
int ad74416h_set_threshold (struct ad74416h_desc *desc, uint32_t ch, uint32_t threshold)
 Set the threshold, for which a signal would be considered high, when the ADC is running in digital input mode.
 
int ad74416h_do_set (struct ad74416h_desc *desc, uint32_t ch, uint8_t val)
 Set the DO value of a channel.
 
int ad74416h_gpio_set (struct ad74416h_desc *desc, uint32_t ch, uint8_t val)
 Set the logic value of a GPO pin.
 
int ad74416h_get_live (struct ad74416h_desc *desc, union ad74416h_live_status *status)
 Read the live status bits.
 
int ad74416h_dac_slew_enable (struct ad74416h_desc *desc, uint32_t ch, enum ad74416h_slew_lin_step step, enum ad74416h_lin_rate rate)
 Configure and enable slew rate control for a DAC on a specific channel.
 
int ad74416h_dac_slew_disable (struct ad74416h_desc *desc, uint32_t ch)
 Disable the slew rate control.
 
int ad74416h_set_therm_rst (struct ad74416h_desc *desc, bool enable)
 Enable or disable the higher thermal reset.
 
int ad74416h_reset (struct ad74416h_desc *desc)
 Perform software or hardware reset and wait for device reset time.
 
int ad74416h_init (struct ad74416h_desc **desc, struct ad74416h_init_param *init_param)
 Initialize the device structure.
 
int ad74416h_remove (struct ad74416h_desc *desc)
 Free the device descriptor.
 

Detailed Description

Source file of AD74416H Driver.

Author
Antoniu Miclaus (anton.nosp@m.iu.m.nosp@m.iclau.nosp@m.s@an.nosp@m.alog..nosp@m.com)

Copyright 2023(c) Analog Devices, Inc.

SPDX-License-Identifier: BSD-3-Clause

Macro Definition Documentation

◆ AD74416H_CRC_POLYNOMIAL

#define AD74416H_CRC_POLYNOMIAL   0x7

◆ AD74416H_DIN_DEBOUNCE_LEN

#define AD74416H_DIN_DEBOUNCE_LEN   NO_OS_BIT(5)

◆ AD77416H_DEV_ADDRESS_MSK

#define AD77416H_DEV_ADDRESS_MSK   NO_OS_GENMASK(5, 4)

Function Documentation

◆ ad74416h_dac_current_to_code()

int ad74416h_dac_current_to_code ( struct ad74416h_desc * desc,
uint32_t uamps,
uint16_t * code )

Convers a microamp value in the corresponding DAC 16 bit code.

Parameters
desc- The device structure.
uamps- The microamps value
code- The resulting DAC code
Returns
0 in case of success, -EINVAL otherwise

◆ ad74416h_dac_slew_disable()

int ad74416h_dac_slew_disable ( struct ad74416h_desc * desc,
uint32_t ch )

Disable the slew rate control.

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

◆ ad74416h_dac_slew_enable()

int ad74416h_dac_slew_enable ( struct ad74416h_desc * desc,
uint32_t ch,
enum ad74416h_slew_lin_step step,
enum ad74416h_lin_rate rate )

Configure and enable slew rate control for a DAC on a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
step- Number of codes per increment.
rate- Number of increments per second.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_dac_voltage_to_code()

int ad74416h_dac_voltage_to_code ( struct ad74416h_desc * desc,
int32_t mvolts,
uint16_t * code,
uint32_t ch )

Converts a millivolt value in the corresponding DAC 16 bit code.

Parameters
desc- The device structure.
mvolts- The millivolts value.
code- The resulting DAC code.
ch- The channel index.
Returns
0 in case of success, -EINVAL otherwise

◆ ad74416h_do_set()

int ad74416h_do_set ( struct ad74416h_desc * desc,
uint32_t ch,
uint8_t val )

Set the DO value of a channel.

Parameters
desc- The device structure
ch- The channel index
val- the output logic state. 0-low 1-high
Returns
0 in case of success, negative error code otherwise

◆ ad74416h_get_adc_conv_mux()

int ad74416h_get_adc_conv_mux ( struct ad74416h_desc * desc,
uint32_t ch,
enum ad74416h_adc_conv_mux * val )

Get the ADC Input Node for conversion.

Parameters
desc- The device structure.
ch- The channel index.
val- The ADC input node setting.

◆ ad74416h_get_adc_range()

int ad74416h_get_adc_range ( struct ad74416h_desc * desc,
uint32_t ch,
uint16_t * val )

Get the ADC measurement range for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
val- The ADC range value.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_get_adc_rate()

int ad74416h_get_adc_rate ( struct ad74416h_desc * desc,
uint32_t ch,
enum ad74416h_adc_rate * val )

Get the ADC Conversion Rate for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
val- The ADC rejection setting.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_get_adc_single()

int ad74416h_get_adc_single ( struct ad74416h_desc * desc,
uint32_t ch,
uint32_t * val )

Get a single ADC raw value for a specific channel, then power down the ADC.

Parameters
desc- The device structure.
ch- The channel index.
val- The ADC raw result.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_get_diag()

int ad74416h_get_diag ( struct ad74416h_desc * desc,
uint32_t ch,
uint16_t * diag_code )

Get the diagnostic value for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
diag_code- The diagnostic setting.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_get_live()

int ad74416h_get_live ( struct ad74416h_desc * desc,
union ad74416h_live_status * status )

Read the live status bits.

Parameters
desc- The device structure.
status- The register's value.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_get_raw_adc_result()

int ad74416h_get_raw_adc_result ( struct ad74416h_desc * desc,
uint32_t ch,
uint32_t * val )

Read the raw ADC raw conversion value.

Parameters
desc- The device structure.
ch- The channel index.
val- The ADC raw conversion value.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_get_temp()

int ad74416h_get_temp ( struct ad74416h_desc * desc,
uint32_t ch,
uint16_t * temp )

Read the die's temperature from the diagnostic register.

Parameters
desc- The device structure.
ch- The diagnostic channel on which the temperature reading is assigned and enabled.
temp- The measured temperature (in degrees Celsius).
Returns
0 in case of success, -EINVAL otherwise.

◆ ad74416h_gpio_get()

int ad74416h_gpio_get ( struct ad74416h_desc * desc,
uint32_t ch,
uint8_t * val )

Get the GPO value for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
val- The debounce time.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_gpio_set()

int ad74416h_gpio_set ( struct ad74416h_desc * desc,
uint32_t ch,
uint8_t val )

Set the logic value of a GPO pin.

Parameters
desc- The device structure.
ch- The channel index.
val- The output logic state.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_init()

int ad74416h_init ( struct ad74416h_desc ** desc,
struct ad74416h_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.

◆ ad74416h_nb_active_channels()

int ad74416h_nb_active_channels ( struct ad74416h_desc * desc,
uint8_t * nb_channels )

Get the number of active channels.

Parameters
desc- The device structure.
nb_channels- The number of active channels
Returns
0 in case of success, negative error otherwise.

◆ ad74416h_reg_read()

int ad74416h_reg_read ( struct ad74416h_desc * desc,
uint32_t addr,
uint16_t * val )

Read a register's value.

Parameters
desc- The device structure.
addr- The register's address.
val- The register's read value.
Returns
0 in case of success, negative error otherwise

◆ ad74416h_reg_read_raw()

int ad74416h_reg_read_raw ( struct ad74416h_desc * desc,
uint32_t addr,
uint8_t * val )

Read a raw communication frame.

Parameters
desc- The device structure.
addr- The register's address.
val- A raw comm frame.
Returns
0 in case of success, negative error otherwise.

Reading a register on AD74416H requires writing the address to the READ_SELECT register first and then doing another spi read, which will contain the requested register value.

◆ ad74416h_reg_update()

int ad74416h_reg_update ( struct ad74416h_desc * desc,
uint32_t addr,
uint16_t mask,
uint16_t val )

Update a register's field.

Parameters
desc- The device structure.
addr- The register's address.
val- The register's value.
mask- The mask for a specific register field.
Returns
0 in case of success, negative error otherwise.

◆ ad74416h_reg_write()

int ad74416h_reg_write ( struct ad74416h_desc * desc,
uint32_t addr,
uint16_t val )

Write a register's value.

Parameters
desc- The device structure.
addr- The register's address.
val- The register's value.
Returns
0 in case of success, negative error otherwise

◆ ad74416h_remove()

int ad74416h_remove ( struct ad74416h_desc * desc)

Free the device descriptor.

Parameters
desc- The device structure.
Returns
0 in case of success, -EINVAL otherwise.

◆ ad74416h_reset()

int ad74416h_reset ( struct ad74416h_desc * desc)

Perform software or hardware reset and wait for device reset time.

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

◆ ad74416h_set_adc_channel_enable()

int ad74416h_set_adc_channel_enable ( struct ad74416h_desc * desc,
uint32_t ch,
bool status )

Enable/disable a specific ADC channel.

Parameters
desc- The device structure.
ch- The channel index.
status- Enabled or disabled status.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_adc_conv_mux()

int ad74416h_set_adc_conv_mux ( struct ad74416h_desc * desc,
uint32_t ch,
enum ad74416h_adc_conv_mux val )

Set the ADC Input Node for conversion.

Parameters
desc- The device structure
ch- The channel index.
val- The ADC input node setting.

◆ ad74416h_set_adc_conv_seq()

int ad74416h_set_adc_conv_seq ( struct ad74416h_desc * desc,
enum ad74416h_conv_seq status )

Start or stop ADC conversions.

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

If the ADC was powered down, wait for 100us before the ADC starts doing conversions.

◆ ad74416h_set_adc_range()

int ad74416h_set_adc_range ( struct ad74416h_desc * desc,
uint32_t ch,
enum ad74416h_adc_range val )

Set the ADC measurement range for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
val- The ADC range value.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_adc_rate()

int ad74416h_set_adc_rate ( struct ad74416h_desc * desc,
uint32_t ch,
enum ad74416h_adc_rate val )

Set the ADC Conversion Rate for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
val- The ADC rejection setting.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_channel_dac_code()

int ad74416h_set_channel_dac_code ( struct ad74416h_desc * desc,
uint32_t ch,
uint16_t dac_code )

Set and load a code for the DAC on a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
dac_code- The code for the DAC.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_channel_function()

int ad74416h_set_channel_function ( struct ad74416h_desc * desc,
uint32_t ch,
enum ad74416h_op_mode ch_func )

Set the operation mode for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
ch_func- The operation mode.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_channel_i_limit()

int ad74416h_set_channel_i_limit ( struct ad74416h_desc * desc,
uint32_t ch,
enum ad74416h_i_limit i_limit )

Set the current limit for a specific DAC channel in vout mode.

Parameters
desc- The devices structure
ch- The channel index
i_limit- The current limit
Returns
0 in case of success, negative error otherwise

◆ ad74416h_set_channel_vout_range()

int ad74416h_set_channel_vout_range ( struct ad74416h_desc * desc,
uint32_t ch,
enum ad74416h_vout_range vout_range )

Set the voltage range for a specific channel.

Parameters
desc- The device structure.
ch- The channel index.
vout_range- The voltage range.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_debounce_mode()

int ad74416h_set_debounce_mode ( struct ad74416h_desc * desc,
uint32_t ch,
enum ad74416h_debounce_mode mode )

Set the debounce mode for the IOx inputs when the ADC is running in digital input mode.

Parameters
desc- The device structure.
ch- The channel index.
mode- The debounce mode.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_debounce_time()

int ad74416h_set_debounce_time ( struct ad74416h_desc * desc,
uint32_t ch,
uint32_t time )

Set the debounce settle time for the IOx inputs when the ADC is running in digital input mode.

Parameters
desc- The device structure.
ch- The channel index.
time- The debounce time.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_diag()

int ad74416h_set_diag ( struct ad74416h_desc * desc,
uint32_t ch,
enum ad74416h_diag_mode diag_code )

Set which diagnostic value to be loaded in the DIAG_RESULT register.

Parameters
desc- The device structure.
ch- The channel index.
diag_code- The diagnostic setting.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_diag_channel_enable()

int ad74416h_set_diag_channel_enable ( struct ad74416h_desc * desc,
uint32_t ch,
bool status )

Enable conversions on a diagnostic register.

Parameters
desc- The device structure.
ch- Diagnostic channel index.
status- Enabled or disabled status.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_gpio_config()

int ad74416h_set_gpio_config ( struct ad74416h_desc * desc,
uint32_t ch,
enum ad74416h_gpio_select config )

Set the GPIO operation mode.

Parameters
desc- The device structure.
ch- The channel index.
config- The configuration setting.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_therm_rst()

int ad74416h_set_therm_rst ( struct ad74416h_desc * desc,
bool enable )

Enable or disable the higher thermal reset.

Parameters
desc- The device structure.
enable- The thermal reset status. false: reset at 110 deg. Celsius. true: reset at 140 deg. Celsius.
Returns
0 in case of success, negative error code otherwise.

◆ ad74416h_set_threshold()

int ad74416h_set_threshold ( struct ad74416h_desc * desc,
uint32_t ch,
uint32_t threshold )

Set the threshold, for which a signal would be considered high, when the ADC is running in digital input mode.

Parameters
desc- The device structure.
ch- The channel index.
threshold- The threshold value (in millivolts).
Returns
0 in case of success, negative error code otherwise.

Set a fixed range (0 - 16 V) for the threshold, so it would not depend on Vadd.

◆ NO_OS_DECLARE_CRC8_TABLE()

NO_OS_DECLARE_CRC8_TABLE ( _crc_table )