no-OS
ad5449.h
Go to the documentation of this file.
1 /***************************************************************************/
44 /*****************************************************************************/
45 /***************************** Include Files *********************************/
46 /*****************************************************************************/
47 #include <stdint.h>
48 #include "no_os_gpio.h"
49 #include "no_os_spi.h"
50 
51 /******************************************************************************/
52 /*************************** Types Declarations *******************************/
53 /******************************************************************************/
54 enum bool_t {
55  false,
56  true
57 };
58 
59 /* Supported devices */
68 };
69 
71  uint8_t num_channels;
72  uint8_t resolution;
74 };
75 
76 struct ad5449_dev {
77  /* SPI */
79  /* GPIO */
82  /* Device Settings */
84  uint16_t control_reg;
85 };
86 
88  /* SPI */
90  /* GPIO */
93  /* Device Settings */
95 };
96 
97 /* Control Bits */
98 #define AD5449_CTRL_NOP 0
99 #define AD5449_CTRL_LOADUPDATE(x) (1 + 3 * (x))
100 #define AD5449_CTRL_READBACK(x) (2 + 3 * (x))
101 #define AD5449_CTRL_LOAD(x) (3 + 3 * (x))
102 #define AD5449_CTRL_UPDATEALL 7
103 #define AD5449_CTRL_LOADALL 8
104 #define AD5449_CTRL_DAISY_CHAIN 9
105 #define AD5449_CTRL_CLK_EDGE 10
106 #define AD5449_CTRL_CLR_ZERO 11
107 #define AD5449_CTRL_CLR_MID 12
108 #define AD5449_CTRL_REG 13
109 
110 /* AD5449 channels */
111 #define AD5449_CH_A 0
112 #define AD5449_CH_B 1
113 
114 /* Clear target scales */
115 #define AD5449_ZERO_SCALE 0
116 #define AD5449_MID_SCALE 1
117 
118 /* Active clock edge */
119 #define AD5449_CLOCK_NEGEDGE 0
120 #define AD5449_CLOCK_POSEDGE 1
121 
122 /* Daisy-Chain Control */
123 #define AD5449_DAISY_CHAIN_DIS 0
124 #define AD5449_DAISY_CHAIN_EN 1
125 
126 /* AD5449_CTRL_REG definition */
127 #define AD5449_SDO_MASK (3 << 10)
128 #define AD5449_DSY_MASK (1 << 9)
129 #define AD5449_HCLR_MASK (1 << 8)
130 #define AD5449_SCLK_MASK (1 << 7)
131 #define AD5449_SDO_BIT 10
132 #define AD5449_DSY_BIT 9
133 #define AD5449_HCLR_BIT 8
134 #define AD5449_SCLK_BIT 7
135 
136 /* AD5449 GPIO */
137 #define AD5449_LDAC_OUT no_os_gpio_direction_output(dev->gpio_ldac, \
138  NO_OS_GPIO_HIGH)
139 #define AD5449_LDAC_LOW no_os_gpio_set_value(dev->gpio_ldac, \
140  NO_OS_GPIO_LOW)
141 #define AD5449_LDAC_HIGH no_os_gpio_set_value(dev->gpio_ldac, \
142  NO_OS_GPIO_HIGH)
143 
144 #define AD5449_CLR_OUT no_os_gpio_direction_output(dev->gpio_clr, \
145  NO_OS_GPIO_HIGH)
146 #define AD5449_CLR_LOW no_os_gpio_set_value(dev->gpio_clr, \
147  NO_OS_GPIO_LOW)
148 #define AD5449_CLR_HIGH no_os_gpio_set_value(dev->gpio_clr, \
149  NO_OS_GPIO_HIGH)
150 
151 /* SDO Control Bits */
152 #define AD5449_SDO_FULL 0
153 #define AD5449_SDO_WEAK 1
154 #define AD5449_SDO_OPEN_DRAIN 2
155 #define AD5449_SDO_DISABLE 3
156 
157 /******************************************************************************/
158 /************************ Functions Declarations ******************************/
159 /******************************************************************************/
160 
161 /* Initialize SPI and Initial Values for AD5449 Board. */
162 int8_t ad5449_init(struct ad5449_dev **device,
164 
165 /* Free the resources allocated by AD5449_Init(). */
166 int32_t ad5449_remove(struct ad5449_dev *dev);
167 
168 /* Write to shift register via SPI. */
169 uint16_t ad5449_set_input_shift_reg(struct ad5449_dev *dev,
170  uint16_t command,
171  uint16_t data);
172 
173 /* Load and updates the selected DAC with a given value. */
174 void ad5449_load_update_channel(struct ad5449_dev *dev,
175  uint8_t channel,
176  uint16_t dac_value);
177 
178 /* Load selected DAC input register with a given value. */
179 void ad5449_load_channel(struct ad5449_dev *dev,
180  uint8_t channel,
181  uint16_t dac_value);
182 
183 /* Read from the selected DAC register. */
184 uint16_t ad5449_readback_channel(struct ad5449_dev *dev,
185  uint8_t channel);
186 
187 /* Update the DAC outputs (all channels). */
188 void ad5449_update_all(struct ad5449_dev *dev);
189 
190 /* Load the DAC input registers. */
191 void ad5449_load_all(struct ad5449_dev *dev,
192  int16_t dac_value);
193 
194 /* Set up the scale where to the output will be cleared on active CLR signal */
195 void ad5449_clear_scale_setup(struct ad5449_dev *dev,
196  int8_t type);
197 
198 /* Enable/disable the Daisy-Chain mode */
199 void ad5449_daisy_chain_setup(struct ad5449_dev *dev,
200  int8_t value);
201 
202 /* Control the SDO output driver strength */
203 void ad5449_sdocontrol(struct ad5449_dev *dev,
204  int8_t control_bits);
205 
206 /* Set up the active clock edge of the SPI interface */
207 void ad5449_sclksetup(struct ad5449_dev *dev,
208  int8_t value);
ad5449_sclksetup
void ad5449_sclksetup(struct ad5449_dev *dev, int8_t value)
Set up the active clock edge of the SPI interface.
Definition: ad5449.c:455
no_os_gpio_init_param
Structure holding the parameters for GPIO initialization.
Definition: no_os_gpio.h:85
ad5449_load_all
void ad5449_load_all(struct ad5449_dev *dev, int16_t dac_value)
Load the DAC input registers. This function has a physical result just with devices with two channels...
Definition: ad5449.c:327
AD5449_CLOCK_POSEDGE
#define AD5449_CLOCK_POSEDGE
Definition: ad5449.h:120
ad5449_update_all
void ad5449_update_all(struct ad5449_dev *dev)
Update the DAC outputs. This function has a physical result just with devices with two channels.
Definition: ad5449.c:309
no_os_spi_write_and_read
int32_t no_os_spi_write_and_read(struct no_os_spi_desc *desc, uint8_t *data, uint16_t bytes_number)
Write and read data to/from SPI.
Definition: no_os_spi.c:82
ad5449_init_param::gpio_ldac
struct no_os_gpio_init_param gpio_ldac
Definition: ad5449.h:91
AD5449_CTRL_REG
#define AD5449_CTRL_REG
Definition: ad5449.h:108
AD5449_SDO_BIT
#define AD5449_SDO_BIT
Definition: ad5449.h:131
no_os_spi.h
Header file of SPI Interface.
LSB_OFFSET
#define LSB_OFFSET
Definition: ad5449.c:55
AD5449_CH_A
#define AD5449_CH_A
Definition: ad5449.h:111
ad5449_chip_info
Definition: ad5449.h:70
ad5449_daisy_chain_setup
void ad5449_daisy_chain_setup(struct ad5449_dev *dev, int8_t value)
Enable/disable the Daisy-Chain mode.
Definition: ad5449.c:388
ID_AD5415
@ ID_AD5415
Definition: ad5449.h:61
AD5449_CLR_HIGH
#define AD5449_CLR_HIGH
Definition: ad5449.h:148
ad5449_chip_info::num_channels
uint8_t num_channels
Definition: ad5449.h:71
AD5449_CTRL_DAISY_CHAIN
#define AD5449_CTRL_DAISY_CHAIN
Definition: ad5449.h:104
ad5449_daisy_chain_setup
void ad5449_daisy_chain_setup(struct ad5449_dev *dev, int8_t value)
Enable/disable the Daisy-Chain mode.
Definition: ad5449.c:388
device
Definition: ad9361_util.h:75
CMD_OFFSET
#define CMD_OFFSET
Definition: ad5449.c:51
ad5449_load_channel
void ad5449_load_channel(struct ad5449_dev *dev, uint8_t channel, uint16_t dac_value)
Load selected DAC input register with a given value.
Definition: ad5449.c:253
ad5449_set_input_shift_reg
uint16_t ad5449_set_input_shift_reg(struct ad5449_dev *dev, uint16_t command, uint16_t data)
Write to input register and read from output register via SPI.
Definition: ad5449.c:186
AD5449_LDAC_OUT
#define AD5449_LDAC_OUT
Definition: ad5449.h:137
AD5449_ZERO_SCALE
#define AD5449_ZERO_SCALE
Definition: ad5449.h:115
AD5449_DSY_BIT
#define AD5449_DSY_BIT
Definition: ad5449.h:132
ad5449_dev
Definition: ad5449.h:76
bool_t
bool_t
Definition: ad5446.h:63
DATA_MASK
#define DATA_MASK
Definition: ad5449.c:49
ad5449_load_update_channel
void ad5449_load_update_channel(struct ad5449_dev *dev, uint8_t channel, uint16_t dac_value)
Loads and updates the selected DAC with a given value.
Definition: ad5449.c:227
PKT_LENGTH
#define PKT_LENGTH
Definition: ad5449.c:56
ad5449_chip_info::has_ctrl
enum bool_t has_ctrl
Definition: ad5449.h:73
ad5449_load_channel
void ad5449_load_channel(struct ad5449_dev *dev, uint8_t channel, uint16_t dac_value)
Load selected DAC input register with a given value.
Definition: ad5449.c:253
ad5449_readback_channel
uint16_t ad5449_readback_channel(struct ad5449_dev *dev, uint8_t channel)
Read from the selected DAC register.
Definition: ad5449.c:278
MSB_OFFSET
#define MSB_OFFSET
Definition: ad5449.c:53
AD5449_LDAC_LOW
#define AD5449_LDAC_LOW
Definition: ad5449.h:139
ad5449_dev::gpio_ldac
struct no_os_gpio_desc * gpio_ldac
Definition: ad5449.h:80
ad5449.h
Header file of AD5449 Driver. This driver supporting the following devices: AD5415,...
ad5449_chip_info::resolution
uint8_t resolution
Definition: ad5449.h:72
AD5449_CTRL_LOAD
#define AD5449_CTRL_LOAD(x)
Definition: ad5449.h:101
ID_AD5443
@ ID_AD5443
Definition: ad5449.h:66
ad5449_dev::spi_desc
no_os_spi_desc * spi_desc
Definition: ad5449.h:78
AD5449_HCLR_MASK
#define AD5449_HCLR_MASK
Definition: ad5449.h:129
ad5449_load_update_channel
void ad5449_load_update_channel(struct ad5449_dev *dev, uint8_t channel, uint16_t dac_value)
Loads and updates the selected DAC with a given value.
Definition: ad5449.c:227
ad5449_readback_channel
uint16_t ad5449_readback_channel(struct ad5449_dev *dev, uint8_t channel)
Read from the selected DAC register.
Definition: ad5449.c:278
no_os_gpio_remove
int32_t no_os_gpio_remove(struct no_os_gpio_desc *desc)
Free the resources allocated by no_os_gpio_get().
Definition: no_os_gpio.c:95
no_os_spi_desc
Structure holding SPI descriptor.
Definition: no_os_spi.h:132
AD5449_MID_SCALE
#define AD5449_MID_SCALE
Definition: ad5449.h:116
AD5449_CTRL_LOADALL
#define AD5449_CTRL_LOADALL
Definition: ad5449.h:103
AD5449_CTRL_CLR_ZERO
#define AD5449_CTRL_CLR_ZERO
Definition: ad5449.h:106
ad5449_sdocontrol
void ad5449_sdocontrol(struct ad5449_dev *dev, int8_t control_bits)
Control the SDO output driver strength. This function is supported by the devices : AD5415,...
Definition: ad5449.c:427
no_os_gpio_desc
Structure holding the GPIO descriptor.
Definition: no_os_gpio.h:102
ad5449_init_param::act_device
enum ad5449_type_t act_device
Definition: ad5449.h:94
MAX_RESOLUTION
#define MAX_RESOLUTION
Definition: ad5449.c:48
ad5449_init
int8_t ad5449_init(struct ad5449_dev **device, struct ad5449_init_param init_param)
Initialize SPI and Initial Values for AD5449 Board.
Definition: ad5449.c:112
TWO_BIT_MASK
#define TWO_BIT_MASK
Definition: ad5449.c:58
no_os_gpio_get
int32_t no_os_gpio_get(struct no_os_gpio_desc **desc, const struct no_os_gpio_init_param *param)
Obtain the GPIO decriptor.
Definition: no_os_gpio.c:55
AD5449_DSY_MASK
#define AD5449_DSY_MASK
Definition: ad5449.h:128
AD5449_CTRL_UPDATEALL
#define AD5449_CTRL_UPDATEALL
Definition: ad5449.h:102
AD5449_CTRL_CLR_MID
#define AD5449_CTRL_CLR_MID
Definition: ad5449.h:107
ID_AD5449
@ ID_AD5449
Definition: ad5449.h:67
ad5449_type_t
ad5449_type_t
Definition: ad5449.h:60
MSB_MASK
#define MSB_MASK
Definition: ad5449.c:52
ad5449_set_input_shift_reg
uint16_t ad5449_set_input_shift_reg(struct ad5449_dev *dev, uint16_t command, uint16_t data)
Write to input register and read from output register via SPI.
Definition: ad5449.c:186
ID_AD5426
@ ID_AD5426
Definition: ad5449.h:62
AD5449_SCLK_BIT
#define AD5449_SCLK_BIT
Definition: ad5449.h:134
AD5449_CTRL_LOADUPDATE
#define AD5449_CTRL_LOADUPDATE(x)
Definition: ad5449.h:99
AD5449_CLR_OUT
#define AD5449_CLR_OUT
Definition: ad5449.h:144
ad5449_clear_scale_setup
void ad5449_clear_scale_setup(struct ad5449_dev *dev, int8_t type)
Set up the scale where to the output will be cleared on active CLR signal.
Definition: ad5449.c:348
AD5449_DAISY_CHAIN_EN
#define AD5449_DAISY_CHAIN_EN
Definition: ad5449.h:124
ID_AD5432
@ ID_AD5432
Definition: ad5449.h:64
AD5449_HCLR_BIT
#define AD5449_HCLR_BIT
Definition: ad5449.h:133
init_param
struct ad7616_init_param init_param
Definition: ad7616_sdz.c:96
ad5449_init
int8_t ad5449_init(struct ad5449_dev **device, struct ad5449_init_param init_param)
Initialize SPI and Initial Values for AD5449 Board.
Definition: ad5449.c:112
ad5449_sclksetup
void ad5449_sclksetup(struct ad5449_dev *dev, int8_t value)
Set up the active clock edge of the SPI interface.
Definition: ad5449.c:455
ID_AD5429
@ ID_AD5429
Definition: ad5449.h:63
ad5449_dev::act_device
enum ad5449_type_t act_device
Definition: ad5449.h:83
ad5449_load_all
void ad5449_load_all(struct ad5449_dev *dev, int16_t dac_value)
Load the DAC input registers. This function has a physical result just with devices with two channels...
Definition: ad5449.c:327
ad5449_sdocontrol
void ad5449_sdocontrol(struct ad5449_dev *dev, int8_t control_bits)
Control the SDO output driver strength. This function is supported by the devices : AD5415,...
Definition: ad5449.c:427
no_os_spi_remove
int32_t no_os_spi_remove(struct no_os_spi_desc *desc)
Free the resources allocated by no_os_spi_init().
Definition: no_os_spi.c:70
no_os_gpio.h
Header file of GPIO Interface.
ID_AD5439
@ ID_AD5439
Definition: ad5449.h:65
AD5449_SDO_FULL
#define AD5449_SDO_FULL
Definition: ad5449.h:152
ad5449_remove
int32_t ad5449_remove(struct ad5449_dev *dev)
Free the resources allocated by ad5449_init().
Definition: ad5449.c:163
ad5449_dev::control_reg
uint16_t control_reg
Definition: ad5449.h:84
ad5449_update_all
void ad5449_update_all(struct ad5449_dev *dev)
Update the DAC outputs. This function has a physical result just with devices with two channels.
Definition: ad5449.c:309
ad5449_init_param::gpio_clr
struct no_os_gpio_init_param gpio_clr
Definition: ad5449.h:92
no_os_spi_init
int32_t no_os_spi_init(struct no_os_spi_desc **desc, const struct no_os_spi_init_param *param)
Initialize the SPI communication peripheral.
Definition: no_os_spi.c:51
ad5449_init_param
Definition: ad5449.h:87
AD5449_SCLK_MASK
#define AD5449_SCLK_MASK
Definition: ad5449.h:130
ad5449_dev::gpio_clr
struct no_os_gpio_desc * gpio_clr
Definition: ad5449.h:81
AD5449_CTRL_READBACK
#define AD5449_CTRL_READBACK(x)
Definition: ad5449.h:100
CMD_MASK
#define CMD_MASK
Definition: ad5449.c:50
ad5449_remove
int32_t ad5449_remove(struct ad5449_dev *dev)
Free the resources allocated by ad5449_init().
Definition: ad5449.c:163
AD5449_DAISY_CHAIN_DIS
#define AD5449_DAISY_CHAIN_DIS
Definition: ad5449.h:123
ad5449_init_param::spi_init
no_os_spi_init_param spi_init
Definition: ad5449.h:89
AD5449_CTRL_CLK_EDGE
#define AD5449_CTRL_CLK_EDGE
Definition: ad5449.h:105
AD5449_CLOCK_NEGEDGE
#define AD5449_CLOCK_NEGEDGE
Definition: ad5449.h:119
ad5449_clear_scale_setup
void ad5449_clear_scale_setup(struct ad5449_dev *dev, int8_t type)
Set up the scale where to the output will be cleared on active CLR signal.
Definition: ad5449.c:348
AD5449_CTRL_NOP
#define AD5449_CTRL_NOP
Definition: ad5449.h:98
no_os_spi_init_param
Structure holding the parameters for SPI initialization.
Definition: no_os_spi.h:112
AD5449_SDO_MASK
#define AD5449_SDO_MASK
Definition: ad5449.h:127
LSB_MASK
#define LSB_MASK
Definition: ad5449.c:54