no-OS
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
ad5791.h
Go to the documentation of this file.
1/***************************************************************************/
34#ifndef __AD5791_H__
35#define __AD5791_H__
36
37#include <stdint.h>
38#include "no_os_delay.h"
39#include "no_os_gpio.h"
40#include "no_os_spi.h"
41#include "no_os_util.h"
42#include "no_os_error.h"
43
44/* Supported devices */
52
53/* Possible voltage spans for linearity error compensation */
62
64 uint32_t resolution;
65};
66
67struct ad5791_dev {
68 /* SPI */
70 /* GPIO */
74 /* Device Settings */
77};
78
90
91#define AD5791_RESET_OUT no_os_gpio_direction_output(dev->gpio_reset, \
92 NO_OS_GPIO_HIGH);
93#define AD5791_RESET_LOW no_os_gpio_set_value(dev->gpio_reset, \
94 NO_OS_GPIO_LOW)
95#define AD5791_RESET_HIGH no_os_gpio_set_value(dev->gpio_reset, \
96 NO_OS_GPIO_HIGH)
97
98#define AD5791_CLR_OUT no_os_gpio_direction_output(dev->gpio_clr, \
99 NO_OS_GPIO_HIGH);
100#define AD5791_CLR_LOW no_os_gpio_set_value(dev->gpio_clr, \
101 NO_OS_GPIO_LOW)
102#define AD5791_CLR_HIGH no_os_gpio_set_value(dev->gpio_clr, \
103 NO_OS_GPIO_HIGH)
104
105#define AD5791_LDAC_OUT no_os_gpio_direction_output(dev->gpio_ldac, \
106 NO_OS_GPIO_HIGH);
107#define AD5791_LDAC_LOW no_os_gpio_set_value(dev->gpio_ldac, \
108 NO_OS_GPIO_LOW)
109#define AD5791_LDAC_HIGH no_os_gpio_set_value(dev->gpio_ldac, \
110 NO_OS_GPIO_HIGH)
111
112/* Maximum resolution */
113#define MAX_RESOLUTION 20
114
115/* Register Map */
116#define AD5791_NOP 0 // No operation (NOP).
117#define AD5791_REG_DAC 1 // DAC register.
118#define AD5791_REG_CTRL 2 // Control register.
119#define AD5791_REG_CLR_CODE 3 // Clearcode register.
120#define AD5791_CMD_WR_SOFT_CTRL 4 // Software control register(Write only).
121
122/* Input Shift Register bit definition. */
123#define AD5791_READ (1ul << 23)
124#define AD5791_WRITE (0ul << 23)
125#define AD5791_ADDR_REG(x) (((uint32_t)(x) & 0x7) << 20)
126
127/* Control Register bit Definition */
128#define AD5791_CTRL_LINCOMP_MASK NO_OS_GENMASK(9,6) // Linearity error compensation.
129#define AD5791_CTRL_LINCOMP(x) (((x) & 0xF) << 6)
130#define AD5791_CTRL_SDODIS_MASK NO_OS_BIT(5) // SDO pin enable/disable control.
131#define AD5791_CTRL_SDODIS(x) ((x & 0x01) << 5)
132#define AD5791_CTRL_BIN2SC_MASK NO_OS_BIT(4) // DAC register coding selection.
133#define AD5791_CTRL_BIN2SC(x) ((x & 0x01) << 4)
134#define AD5791_CTRL_DACTRI NO_OS_BIT(3) // DAC tristate control.
135#define AD5791_CTRL_OPGND NO_OS_BIT(2) // Output ground clamp control.
136#define AD5791_CTRL_RBUF_MASK NO_OS_BIT(1) // Output amplifier configuration control.
137#define AD5791_CTRL_RBUF(x) ((x & 0x01) << 1)
138
139/* Software Control Register bit definition */
140#define AD5791_SOFT_CTRL_RESET (1 << 2) // RESET function.
141#define AD5791_SOFT_CTRL_CLR (1 << 1) // CLR function.
142#define AD5791_SOFT_CTRL_LDAC (1 << 0) // LDAC function.
143
144/* DAC OUTPUT STATES */
145#define AD5791_OUT_NORMAL 0x0
146#define AD5791_OUT_CLAMPED_6K 0x1
147#define AD5791_OUT_TRISTATE 0x2
148
150int32_t ad5791_init(struct ad5791_dev **device,
152
154int32_t ad5791_remove(struct ad5791_dev *dev);
155
157int32_t ad5791_set_register_value(struct ad5791_dev *dev,
158 uint8_t register_address,
159 uint32_t register_value);
160
162int32_t ad5791_get_register_value(struct ad5791_dev *dev,
163 uint8_t register_address,
164 uint32_t *value);
165
167int32_t ad5791_dac_ouput_state(struct ad5791_dev *dev,
168 uint8_t state);
169
171int32_t ad5791_set_dac_value(struct ad5791_dev *dev,
172 uint32_t value);
173
175int32_t ad5791_soft_instruction(struct ad5791_dev *dev,
176 uint8_t instruction_bit);
177
180int32_t ad5791_setup(struct ad5791_dev *dev,
181 uint32_t setup_word);
182
184int ad5791_spi_write_mask(struct ad5791_dev *dev,
185 uint8_t register_address,
186 uint32_t mask,
187 uint32_t value);
188
190int ad5791_set_lin_comp(struct ad5791_dev *dev,
191 enum ad5791_lin_comp_select v_span);
192
194int ad5791_ldac_trigger(struct ad5791_dev *dev);
195
197int ad5791_clear_async(struct ad5791_dev *dev);
198
199#endif /* __AD5791_H__ */
int32_t ad5791_dac_ouput_state(struct ad5791_dev *dev, uint8_t state)
Sets the DAC output in one of the three states.
Definition ad5791.c:216
ad5791_lin_comp_select
Definition ad5791.h:54
@ AD5791_SPAN_10V_TO_12V
Definition ad5791.h:57
@ AD5781_SPAN_UPTO_10V
Definition ad5791.h:55
@ AD5791_SPAN_19V_TO_20V
Definition ad5791.h:60
@ AD5781_SPAN_10V_TO_20V
Definition ad5791.h:56
@ AD5791_SPAN_16V_TO_19V
Definition ad5791.h:59
@ AD5791_SPAN_12V_TO_16V
Definition ad5791.h:58
ad5791_type
Definition ad5791.h:45
@ ID_AD5790
Definition ad5791.h:49
@ ID_AD5781
Definition ad5791.h:48
@ ID_AD5780
Definition ad5791.h:47
@ ID_AD5760
Definition ad5791.h:46
@ ID_AD5791
Definition ad5791.h:50
int ad5791_spi_write_mask(struct ad5791_dev *dev, uint8_t register_address, uint32_t mask, uint32_t value)
SPI write to device using a mask.
Definition ad5791.c:357
int32_t ad5791_remove(struct ad5791_dev *dev)
Free the resources allocated by ad5791_init().
Definition ad5791.c:107
int ad5791_clear_async(struct ad5791_dev *dev)
Clear DAC channel output with the clearcode.
Definition ad5791.c:448
int32_t ad5791_set_register_value(struct ad5791_dev *dev, uint8_t register_address, uint32_t register_value)
Writes data into a register.
Definition ad5791.c:136
int32_t ad5791_setup(struct ad5791_dev *dev, uint32_t setup_word)
Configures the output amplifier, DAC coding, SDO state and the linearity error compensation.
Definition ad5791.c:308
int32_t ad5791_init(struct ad5791_dev **device, struct ad5791_init_param init_param)
Initializes the communication with the device.
Definition ad5791.c:68
int32_t ad5791_get_register_value(struct ad5791_dev *dev, uint8_t register_address, uint32_t *value)
Reads the value of a register.
Definition ad5791.c:174
int ad5791_set_lin_comp(struct ad5791_dev *dev, enum ad5791_lin_comp_select v_span)
Set Linearity error compensation based on the reference voltage span.
Definition ad5791.c:385
int32_t ad5791_set_dac_value(struct ad5791_dev *dev, uint32_t value)
Writes to the DAC register.
Definition ad5791.c:249
int ad5791_ldac_trigger(struct ad5791_dev *dev)
Trigger LDAC.
Definition ad5791.c:420
int32_t ad5791_soft_instruction(struct ad5791_dev *dev, uint8_t instruction_bit)
Asserts RESET, CLR or LDAC in a software manner.
Definition ad5791.c:276
struct ad7616_init_param init_param
Definition ad7616_sdz.c:107
Header file of Delay functions.
Error codes definition.
Header file of GPIO Interface.
Header file of SPI Interface.
Header file of utility functions.
Definition ad5791.h:63
uint32_t resolution
Definition ad5791.h:64
Definition ad5791.h:67
struct no_os_spi_desc * spi_desc
Definition ad5791.h:69
struct no_os_gpio_desc * gpio_ldac
Definition ad5791.h:73
bool rbuf_gain2
Definition ad5791.h:76
struct no_os_gpio_desc * gpio_reset
Definition ad5791.h:71
enum ad5791_type act_device
Definition ad5791.h:75
struct no_os_gpio_desc * gpio_clr
Definition ad5791.h:72
Definition ad5791.h:79
struct no_os_gpio_init_param gpio_ldac
Definition ad5791.h:85
struct no_os_spi_init_param spi_init
Definition ad5791.h:81
struct no_os_gpio_init_param gpio_clr
Definition ad5791.h:84
bool rbuf_gain2
Definition ad5791.h:88
struct no_os_gpio_init_param gpio_reset
Definition ad5791.h:83
enum ad5791_type act_device
Definition ad5791.h:87
Definition ad9361_util.h:63
Structure holding the GPIO descriptor.
Definition no_os_gpio.h:84
Structure holding the parameters for GPIO initialization.
Definition no_os_gpio.h:67
Structure holding SPI descriptor.
Definition no_os_spi.h:180
Structure holding the parameters for SPI initialization.
Definition no_os_spi.h:128