no-OS
ad7091r8.h
Go to the documentation of this file.
1 /***************************************************************************/
40 #ifndef __AD7091R8_H__
41 #define __AD7091R8_H__
42 
43 /******************************************************************************/
44 /***************************** Include Files **********************************/
45 /******************************************************************************/
46 #include <stdbool.h>
47 
48 #include "no_os_spi.h"
49 #include "no_os_gpio.h"
50 
51 /******************************************************************************/
52 /********************** Macros and Constants Definitions **********************/
53 /******************************************************************************/
54 #define AD7091R_NUM_CHANNELS(id) (1 << ((id) + 1))
55 #define AD7091R8_BITS 12
56 
57 #define AD7091R8_CONV_MASK NO_OS_GENMASK(AD7091R8_BITS - 1, 0)
58 
59 /* AD7091r8 registers */
60 #define AD7091R8_REG_RESULT 0x00
61 #define AD7091R8_REG_CHANNEL 0x01
62 #define AD7091R8_REG_CONF 0x02
63 #define AD7091R8_REG_ALERT 0x03
64 #define AD7091R8_REG_CH_LOW_LIMIT(ch) ((ch) * 3 + 4)
65 #define AD7091R8_REG_CH_HIGH_LIMIT(ch) ((ch) * 3 + 5)
66 #define AD7091R8_REG_CH_HYSTERESIS(ch) ((ch) * 3 + 6)
67 
68 /* AD7091R8_REG_RESULT */
69 #define AD7091R8_REG_RESULT_DATA_MASK NO_OS_GENMASK(11, 0)
70 #define AD7091R8_REG_RESULT_ALT_MASK NO_OS_BIT(12)
71 #define AD7091R8_REG_RESULT_CH_ID_MASK NO_OS_GENMASK(15, 13)
72 
73 /* AD7091R8_REG_CONF */
74 #define REG_CONF_SLEEP_MODE_MASK NO_OS_GENMASK(1, 0)
75 #define REG_CONF_GPO1_MASK NO_OS_BIT(2)
76 #define REG_CONF_GPO0_MASK NO_OS_BIT(3)
77 #define REG_CONF_GPO0_MODE_MASK NO_OS_GENMASK(6, 4)
78 #define REG_CONF_ALERT_STICKY_MASK NO_OS_BIT(7)
79 #define REG_CONF_RESET_MASK NO_OS_BIT(9)
80 
81 /* AD7091R8_REG_ALERT */
82 #define REG_ALERT_MASK(x, ch) (x >> (ch * 2))
83 
84 /* AD7091R8 read/write protocol masks */
85 #define AD7091R8_REG_DATA_MSK NO_OS_GENMASK(9, 0)
86 #define AD7091R8_RD_WR_FLAG_MSK NO_OS_BIT(10)
87 #define AD7091R8_REG_ADDR_MSK NO_OS_GENMASK(15, 11)
88 
89 /*****************************************************************************/
90 /*************************** Types Declarations *******************************/
91 /******************************************************************************/
96 };
97 
98 static char * const ad7091r8_names[] = {
99  [AD7091R2] = "ad7091r-2",
100  [AD7091R4] = "ad7091r-4",
101  [AD7091R8] = "ad7091r-8",
102 };
103 
118 };
119 
129 };
130 
142 };
143 
155 };
156 
168 };
169 
170 struct ad7091r8_dev {
172  //spi_desc *spi_desc;
174  /* Reference voltage */
175  int vref_mv;
176  /* CONVST GPIO handler */
182  /* AD7091R specific device identifier */
184  /* AD7091R device sleep mode */
186 };
187 
189  /* SPI initialization parameters */
191  /* External Voltage Reference */
192  int vref_mv;
193  /* CONVST GPIO initialization parameters */
195  /* Reset GPIO initialization parameters */
197  /* Alert GPIO initialization parameters */
199  /* AD7091R specific device identifier */
201  /* AD7091R device sleep mode */
203 };
204 
205 /******************************************************************************/
206 /************************ Functions Declarations ******************************/
207 /******************************************************************************/
208 /* Initialize the device. */
209 int ad7091r8_init(struct ad7091r8_dev **device,
211 
212 /* Remove the device and release resources. */
213 int ad7091r8_remove(struct ad7091r8_dev *dev);
214 
215 /* Set device sleep mode */
216 int ad7091r8_set_sleep_mode(struct ad7091r8_dev *dev,
217  enum ad7091r8_sleep_mode mode);
218 
219 /* Set device set port value */
220 int ad7091r8_set_port(struct ad7091r8_dev *dev,
221  enum ad7091r8_port port,
222  bool value);
223 
224 /* Set device set GPO0 mode */
225 int ad7091r8_set_gpo0_mode(struct ad7091r8_dev *dev,
226  enum ad7091r8_gpo0_mode mode,
227  bool is_cmos);
228 
229 /* Set high limit, low limit, hysteresis. */
230 int ad7091r8_set_limit(struct ad7091r8_dev *dev,
231  enum ad7091r8_limit limit,
232  uint8_t channel,
233  uint16_t value);
234 
235 /* Get alert. */
236 int ad7091r8_get_alert(struct ad7091r8_dev *dev,
237  uint8_t channel,
238  enum ad7091r8_alert_type *alert);
239 
240 /* Get high limit, low limit, hysteresis. */
241 int ad7091r8_get_limit(struct ad7091r8_dev *dev,
242  enum ad7091r8_limit limit,
243  uint8_t channel,
244  uint16_t *value);
245 
246 /* Select device channel. */
247 int ad7091r8_set_channel(struct ad7091r8_dev *dev,
248  uint8_t channel);
249 
250 /* Read one sample. */
251 int ad7091r8_read_one(struct ad7091r8_dev *dev,
252  uint8_t chan,
253  uint16_t *read_val);
254 
255 /* Read next channel set in the channel sequencer. */
256 int ad7091r8_sequenced_read(struct ad7091r8_dev *dev,
257  uint16_t *read_val);
258 
259 /* Read device register. */
260 int ad7091r8_spi_reg_read(struct ad7091r8_dev *dev,
261  uint8_t reg_addr,
262  uint16_t *reg_data);
263 
264 /* Write to device register. */
265 int ad7091r8_spi_reg_write(struct ad7091r8_dev *dev,
266  uint8_t reg_addr,
267  uint16_t reg_data);
268 
269 /* SPI write to device using a mask. */
270 int ad7091r8_spi_write_mask(struct ad7091r8_dev* dev,
271  uint8_t reg_addr,
272  uint16_t mask,
273  uint16_t data);
274 
275 int ad7091r8_pulse_convst(struct ad7091r8_dev *dev);
276 
277 #endif // __AD7091R8_H__
ad7091r8_dev::gpio_reset
struct no_os_gpio_desc * gpio_reset
Definition: ad7091r8.h:179
ad7091r8_init_param::sleep_mode
enum ad7091r8_sleep_mode sleep_mode
Definition: ad7091r8.h:202
AD7091R8_HIGH_LIMIT
@ AD7091R8_HIGH_LIMIT
Definition: ad7091r8.h:152
ad7091r8_set_channel
int ad7091r8_set_channel(struct ad7091r8_dev *dev, uint8_t channel)
Definition: ad7091r8.c:490
no_os_put_unaligned_be16
void no_os_put_unaligned_be16(uint16_t val, uint8_t *buf)
no_os_alloc.h
no_os_gpio_init_param
Structure holding the parameters for GPIO initialization.
Definition: no_os_gpio.h:85
AD7091R8_GPO0_BUSY
@ AD7091R8_GPO0_BUSY
Definition: ad7091r8.h:141
ad7091r8_remove
int ad7091r8_remove(struct ad7091r8_dev *dev)
Free the resources allocated by ad7091r8_init().
Definition: ad7091r8.c:464
ad7091r8_get_alert
int ad7091r8_get_alert(struct ad7091r8_dev *dev, uint8_t channel, enum ad7091r8_alert_type *alert)
Definition: ad7091r8.c:290
AD7091R8_REG_DATA_MSK
#define AD7091R8_REG_DATA_MSK
Definition: ad7091r8.h:85
ad7091r8_pulse_convst
int ad7091r8_pulse_convst(struct ad7091r8_dev *dev)
Definition: ad7091r8.c:54
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:165
AD7091R8_GPO1
@ AD7091R8_GPO1
Definition: ad7091r8.h:128
no_os_spi.h
Header file of SPI Interface.
REG_CONF_GPO0_MASK
#define REG_CONF_GPO0_MASK
Definition: ad7091r5.h:77
REG_CONF_RESET_MASK
#define REG_CONF_RESET_MASK
Definition: ad7091r5.h:91
REG_CONF_GPO0_MODE_MASK
#define REG_CONF_GPO0_MODE_MASK
Definition: ad7091r5.h:80
AD7091R8_LOW_ALERT
@ AD7091R8_LOW_ALERT
Definition: ad7091r8.h:167
no_os_delay.h
Header file of Delay functions.
ad7091r8_dev::spi_desc
struct no_os_spi_desc * spi_desc
Definition: ad7091r8.h:173
no_os_gpio_init_param::port
int32_t port
Definition: no_os_gpio.h:87
ad7091r8_spi_reg_write
int ad7091r8_spi_reg_write(struct ad7091r8_dev *dev, uint8_t reg_addr, uint16_t reg_data)
Definition: ad7091r8.c:75
device
Definition: ad9361_util.h:75
ad7091r8_device_id
ad7091r8_device_id
Definition: ad7091r8.h:92
NO_OS_GPIO_HIGH
@ NO_OS_GPIO_HIGH
Definition: no_os_gpio.h:123
AD7091R8_REG_CH_HYSTERESIS
#define AD7091R8_REG_CH_HYSTERESIS(ch)
Definition: ad7091r8.h:66
AD7091R8_REG_RESULT
#define AD7091R8_REG_RESULT
Definition: ad7091r8.h:60
no_os_calloc
void * no_os_calloc(size_t nitems, size_t size)
Allocate memory and return a pointer to it, set memory to 0.
Definition: chibios_alloc.c:60
ad7091r8.h
Implementation of AD7091R-8 driver header file.
AD7091R8_REG_CHANNEL
#define AD7091R8_REG_CHANNEL
Definition: ad7091r8.h:61
AD7091R8_REG_ALERT
#define AD7091R8_REG_ALERT
Definition: ad7091r8.h:63
AD7091R8_HIGH_ALERT
@ AD7091R8_HIGH_ALERT
Definition: ad7091r8.h:165
ad7091r8_init_param::gpio_alert
struct no_os_gpio_init_param * gpio_alert
Definition: ad7091r8.h:198
ad7091r8_init_param
Definition: ad7091r8.h:188
ad7091r8_dev::gpio_alert
struct no_os_gpio_desc * gpio_alert
Definition: ad7091r8.h:181
NO_OS_GPIO_LOW
@ NO_OS_GPIO_LOW
Definition: no_os_gpio.h:121
ad7091r8_dev
Definition: ad7091r8.h:170
ad7091r8_dev::device_id
enum ad7091r8_device_id device_id
Definition: ad7091r8.h:183
no_os_field_prep
uint32_t no_os_field_prep(uint32_t mask, uint32_t val)
ad7091r8_get_limit
int ad7091r8_get_limit(struct ad7091r8_dev *dev, enum ad7091r8_limit limit, uint8_t channel, uint16_t *value)
Definition: ad7091r8.c:321
ad7091r8_remove
int ad7091r8_remove(struct ad7091r8_dev *dev)
Free the resources allocated by ad7091r8_init().
Definition: ad7091r8.c:464
REG_CONF_SLEEP_MODE_MASK
#define REG_CONF_SLEEP_MODE_MASK
Definition: ad7091r5.h:71
no_os_error.h
Error codes definition.
ad7091r8_limit
ad7091r8_limit
Limit type.
Definition: ad7091r8.h:148
ad7091r8_sleep_mode
ad7091r8_sleep_mode
Converter supported sleep modes.
Definition: ad7091r8.h:108
ad7091r8_get_limit
int ad7091r8_get_limit(struct ad7091r8_dev *dev, enum ad7091r8_limit limit, uint8_t channel, uint16_t *value)
Definition: ad7091r8.c:321
ad7091r8_dev::gpio_convst
struct no_os_gpio_desc * gpio_convst
Definition: ad7091r8.h:177
ad7091r8_spi_write_mask
int ad7091r8_spi_write_mask(struct ad7091r8_dev *dev, uint8_t reg_addr, uint16_t mask, uint16_t data)
Definition: ad7091r8.c:154
AD7091R8_GPO0
@ AD7091R8_GPO0
Definition: ad7091r8.h:126
AD7091R8_RD_WR_FLAG_MSK
#define AD7091R8_RD_WR_FLAG_MSK
Definition: ad7091r8.h:86
AD7091R8_SLEEP_MODE_1
@ AD7091R8_SLEEP_MODE_1
Definition: ad7091r8.h:113
ad7091r8_set_port
int ad7091r8_set_port(struct ad7091r8_dev *dev, enum ad7091r8_port port, bool value)
Definition: ad7091r8.c:205
AD7091R_NUM_CHANNELS
#define AD7091R_NUM_CHANNELS(id)
Definition: ad7091r8.h:54
ad7091r8_init_param::device_id
enum ad7091r8_device_id device_id
Definition: ad7091r8.h:200
ad7091r8_set_sleep_mode
int ad7091r8_set_sleep_mode(struct ad7091r8_dev *dev, enum ad7091r8_sleep_mode mode)
Set device sleep mode.
Definition: ad7091r8.c:180
ad7091r8_init_param::gpio_convst
struct no_os_gpio_init_param * gpio_convst
Definition: ad7091r8.h:194
AD7091R8_SLEEP_MODE_3
@ AD7091R8_SLEEP_MODE_3
Definition: ad7091r8.h:117
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:110
no_os_gpio_desc::port
int32_t port
Definition: no_os_gpio.h:104
no_os_spi_desc
Structure holding SPI descriptor.
Definition: no_os_spi.h:177
ad7091r8_set_sleep_mode
int ad7091r8_set_sleep_mode(struct ad7091r8_dev *dev, enum ad7091r8_sleep_mode mode)
Set device sleep mode.
Definition: ad7091r8.c:180
REG_ALERT_MASK
#define REG_ALERT_MASK(x, ch)
Definition: ad7091r5.h:99
no_os_gpio_desc
Structure holding the GPIO descriptor.
Definition: no_os_gpio.h:102
AD7091R8_CONV_MASK
#define AD7091R8_CONV_MASK
Definition: ad7091r8.h:57
AD7091R4
@ AD7091R4
Definition: ad7091r8.h:94
ad7091r8_sequenced_read
int ad7091r8_sequenced_read(struct ad7091r8_dev *dev, uint16_t *read_val)
Definition: ad7091r8.c:539
ad7091r8_set_limit
int ad7091r8_set_limit(struct ad7091r8_dev *dev, enum ad7091r8_limit limit, uint8_t channel, uint16_t value)
Definition: ad7091r8.c:258
ad7091r8_set_port
int ad7091r8_set_port(struct ad7091r8_dev *dev, enum ad7091r8_port port, bool value)
Definition: ad7091r8.c:205
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
AD7091R2
@ AD7091R2
Definition: ad7091r8.h:93
AD7091R8_GPO0_ALERT
@ AD7091R8_GPO0_ALERT
Definition: ad7091r8.h:139
ad7091r8_sequenced_read
int ad7091r8_sequenced_read(struct ad7091r8_dev *dev, uint16_t *read_val)
Definition: ad7091r8.c:539
no_os_field_get
uint32_t no_os_field_get(uint32_t mask, uint32_t word)
ad7091r8_dev::sleep_mode
enum ad7091r8_sleep_mode sleep_mode
Definition: ad7091r8.h:185
ad7091r8_set_limit
int ad7091r8_set_limit(struct ad7091r8_dev *dev, enum ad7091r8_limit limit, uint8_t channel, uint16_t value)
Definition: ad7091r8.c:258
NO_OS_BIT
#define NO_OS_BIT(x)
Definition: no_os_util.h:51
no_os_free
void no_os_free(void *ptr)
Deallocate memory previously allocated by a call to no_os_calloc or no_os_malloc.
Definition: chibios_alloc.c:75
AD7091R8
@ AD7091R8
Definition: ad7091r8.h:95
AD7091R8_REG_CONF
#define AD7091R8_REG_CONF
Definition: ad7091r8.h:62
ad7091r8_reset
int ad7091r8_reset(struct ad7091r8_dev *dev, bool is_software)
Initiate a software reset or hardware reset through the RESET pin.
Definition: ad7091r8.c:352
ad7091r8_spi_reg_write
int ad7091r8_spi_reg_write(struct ad7091r8_dev *dev, uint8_t reg_addr, uint16_t reg_data)
Definition: ad7091r8.c:75
no_os_udelay
void no_os_udelay(uint32_t usecs)
Wait until usecs microseconds passed.
Definition: aducm3029_delay.c:120
ad7091r8_init_param::spi_init
struct no_os_spi_init_param * spi_init
Definition: ad7091r8.h:190
ad7091r8_get_alert
int ad7091r8_get_alert(struct ad7091r8_dev *dev, uint8_t channel, enum ad7091r8_alert_type *alert)
Definition: ad7091r8.c:290
no_os_gpio_set_value
int32_t no_os_gpio_set_value(struct no_os_gpio_desc *desc, uint8_t value)
Set the value of the specified GPIO.
Definition: no_os_gpio.c:203
init_param
struct ad7616_init_param init_param
Definition: ad7616_sdz.c:119
AD7091R8_SLEEP_MODE_2
@ AD7091R8_SLEEP_MODE_2
Definition: ad7091r8.h:115
ad7091r8_init
int ad7091r8_init(struct ad7091r8_dev **device, struct ad7091r8_init_param *init_param)
Definition: ad7091r8.c:386
AD7091R8_REG_CH_HIGH_LIMIT
#define AD7091R8_REG_CH_HIGH_LIMIT(ch)
Definition: ad7091r8.h:65
AD7091R8_REG_ADDR_MSK
#define AD7091R8_REG_ADDR_MSK
Definition: ad7091r8.h:87
AD7091R8_HYSTERESIS
@ AD7091R8_HYSTERESIS
Definition: ad7091r8.h:154
ad7091r8_set_gpo0_mode
int ad7091r8_set_gpo0_mode(struct ad7091r8_dev *dev, enum ad7091r8_gpo0_mode mode, bool is_cmos)
Definition: ad7091r8.c:235
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:122
ad7091r8_alert_type
ad7091r8_alert_type
Alert status.
Definition: ad7091r8.h:161
no_os_gpio.h
Header file of GPIO Interface.
AD7091R8_SLEEP_MODE_0
@ AD7091R8_SLEEP_MODE_0
Definition: ad7091r8.h:111
ad7091r8_init_param::gpio_reset
struct no_os_gpio_init_param * gpio_reset
Definition: ad7091r8.h:196
AD7091R8_GPO0_ENABLED
@ AD7091R8_GPO0_ENABLED
Definition: ad7091r8.h:137
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:58
AD7091R8_LOW_LIMIT
@ AD7091R8_LOW_LIMIT
Definition: ad7091r8.h:150
no_os_get_unaligned_be16
uint16_t no_os_get_unaligned_be16(uint8_t *buf)
ad7091r8_read_one
int ad7091r8_read_one(struct ad7091r8_dev *dev, uint8_t chan, uint16_t *read_val)
Definition: ad7091r8.c:515
ad7091r8_set_channel
int ad7091r8_set_channel(struct ad7091r8_dev *dev, uint8_t channel)
Definition: ad7091r8.c:490
no_os_util.h
Header file of utility functions.
ad7091r8_spi_reg_read
int ad7091r8_spi_reg_read(struct ad7091r8_dev *dev, uint8_t reg_addr, uint16_t *reg_data)
Definition: ad7091r8.c:103
ad7091r8_init
int ad7091r8_init(struct ad7091r8_dev **device, struct ad7091r8_init_param *init_param)
Definition: ad7091r8.c:386
ad7091r8_gpo0_mode
ad7091r8_gpo0_mode
Port 0 configuration.
Definition: ad7091r8.h:135
REG_CONF_GPO1_MASK
#define REG_CONF_GPO1_MASK
Definition: ad7091r5.h:74
no_os_gpio_direction_output
int32_t no_os_gpio_direction_output(struct no_os_gpio_desc *desc, uint8_t value)
Enable the output direction of the specified GPIO.
Definition: no_os_gpio.c:153
ad7091r8_pulse_convst
int ad7091r8_pulse_convst(struct ad7091r8_dev *dev)
Definition: ad7091r8.c:54
ad7091r8_spi_reg_read
int ad7091r8_spi_reg_read(struct ad7091r8_dev *dev, uint8_t reg_addr, uint16_t *reg_data)
Definition: ad7091r8.c:103
ad7091r8_spi_write_mask
int ad7091r8_spi_write_mask(struct ad7091r8_dev *dev, uint8_t reg_addr, uint16_t mask, uint16_t data)
Definition: ad7091r8.c:154
ad7091r8_init_param::vref_mv
int vref_mv
Definition: ad7091r8.h:192
AD7091R8_NO_ALERT
@ AD7091R8_NO_ALERT
Definition: ad7091r8.h:163
ad7091r8_set_gpo0_mode
int ad7091r8_set_gpo0_mode(struct ad7091r8_dev *dev, enum ad7091r8_gpo0_mode mode, bool is_cmos)
Definition: ad7091r8.c:235
ad7091r8_port
ad7091r8_port
Converter general purpose outputs.
Definition: ad7091r8.h:124
ad7091r8_dev::vref_mv
int vref_mv
Definition: ad7091r8.h:175
ad7091r8_read_one
int ad7091r8_read_one(struct ad7091r8_dev *dev, uint8_t channel, uint16_t *read_val)
Definition: ad7091r8.c:515
errno.h
Error macro definition for ARM Compiler.
AD7091R8_REG_CH_LOW_LIMIT
#define AD7091R8_REG_CH_LOW_LIMIT(ch)
Definition: ad7091r8.h:64
no_os_spi_init_param
Structure holding the parameters for SPI initialization.
Definition: no_os_spi.h:131
no_os_gpio_get_optional
int32_t no_os_gpio_get_optional(struct no_os_gpio_desc **desc, const struct no_os_gpio_init_param *param)
Get the value of an optional GPIO.
Definition: no_os_gpio.c:81