ina3221.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2019 Otto-von-Guericke-Universität Magdeburg
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v2.1. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
9 #pragma once
10 
72 #include <assert.h>
73 #include <errno.h>
74 #include <stdint.h>
75 #include <stdbool.h>
76 
77 #include "kernel_defines.h"
78 #include "periph/gpio.h"
79 #include "periph/i2c.h"
80 
81 #ifdef __cplusplus
82 extern "C" {
83 #endif
84 
88 #define INA3221_NUM_CH (3)
92 #define INA3221_NUM_ALERTS (4)
93 
98 typedef void (*ina3221_alert_cb_t)(void *arg);
99 
103 typedef enum ina3221_dev_addr {
109 
113 typedef enum ina3221_channel {
114  INA3221_CH1 = (1U << 0),
115  INA3221_CH2 = (1U << 1),
116  INA3221_CH3 = (1U << 2)
118 
122 typedef enum ina3221_alert {
126  INA3221_ALERT_PV = 3
128 
132 typedef enum ina3221_mode {
145 #define INA3221_MODE_MASK (0x0007)
146 
163 #define INA3221_CONV_TIME_SADC_MASK (0x0038)
164 
181 #define INA3221_CONV_TIME_BADC_MASK (0x01C0)
182 
186 typedef enum ina3221_num_samples {
194  INA3221_NUM_SAMPLES_1024 = 0x0E00
199 #define INA3221_NUM_SAMPLES_MASK (0x0E00)
200 
204 typedef enum ina3221_enable_ch {
207  INA3221_ENABLE_CH3 = 0x1000
212 #define INA3221_ENABLE_CH_MASK (INA3221_ENABLE_CH1 \
213  | INA3221_ENABLE_CH2 \
214  | INA3221_ENABLE_CH3)
215 
219 typedef enum ina3221_enable_sum_ch {
222  INA3221_ENABLE_SUM_CH3 = 0x1000
227 #define INA3221_ENABLE_SUM_CH_MASK (INA3221_ENABLE_SUM_CH1 \
228  | INA3221_ENABLE_SUM_CH2 \
229  | INA3221_ENABLE_SUM_CH3)
230 
234 typedef enum ina3221_enable_latch {
236  INA3221_ENABLE_CRIT_LATCH = 0x0400
241 #define INA3221_ENABLE_LATCH_MASK (INA3221_ENABLE_WARN_LATCH \
242  | INA3221_ENABLE_CRIT_LATCH)
243 
247 typedef unsigned ina3221_ch_t;
248 
252 typedef struct {
254  uint8_t addr;
255  union {
256  struct {
257  gpio_t pin_warn;
258  gpio_t pin_crit;
259  gpio_t pin_tc;
260  gpio_t pin_pv;
261  } pins;
262  struct {
263  gpio_t alert_pins[INA3221_NUM_ALERTS];
264  } apins;
265  } upins;
266  /*
267  For each pin 1 bit states whether to use internal pull up resistors.
268  d = don´t care
269  [d][d][d][d][pu PV][pu TC][pu CRT][pu WRN]
270  */
271  uint8_t gpio_config;
272  uint16_t config;
273  uint16_t rshunt_mohm[INA3221_NUM_CH];
275 
276 /* ( INA3221_ENABLE_CH_1
277  | INA3221_ENABLE_CH_2
278  | INA3221_ENABLE_CH_2
279  | INA3221_NUM_SAMPLES_1
280  | INA3221_CONV_TIME_BADC_1100US
281  | INA3221_CONV_TIME_SADC_1100US
282  | INA3221_MODE_CONTINUOUS_SHUNT_BUS ) */
283 #define INA3221_DEFCONFIG (0x7127)
285 #define INA3221_RESET (0x8000)
287 #define INA3221_FLAG_CRIT_ALERT_CH1 (0x0200)
288 #define INA3221_FLAG_CRIT_ALERT_CH2 (0x0100)
289 #define INA3221_FLAG_CRIT_ALERT_CH3 (0x0080)
291 #define INA3221_FLAG_SHUNT_SUM_ALERT (0x0040)
293 #define INA3221_FLAG_WARN_ALERT_CH1 (0x0020)
294 #define INA3221_FLAG_WARN_ALERT_CH2 (0x0010)
295 #define INA3221_FLAG_WARN_ALERT_CH3 (0x0008)
297 #define INA3221_FLAG_POWER_VALID (0x0004)
299 #define INA3221_FLAG_TIMING_CONTROL (0x0002)
301 #define INA3221_FLAG_CONV_READY (0x0001)
306 #define INA3221_FLAGS_MASK (INA3221_FLAG_CRIT_ALERT_CH1 \
307  | INA3221_FLAG_CRIT_ALERT_CH2 \
308  | INA3221_FLAG_CRIT_ALERT_CH3 \
309  | INA3221_FLAG_SHUNT_SUM_ALERT \
310  | INA3221_FLAG_WARN_ALERT_CH1 \
311  | INA3221_FLAG_WARN_ALERT_CH2 \
312  | INA3221_FLAG_WARN_ALERT_CH3 \
313  | INA3221_FLAG_POWER_VALID \
314  | INA3221_FLAG_TIMING_CONTROL \
315  | INA3221_FLAG_CONV_READY)
316 
320 typedef struct {
322 #if IS_USED(MODULE_INA3221_ALERTS) || defined(DOXYGEN)
323  union {
324  struct {
329  };
330  struct {
332  };
333  };
334  union {
335  struct {
336  void *arg_warn_cb;
337  void *arg_crit_cb;
338  void *arg_tc_cb;
339  void *arg_pv_cb;
340  };
341  struct {
342  void *alert_callback_arguments[INA3221_NUM_ALERTS];
343  };
344  };
345 #endif /* MODULE_INA3221_ALERTS */
346 } ina3221_t;
347 
360 
376 int ina3221_init(ina3221_t *dev, const ina3221_params_t *params);
377 
378 #if IS_USED(MODULE_INA3221_ALERTS) || defined(DOXYGEN)
392  ina3221_alert_cb_t cb, void *arg);
393 
406  void *arg)
407 {
408  return ina3221_enable_alert(dev, INA3221_ALERT_WRN, cb, arg);
409 }
410 
423  void *arg)
424 {
425  return ina3221_enable_alert(dev, INA3221_ALERT_CRT, cb, arg);
426 }
427 
440  void *arg)
441 {
442  return ina3221_enable_alert(dev, INA3221_ALERT_TC, cb, arg);
443 }
444 
457  void *arg)
458 {
459  return ina3221_enable_alert(dev, INA3221_ALERT_PV, cb, arg);
460 }
461 
473 
483 {
485 }
486 
496 {
498 }
499 
509 {
511 }
512 
522 {
524 }
525 
526 #endif /* MODULE_INA3221_ALERTS */
527 
536 {
537  return ((cfg & INA3221_ENABLE_CH1) ? INA3221_CH1 : 0) |
538  ((cfg & INA3221_ENABLE_CH2) ? INA3221_CH2 : 0) |
539  ((cfg & INA3221_ENABLE_CH3) ? INA3221_CH3 : 0);
540 }
541 
548 static inline void ina3221_config_set_enabled_channels(uint16_t *cfg, ina3221_ch_t ch)
549 {
550  assert(cfg);
551  uint16_t u16 = ((ch & INA3221_CH1) ? INA3221_ENABLE_CH1 : 0) |
552  ((ch & INA3221_CH2) ? INA3221_ENABLE_CH2 : 0) |
553  ((ch & INA3221_CH3) ? INA3221_ENABLE_CH3 : 0);
554  *cfg &= ~INA3221_ENABLE_CH_MASK;
555  *cfg |= (u16 & INA3221_ENABLE_CH_MASK);
556 }
557 
566 {
568 }
569 
576 static inline void ina3221_config_set_num_samples(uint16_t *cfg,
578 {
579  assert(cfg);
580  uint16_t u16 = (uint16_t)ns;
581  *cfg &= ~INA3221_NUM_SAMPLES_MASK;
582  *cfg |= (u16 & INA3221_NUM_SAMPLES_MASK);
583 }
584 
593 {
595 }
596 
603 static inline void ina3221_config_set_conv_time_bus(uint16_t *cfg,
605 {
606  assert(cfg);
607  uint16_t u16 = (uint16_t)bus;
609  *cfg |= (u16 & INA3221_CONV_TIME_BADC_MASK);
610 }
611 
620 {
622 }
623 
630 static inline void ina3221_config_set_conv_time_shunt(uint16_t *cfg,
632 {
633  assert(cfg);
634  uint16_t u16 = (uint16_t)shunt;
636  *cfg |= (u16 & INA3221_CONV_TIME_SADC_MASK);
637 }
638 
646 static inline ina3221_mode_t ina3221_config_get_mode(uint16_t cfg)
647 {
648  return (ina3221_mode_t)(cfg & INA3221_MODE_MASK);
649 }
650 
657 static inline void ina3221_config_set_mode(uint16_t *cfg,
658  ina3221_mode_t mode)
659 {
660  assert(cfg);
661  uint16_t u16 = (uint16_t)mode;
662  *cfg &= ~INA3221_MODE_MASK;
663  *cfg |= (u16 & INA3221_MODE_MASK);
664 }
665 
676 int ina3221_set_config(ina3221_t *dev, uint16_t cfg);
677 
688 int ina3221_get_config(const ina3221_t *dev, uint16_t *cfg);
689 
702 
709 static inline void ina3221_get_enable_channel(const ina3221_t *dev,
710  ina3221_ch_t *ch)
711 {
713 }
714 
727 
734 static inline void ina3221_get_num_samples(const ina3221_t *dev,
736 {
738 }
739 
753 
760 static inline void ina3221_get_conv_time_bus_adc(const ina3221_t *dev,
762 {
764 }
765 
779 
786 static inline void ina3221_get_conv_time_shunt_adc(const ina3221_t *dev,
788 {
790 }
791 
804 
811 static inline void ina3221_get_mode(const ina3221_t *dev, ina3221_mode_t *mode)
812 {
813  *mode = ina3221_config_get_mode(dev->params.config);
814 }
815 
831 
843 
856 int ina3221_set_latch(const ina3221_t *dev, bool warn, bool crit);
857 
869 int ina3221_get_latch(const ina3221_t *dev, bool *warn, bool *crit);
870 
881  ina3221_ch_t ch, int32_t in_uv);
882 
893  int32_t out_uv[INA3221_NUM_CH]);
894 
905  ina3221_ch_t ch, int32_t in_uv);
906 
917  int32_t out_uv[INA3221_NUM_CH]);
918 
931  int32_t in_uv);
932 
944  int32_t *out_uv);
945 
957 int ina3221_set_power_valid_upper_limit(const ina3221_t *dev, int32_t in_mv);
958 
969 int ina3221_get_power_valid_upper_limit(const ina3221_t *dev, int32_t *out_mv);
970 
982 int ina3221_set_power_valid_lower_limit(const ina3221_t *dev, int32_t in_mv);
983 
994 int ina3221_get_power_valid_lower_limit(const ina3221_t *dev, int32_t *out_mv);
995 
1006 int ina3221_read_flags(const ina3221_t *dev, uint16_t *flags);
1007 
1019 int ina3221_read_shunt_sum_uv(const ina3221_t *dev, int32_t *out_uv,
1020  uint16_t *flags);
1021 
1032  int32_t out_uv[INA3221_NUM_CH],
1033  uint16_t *flags);
1034 
1045  int16_t out_mv[INA3221_NUM_CH],
1046  uint16_t *flags);
1047 
1057  const uint16_t in_mohm[INA3221_NUM_CH],
1058  const int32_t in_uv[INA3221_NUM_CH],
1059  int32_t out_ua[INA3221_NUM_CH]);
1060 
1070  const int16_t in_mv[INA3221_NUM_CH],
1071  const int32_t in_ua[INA3221_NUM_CH],
1072  int32_t out_mw[INA3221_NUM_CH]);
1073 
1080 #define INA3221_TRIGGER_SHUNT(dev) \
1081  ina3221_set_mode(dev, INA3221_MODE_TRIGGER_SHUNT_ONLY)
1082 
1089 #define INA3221_TRIGGER_BUS(dev) \
1090  ina3221_set_mode(dev, INA3221_MODE_TRIGGER_BUS_ONLY)
1091 
1098 #define INA3221_TRIGGER_SHUNT_AND_BUS(dev) \
1099  ina3221_set_mode(dev, INA3221_MODE_TRIGGER_SHUNT_BUS)
1100 
1101 #ifdef __cplusplus
1102 }
1103 #endif
1104 
POSIX.1-2008 compliant version of the assert macro.
#define assert(cond)
abort the program if assertion is false
Definition: assert.h:135
Low-level GPIO peripheral driver interface definitions.
ina3221_ch_t ina3221_set_crit_alert_limit(const ina3221_t *dev, ina3221_ch_t ch, int32_t in_uv)
Set critical shunt voltage alert limit to in_uv for each channel in ch.
static void ina3221_get_num_samples(const ina3221_t *dev, ina3221_num_samples_t *ns)
Read currently applied number of samples.
Definition: ina3221.h:734
int ina3221_set_config(ina3221_t *dev, uint16_t cfg)
Write configuration register value to configuration register.
int ina3221_set_power_valid_upper_limit(const ina3221_t *dev, int32_t in_mv)
Set bus voltage power valid upper limit to in_mv.
ina3221_ch_t ina3221_get_crit_alert_limit(const ina3221_t *dev, ina3221_ch_t ch, int32_t out_uv[INA3221_NUM_CH])
Read critical shunt voltage alert limit for each channel in ch.
unsigned ina3221_ch_t
Flags ina3221_channel_t.
Definition: ina3221.h:247
int ina3221_enable_alert(ina3221_t *dev, ina3221_alert_t alert, ina3221_alert_cb_t cb, void *arg)
Enable alert and set callback and argument for alert alert.
ina3221_mode
Device operation modes.
Definition: ina3221.h:132
ina3221_num_samples
Number of samples to calculate average shunt/bus voltage value.
Definition: ina3221.h:186
static ina3221_conv_time_shunt_adc_t ina3221_config_get_conv_time_shunt(uint16_t cfg)
Get shunt voltage conversion time from configuration value.
Definition: ina3221.h:619
ina3221_conv_time_shunt_adc
ADC shunt voltage conversion times.
Definition: ina3221.h:150
#define INA3221_NUM_SAMPLES_MASK
Number of samples to calculate average shunt/bus voltage value bit mask.
Definition: ina3221.h:199
int ina3221_set_mode(ina3221_t *dev, ina3221_mode_t mode)
Update device operation mode.
static void ina3221_get_conv_time_bus_adc(const ina3221_t *dev, ina3221_conv_time_bus_adc_t *ctb)
Read currently applied bus voltage ADC conversion time.
Definition: ina3221.h:760
ina3221_ch_t ina3221_read_bus_mv(const ina3221_t *dev, int16_t out_mv[INA3221_NUM_CH], uint16_t *flags)
Read bus voltages for each channel in ch.
#define INA3221_CONV_TIME_SADC_MASK
ADC shunt voltage conversion times bit mask.
Definition: ina3221.h:163
static int ina3221_enable_warning_alert(ina3221_t *dev, ina3221_alert_cb_t cb, void *arg)
Wrapper around ina3221_enable_alert, to enable warning alert.
Definition: ina3221.h:404
int ina3221_get_enable_sum_channel(const ina3221_t *dev, ina3221_ch_t *ch)
Read enabled channels for shunt voltage sum calculation.
ina3221_ch_t ina3221_get_warn_alert_limit(const ina3221_t *dev, ina3221_ch_t ch, int32_t out_uv[INA3221_NUM_CH])
Read warning shunt voltage alert limit for each channel in ch.
enum ina3221_enable_ch ina3221_enable_ch_t
Enable channel flags.
ina3221_dev_addr
I2C device addresses.
Definition: ina3221.h:103
int ina3221_set_enable_channel(ina3221_t *dev, ina3221_ch_t ch)
Enable channels.
static ina3221_mode_t ina3221_config_get_mode(uint16_t cfg)
Get operation mode from configuration value.
Definition: ina3221.h:646
ina3221_alert
Alert indices.
Definition: ina3221.h:122
ina3221_enable_ch
Enable channel flags.
Definition: ina3221.h:204
enum ina3221_alert ina3221_alert_t
Alert indices.
int ina3221_get_shunt_voltage_sum_alert_limit(const ina3221_t *dev, int32_t *out_uv)
Read shunt voltage sum alert limit.
ina3221_conv_time_bus_adc
ADC bus voltage conversion times.
Definition: ina3221.h:168
enum ina3221_mode ina3221_mode_t
Device operation modes.
int ina3221_set_num_samples(ina3221_t *dev, ina3221_num_samples_t ns)
Update number of samples and write to configuration register.
static void ina3221_config_set_conv_time_shunt(uint16_t *cfg, ina3221_conv_time_shunt_adc_t shunt)
Set shunt voltage conversion time in configuration value.
Definition: ina3221.h:630
static ina3221_num_samples_t ina3221_config_get_num_samples(uint16_t cfg)
Get number of samples from configuration value.
Definition: ina3221.h:565
static void ina3221_get_enable_channel(const ina3221_t *dev, ina3221_ch_t *ch)
Read which channels are currently enabled.
Definition: ina3221.h:709
enum ina3221_conv_time_shunt_adc ina3221_conv_time_shunt_adc_t
ADC shunt voltage conversion times.
static ina3221_conv_time_bus_adc_t ina3221_config_get_conv_time_bus(uint16_t cfg)
Get bus voltage conversion time from configuration value.
Definition: ina3221.h:592
#define INA3221_NUM_CH
Number of channels.
Definition: ina3221.h:88
static void ina3221_config_set_conv_time_bus(uint16_t *cfg, ina3221_conv_time_bus_adc_t bus)
Set bus voltage conversion time in configuration value.
Definition: ina3221.h:603
int ina3221_set_latch(const ina3221_t *dev, bool warn, bool crit)
Enable latches for critical/warning alert pins.
#define INA3221_NUM_ALERTS
Number of alerts.
Definition: ina3221.h:92
#define INA3221_CONV_TIME_BADC_MASK
ADC bus voltage conversion times bit mask.
Definition: ina3221.h:181
int ina3221_read_shunt_sum_uv(const ina3221_t *dev, int32_t *out_uv, uint16_t *flags)
Read sum of shunt voltages.
static int ina3221_disable_power_valid_alert(ina3221_t *dev)
Wrapper around ina3221_disable_alert, to disable power valid alert.
Definition: ina3221.h:521
void ina3221_calculate_current_ua(ina3221_ch_t ch, const uint16_t in_mohm[INA3221_NUM_CH], const int32_t in_uv[INA3221_NUM_CH], int32_t out_ua[INA3221_NUM_CH])
Calculate current for each channel in ch.
int ina3221_disable_alert(ina3221_t *dev, ina3221_alert_t alert)
Disable alert alert.
enum ina3221_num_samples ina3221_num_samples_t
Number of samples to calculate average shunt/bus voltage value.
ina3221_enable_sum_ch
Enable shunt voltage sum calculation channel flags.
Definition: ina3221.h:219
static int ina3221_disable_critical_alert(ina3221_t *dev)
Wrapper around ina3221_disable_alert, to disable critical alert.
Definition: ina3221.h:495
int ina3221_get_latch(const ina3221_t *dev, bool *warn, bool *crit)
Read enabled latches for critical/warning alert pins.
enum ina3221_conv_time_bus_adc ina3221_conv_time_bus_adc_t
ADC bus voltage conversion times.
int ina3221_init(ina3221_t *dev, const ina3221_params_t *params)
Initialize device.
static int ina3221_enable_power_valid_alert(ina3221_t *dev, ina3221_alert_cb_t cb, void *arg)
Wrapper around ina3221_enable_alert, to enable power valid alert.
Definition: ina3221.h:455
enum ina3221_dev_addr ina3221_dev_addr_t
I2C device addresses.
int ina3221_get_power_valid_lower_limit(const ina3221_t *dev, int32_t *out_mv)
Read bus voltage power valid lower limit.
int ina3221_read_flags(const ina3221_t *dev, uint16_t *flags)
Read status flags.
int ina3221_set_enable_sum_channel(const ina3221_t *dev, ina3221_ch_t ch)
Enable channels for shunt voltage sum calculation.
enum ina3221_enable_latch ina3221_enable_latch_t
Enable latch flags.
static int ina3221_disable_warning_alert(ina3221_t *dev)
Wrapper around ina3221_disable_alert, to disable warning alert.
Definition: ina3221.h:482
ina3221_ch_t ina3221_set_warn_alert_limit(const ina3221_t *dev, ina3221_ch_t ch, int32_t in_uv)
Set warning shunt voltage alert limit to in_uv for each channel in ch.
ina3221_ch_t ina3221_read_shunt_uv(const ina3221_t *dev, int32_t out_uv[INA3221_NUM_CH], uint16_t *flags)
Read shunt voltages for each channel in ch.
ina3221_channel
Channel flags.
Definition: ina3221.h:113
static int ina3221_enable_critical_alert(ina3221_t *dev, ina3221_alert_cb_t cb, void *arg)
Wrapper around ina3221_enable_alert, to enable critical alert.
Definition: ina3221.h:421
void(* ina3221_alert_cb_t)(void *arg)
INA3221 alert callback for alert pins CRT, WRN, TC, PV.
Definition: ina3221.h:98
ina3221_enable_latch
Enable latch flags.
Definition: ina3221.h:234
static void ina3221_get_mode(const ina3221_t *dev, ina3221_mode_t *mode)
Read currently applied device operation mode.
Definition: ina3221.h:811
int ina3221_set_shunt_voltage_sum_alert_limit(const ina3221_t *dev, int32_t in_uv)
Set shunt voltage sum alert limit to in_uv.
enum ina3221_enable_sum_ch ina3221_enable_sum_ch_t
Enable shunt voltage sum calculation channel flags.
int ina3221_get_config(const ina3221_t *dev, uint16_t *cfg)
Read currently saved configuration register value.
static int ina3221_disable_timing_control_alert(ina3221_t *dev)
Wrapper around ina3221_disable_alert, to disable timing control alert.
Definition: ina3221.h:508
int ina3221_get_power_valid_upper_limit(const ina3221_t *dev, int32_t *out_mv)
Read bus voltage power valid upper limit.
#define INA3221_ENABLE_CH_MASK
Enable channel bit mask.
Definition: ina3221.h:212
int ina3221_reset(ina3221_t *dev)
Reset device, i.e.
static void ina3221_config_set_enabled_channels(uint16_t *cfg, ina3221_ch_t ch)
Enable measurement channels in configuration value.
Definition: ina3221.h:548
enum ina3221_channel ina3221_channel_t
Channel flags.
static int ina3221_enable_timing_control_alert(ina3221_t *dev, ina3221_alert_cb_t cb, void *arg)
Wrapper around ina3221_enable_alert, to enable timing control alert.
Definition: ina3221.h:438
int ina3221_set_conv_time_shunt_adc(ina3221_t *dev, ina3221_conv_time_shunt_adc_t cts)
Update conversion time of shunt voltage ADC and write to configuration register.
int ina3221_set_conv_time_bus_adc(ina3221_t *dev, ina3221_conv_time_bus_adc_t ctb)
Update conversion time of bus voltage ADC and write to configuration register.
void ina3221_calculate_power_uw(ina3221_ch_t ch, const int16_t in_mv[INA3221_NUM_CH], const int32_t in_ua[INA3221_NUM_CH], int32_t out_mw[INA3221_NUM_CH])
Calculate power from bus voltage and current values.
#define INA3221_MODE_MASK
Device operation mode bit mask.
Definition: ina3221.h:145
static ina3221_ch_t ina3221_config_get_enabled_channels(uint16_t cfg)
Get enabled measurement channels from configuration value.
Definition: ina3221.h:535
int ina3221_set_power_valid_lower_limit(const ina3221_t *dev, int32_t in_mv)
Set bus voltage power valid lower limit to in_mv.
static void ina3221_get_conv_time_shunt_adc(const ina3221_t *dev, ina3221_conv_time_shunt_adc_t *cts)
Read currently applied shunt voltage ADC conversion time.
Definition: ina3221.h:786
static void ina3221_config_set_mode(uint16_t *cfg, ina3221_mode_t mode)
Set operation mode in configuration value.
Definition: ina3221.h:657
static void ina3221_config_set_num_samples(uint16_t *cfg, ina3221_num_samples_t ns)
Set number of samples in configuration value.
Definition: ina3221.h:576
@ INA3221_MODE_CONTINUOUS_SHUNT_ONLY
Continuous shunt voltage measurement only.
Definition: ina3221.h:138
@ INA3221_MODE_CONTINUOUS_SHUNT_BUS
Continuous shunt and bus voltage measurement.
Definition: ina3221.h:140
@ INA3221_MODE_POWER_DOWN
Sleep mode.
Definition: ina3221.h:133
@ INA3221_MODE_TRIGGER_BUS_ONLY
Trigger bus voltage measurement only.
Definition: ina3221.h:135
@ INA3221_MODE_TRIGGER_SHUNT_BUS
Trigger shunt and bus voltage measurement.
Definition: ina3221.h:136
@ INA3221_MODE_TRIGGER_SHUNT_ONLY
Trigger shunt voltage measurement only.
Definition: ina3221.h:134
@ INA3221_MODE_CONTINUOUS_BUS_ONLY
Continuous bus voltage measurement only.
Definition: ina3221.h:139
@ INA3221_MODE_POWER_DOWN_
Also power down (see datasheet)
Definition: ina3221.h:137
@ INA3221_NUM_SAMPLES_4
4
Definition: ina3221.h:188
@ INA3221_NUM_SAMPLES_64
64
Definition: ina3221.h:190
@ INA3221_NUM_SAMPLES_16
16
Definition: ina3221.h:189
@ INA3221_NUM_SAMPLES_128
128
Definition: ina3221.h:191
@ INA3221_NUM_SAMPLES_1024
1024
Definition: ina3221.h:194
@ INA3221_NUM_SAMPLES_1
1
Definition: ina3221.h:187
@ INA3221_NUM_SAMPLES_512
512
Definition: ina3221.h:193
@ INA3221_NUM_SAMPLES_256
256
Definition: ina3221.h:192
@ INA3221_CONV_TIME_SADC_332US
332 us
Definition: ina3221.h:153
@ INA3221_CONV_TIME_SADC_204US
204 us
Definition: ina3221.h:152
@ INA3221_CONV_TIME_SADC_4156US
4156 us
Definition: ina3221.h:157
@ INA3221_CONV_TIME_SADC_140US
140 us
Definition: ina3221.h:151
@ INA3221_CONV_TIME_SADC_1100US
1100 us
Definition: ina3221.h:155
@ INA3221_CONV_TIME_SADC_588US
588 us
Definition: ina3221.h:154
@ INA3221_CONV_TIME_SADC_2116US
2116 us
Definition: ina3221.h:156
@ INA3221_CONV_TIME_SADC_8244US
8244 us
Definition: ina3221.h:158
@ INA3221_ADDR_00
A0 connected to GND.
Definition: ina3221.h:104
@ INA3221_ADDR_11
A0 connected to SCL.
Definition: ina3221.h:107
@ INA3221_ADDR_10
A0 connected to SDA.
Definition: ina3221.h:106
@ INA3221_ADDR_01
A0 connected to VS
Definition: ina3221.h:105
@ INA3221_ALERT_WRN
Warning alert.
Definition: ina3221.h:123
@ INA3221_ALERT_TC
Timing control.
Definition: ina3221.h:125
@ INA3221_ALERT_CRT
Critical alert.
Definition: ina3221.h:124
@ INA3221_ALERT_PV
Power valid alert.
Definition: ina3221.h:126
@ INA3221_ENABLE_CH3
Enable channel 3.
Definition: ina3221.h:207
@ INA3221_ENABLE_CH2
Enable channel 2.
Definition: ina3221.h:206
@ INA3221_ENABLE_CH1
Enable channel 1.
Definition: ina3221.h:205
@ INA3221_CONV_TIME_BADC_4156US
4156 us
Definition: ina3221.h:175
@ INA3221_CONV_TIME_BADC_140US
140 us
Definition: ina3221.h:169
@ INA3221_CONV_TIME_BADC_2116US
2116 us
Definition: ina3221.h:174
@ INA3221_CONV_TIME_BADC_204US
204 us
Definition: ina3221.h:170
@ INA3221_CONV_TIME_BADC_332US
332 us
Definition: ina3221.h:171
@ INA3221_CONV_TIME_BADC_1100US
1100 us
Definition: ina3221.h:173
@ INA3221_CONV_TIME_BADC_8244US
8244 us
Definition: ina3221.h:176
@ INA3221_CONV_TIME_BADC_588US
588 us
Definition: ina3221.h:172
@ INA3221_ENABLE_SUM_CH1
Enable sum channel 1.
Definition: ina3221.h:220
@ INA3221_ENABLE_SUM_CH2
Enable sum channel 2.
Definition: ina3221.h:221
@ INA3221_ENABLE_SUM_CH3
Enable sum channel 3.
Definition: ina3221.h:222
@ INA3221_CH3
Channel 3.
Definition: ina3221.h:116
@ INA3221_CH1
Channel 1.
Definition: ina3221.h:114
@ INA3221_CH2
Channel 2.
Definition: ina3221.h:115
@ INA3221_ENABLE_WARN_LATCH
Enable warning alert latch.
Definition: ina3221.h:235
@ INA3221_ENABLE_CRIT_LATCH
Enable critical alert latch.
Definition: ina3221.h:236
uint_fast8_t i2c_t
Default i2c_t type definition.
Definition: i2c.h:144
Low-level I2C peripheral driver interface definition.
Common macros and compiler attributes/pragmas configuration.
INA3221 device parameters.
Definition: ina3221.h:252
gpio_t pin_warn
Warning alert pin, becomes configured as input.
Definition: ina3221.h:257
gpio_t pin_crit
Critical alert pin, becomes configured as input.
Definition: ina3221.h:258
uint8_t gpio_config
Configure pull up resistors for gpio pins.
Definition: ina3221.h:271
i2c_t i2c
I2C bus.
Definition: ina3221.h:253
uint8_t addr
I2C address.
Definition: ina3221.h:254
gpio_t pin_pv
Power valid alert pin, becomes configured as input.
Definition: ina3221.h:260
uint16_t config
Configuration.
Definition: ina3221.h:272
gpio_t pin_tc
Timing control alert pin, becomes configured as input.
Definition: ina3221.h:259
INA3221 device handle struct.
Definition: ina3221.h:320
void * arg_crit_cb
Argument for Critical alert callback.
Definition: ina3221.h:337
ina3221_params_t params
Device parameters.
Definition: ina3221.h:321
ina3221_alert_cb_t pv_cb
Power Valid alert callback: executed when PV is pulled low.
Definition: ina3221.h:328
ina3221_alert_cb_t warn_cb
Warning alert callback: executed when WRN is pulled low.
Definition: ina3221.h:325
void * arg_warn_cb
Argument for Warning alert callback.
Definition: ina3221.h:336
ina3221_alert_cb_t crit_cb
Critical alert callback: executed when CRT is pulled low.
Definition: ina3221.h:326
void * arg_pv_cb
Argument for Power Valid alert callback.
Definition: ina3221.h:339
ina3221_alert_cb_t tc_cb
Timing control alert callback: executed when TC is pulled low.
Definition: ina3221.h:327
void * arg_tc_cb
Argument for Timing control alert callback.
Definition: ina3221.h:338