no-OS
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
ade7758.h File Reference

Header file of ADE7758 Driver. More...

#include <stdbool.h>
#include <stdint.h>
#include <string.h>
#include "no_os_util.h"
#include "no_os_spi.h"
#include "no_os_gpio.h"
#include "no_os_irq.h"
#include "no_os_delay.h"
#include "no_os_units.h"
#include "no_os_alloc.h"
#include "no_os_crc16.h"
#include "no_os_print_log.h"
#include <stdlib.h>
#include <errno.h>
#include <math.h>
Include dependency graph for ade7758.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  ade7758_init_param
 ADE7758 Device initialization parameters. More...
 
struct  ade7758_dev
 ADE7758 Device structure. More...
 
struct  ade7758_energy_values
 ADE7758 energy registers values. More...
 
struct  ade7758_rms_values
 ADE7758 rms registers values. More...
 
struct  ade7758_freq_per_value
 ADE7758 pq values. More...
 
struct  ade7758_temp_value
 ADE7758 pq values. More...
 

Macros

#define ADE7758_SPI_READ   NO_OS_BIT(7)
 
#define ADE7758_VERSION   0x3F
 
#define ADE7758_REG_VERSION_PRODUCT   0x48
 
#define IS_7BITS_REG(x)
 
#define IS_8BITS_REG(x)
 
#define IS_12BITS_REG(x)
 
#define IS_16BITS_REG(x)
 
#define IS_24BITS_REG(x)
 
#define ADE7758_RESET_DEL   1
 
#define ADE7758_REG_AWATTHR   0x01
 
#define ADE7758_REG_BWATTHR   0x02
 
#define ADE7758_REG_CWATTHR   0x03
 
#define ADE7758_REG_AVARHR   0x04
 
#define ADE7758_REG_BVARHR   0x05
 
#define ADE7758_REG_CVARHR   0x06
 
#define ADE7758_REG_AVAHR   0x07
 
#define ADE7758_REG_BVAHR   0x08
 
#define ADE7758_REG_CVAHR   0x09
 
#define ADE7758_REG_AIRMS   0x0A
 
#define ADE7758_REG_BIRMS   0x0B
 
#define ADE7758_REG_CIRMS   0x0C
 
#define ADE7758_REG_AVRMS   0x0D
 
#define ADE7758_REG_BVRMS   0X0E
 
#define ADE7758_REG_CVRMS   0x0F
 
#define ADE7758_REG_FREQ   0x10
 
#define ADE7758_REG_TEMP   0x11
 
#define ADE7758_REG_WFORM   0x12
 
#define ADE7758_REG_OPMODE   0x13
 
#define ADE7758_REG_MMODE   0x14
 
#define ADE7758_REG_WAVMODE   0x15
 
#define ADE7758_REG_COMPMODE   0x16
 
#define ADE7758_REG_LCYCMODE   0x17
 
#define ADE7758_REG_MASK   0x18
 
#define ADE7758_REG_STATUS   0x19
 
#define ADE7758_REG_RSTATUS   0x1A
 
#define ADE7758_REG_ZXTOUT   0X1B
 
#define ADE7758_REG_LINECYC   0x1C
 
#define ADE7758_REG_SAGCYC   0x1D
 
#define ADE7758_REG_SAGLVL   0x1E
 
#define ADE7758_REG_VPINTLVL   0x1F
 
#define ADE7758_REG_IPINTLVL   0x20
 
#define ADE7758_REG_VPEAK   0x21
 
#define ADE7758_REG_IPEAK   0x22
 
#define ADE7758_REG_GAIN   0x23
 
#define ADE7758_REG_AVRMSGAIN   0x24
 
#define ADE7758_REG_BVRMSGAIN   0x25
 
#define ADE7758_REG_CVRMSGAIN   0x26
 
#define ADE7758_REG_AIGAIN   0x27
 
#define ADE7758_REG_BIGAIN   0x28
 
#define ADE7758_REG_CIGAIN   0x29
 
#define ADE7758_REG_AWG   0x2A
 
#define ADE7758_REG_BWG   0x2B
 
#define ADE7758_REG_CWG   0x2C
 
#define ADE7758_REG_AVARG   0x2D
 
#define ADE7758_REG_BVARG   0x2E
 
#define ADE7758_REG_CVARG   0x2F
 
#define ADE7758_REG_AVAG   0x30
 
#define ADE7758_REG_BVAG   0x31
 
#define ADE7758_REG_CVAG   0x32
 
#define ADE7758_REG_AVRMSOS   0x33
 
#define ADE7758_REG_BVRMSOS   0x34
 
#define ADE7758_REG_CVRMSOS   0x35
 
#define ADE7758_REG_AIRMSOS   0x36
 
#define ADE7758_REG_BIRMSOS   0x37
 
#define ADE7758_REG_CIRMSOS   0x38
 
#define ADE7758_REG_AWATTOS   0x39
 
#define ADE7758_REG_BWATTOS   0x3A
 
#define ADE7758_REG_CWATTOS   0x3B
 
#define ADE7758_REG_AVAROS   0x3C
 
#define ADE7758_REG_BVAROS   0x3D
 
#define ADE7758_REG_CVAROS   0x3E
 
#define ADE7758_REG_APHCAL   0x3F
 
#define ADE7758_REG_BPHCAL   0x40
 
#define ADE7758_REG_CPHCAL   0x41
 
#define ADE7758_REG_WDIV   0x42
 
#define ADE7758_REG_VARDIV   0x43
 
#define ADE7758_REG_VADIV   0x44
 
#define ADE7758_REG_APCFNUM   0x45
 
#define ADE7758_REG_APCFDEN   0x46
 
#define ADE7758_REG_VARCFNUM   0x47
 
#define ADE7758_REG_VARCFDEN   0x48
 
#define ADE7758_REG_CHKSUM   0x7E
 
#define ADE7758_REG_VERSION   0x7F
 
#define ADE7758_SWRST_MSK   NO_OS_BIT(6)
 
#define ADE7758_DISMOD_MSK   NO_OS_GENMASK(5, 3)
 
#define ADE7758_DISCF_MSK   NO_OS_BIT(2)
 
#define ADE7758_DISLPF_MSK   NO_OS_BIT(1)
 
#define ADE7758_DISHPF_MSK   NO_OS_BIT(0)
 
#define ADE7758_PKIRQSEL_MSK   NO_OS_GENMASK(7, 5)
 
#define ADE7758_PEAKSEL_MSK   NO_OS_GENMASK(4, 2)
 
#define ADE7758_FREQSEL_MSK   NO_OS_GENMASK(1, 0)
 
#define ADE7758_VACF_MSK   NO_OS_BIT(7)
 
#define ADE7758_DTRT_MSK   NO_OS_GENMASK(6, 5)
 
#define ADE7758_WAVSEL_MSK   NO_OS_GENMASK(4, 2)
 
#define ADE7758_PHSEL_MSK   NO_OS_GENMASK(1, 0)
 
#define ADE7758_NOLOAD_MSK   NO_OS_BIT(7)
 
#define ADE7758_SAVAR_MSK   NO_OS_BIT(6)
 
#define ADE7758_ABS_MSK   NO_OS_BIT(5)
 
#define ADE7758_TERMSEL_MSK   NO_OS_GENMASK(4, 2)
 
#define ADE7758_CONSEL_MSK   NO_OS_GENMASK(1, 0)
 
#define ADE7758_FREQSEL_MSK   NO_OS_BIT(7)
 
#define ADE7758_RSTREAD_MSK   NO_OS_BIT(6)
 
#define ADE7758_ZXSEL_MSK   NO_OS_GENMASK(5, 3)
 
#define ADE7758_LVA_MSK   NO_OS_BIT(2)
 
#define ADE7758_LVAR_MSK   NO_OS_BIT(1)
 
#define ADE7758_LWATT_MSK   NO_OS_BIT(0)
 
#define ADE7758_SEQERR_MSK   NO_OS_BIT(19)
 
#define ADE7758_REVPRP_MSK   NO_OS_BIT(18)
 
#define ADE7758_REVPAP_MSK   NO_OS_BIT(17)
 
#define ADE7758_WFSM_MSK   NO_OS_BIT(16)
 
#define ADE7758_PKI_MSK   NO_OS_BIT(15)
 
#define ADE7758_PKV_MSK   NO_OS_BIT(14)
 
#define ADE7758_RESET_MSK   NO_OS_BIT(13)
 
#define ADE7758_LENERGY_MSK   NO_OS_BIT(12)
 
#define ADE7758_ZXC_MSK   NO_OS_BIT(11)
 
#define ADE7758_ZXB_MSK   NO_OS_BIT(10)
 
#define ADE7758_ZXA_MSK   NO_OS_BIT(9)
 
#define ADE7758_ZXTOC_MSK   NO_OS_BIT(8)
 
#define ADE7758_ZXTOB_MSK   NO_OS_BIT(7)
 
#define ADE7758_ZXTOA_MSK   NO_OS_BIT(6)
 
#define ADE7758_SAGC_MSK   NO_OS_BIT(5)
 
#define ADE7758_SAGB_MSK   NO_OS_BIT(4)
 
#define ADE7758_SAGA_MSK   NO_OS_BIT(3)
 
#define ADE7758_VAEHF_MSK   NO_OS_BIT(2)
 
#define ADE7758_REHF_MSK   NO_OS_BIT(1)
 
#define ADE7758_AEHF_MSK   NO_OS_BIT(0)
 
#define ADE7758_INTEGRATOR_EN_MSK   NO_OS_BIT(7)
 
#define ADE7758_PGA2_GAIN_MSK   NO_OS_GENMASK(6, 5)
 
#define ADE7758_FULL_SCALE_MSK   NO_OS_GENMASK(4, 3)
 
#define ADE7758_PGA1_GAIN_MSK   NO_OS_GENMASK(1, 0)
 

Enumerations

enum  ade7758_dismod {
  ADE7758_NORMAL_OPERATION ,
  ADE7758_SWITCH_OFF_CURRENT_ADC ,
  ADE7758_SWITCH_OFF_VOLTAGE_ADC ,
  ADE7758_SLEEP_MODE ,
  ADE7758_SWAP_VOLTAGE_CURRENT ,
  ADE7758_OFF_CURRENT_ADCS_REDIRECTED_TO_VOLTAGE ,
  ADE7758_OFF_VOLTAGE_ADCS_REDIRECTED_TO_CURRENT ,
  ADE7758_POWER_DOWN_MODE
}
 ADE7758 ADCs can be turned off by using these bits. More...
 
enum  ade7758_phsel {
  ADE7758_PHASE_A ,
  ADE7758_PHASE_B ,
  ADE7758_PHASE_C
}
 ADE7758 select the phase of the waveform sample or the source for the voltage line frequency measurement. More...
 
enum  ade7758_wavesel {
  ADE7758_CURRENT ,
  ADE7758_VOLTAGE ,
  ADE7758_ACTIVE_POWER ,
  ADE7758_REACTIVE_POWER ,
  ADE7758_APPARENT_POWER
}
 ADE7758 select the type of waveform. More...
 
enum  ade7758_data_rate {
  ADE7758_DATA_RATE_26_04KSPS ,
  ADE7758_DATA_RATE_13_02KSPS ,
  ADE7758_DATA_RATE_6_51KSPS ,
  ADE7758_DATA_RATE_3_25KSPS
}
 ADE7758 select the data rate. More...
 
enum  ade7758_consel {
  ADE7758_CONSEL_0 ,
  ADE7758_CONSEL_1 ,
  ADE7758_CONSEL_2
}
 ADE7758 select the input to the energy accumulation registers. More...
 
enum  ade7758_pga_gain {
  ADE7758_PGA_GAIN_1 ,
  ADE7758_PGA_GAIN_2
}
 ADE7758 select the PGA gain. More...
 
enum  ade7758_ch_full_scale_sel {
  ADE7758_FS_0_5 ,
  ADE7758_FS_0_25 ,
  ADE7758_FS_0_125
}
 ADE7758 Current input full-scale select. More...
 

Functions

int ade7758_init (struct ade7758_dev **device, struct ade7758_init_param init_param)
 Initialize the device.
 
int ade7758_setup (struct ade7758_dev *dev)
 Setup the ADE7758 device.
 
int ade7758_read (struct ade7758_dev *dev, uint16_t reg_addr, int32_t *reg_data)
 Read device register.
 
int ade7758_write (struct ade7758_dev *dev, uint16_t reg_addr, uint32_t reg_data)
 Write device register.
 
int ade7758_update_bits (struct ade7758_dev *dev, uint16_t reg_addr, uint32_t mask, uint32_t reg_data)
 Update specific register bits.
 
int ade7758_remove (struct ade7758_dev *dev)
 Remove the device and release resources.
 
int ade7758_sw_reset (struct ade7758_dev *dev)
 Reset the device using SW reset.
 
int ade7758_version_product (struct ade7758_dev *dev, uint32_t *data_read)
 Version product.
 
int ade7758_read_ipk_val (struct ade7758_dev *dev, uint32_t *val)
 read Ipeak val
 
int ade7758_vpk_val (struct ade7758_dev *dev, uint32_t *val)
 read Vpeak val
 
int ade7758_get_int_status (struct ade7758_dev *dev, uint32_t msk, uint8_t *status)
 Get interrupt indicator from STATUS register.
 
int ade7758_clear_irq_status (struct ade7758_dev *dev, int32_t *reg_data)
 Clear irq status flags.
 
int ade7758_enable_irq (struct ade7758_dev *dev, uint32_t msk, uint8_t en)
 Enable/Disable interrupt.
 
int ade7758_wave_update_rate (struct ade7758_dev *dev, enum ade7758_data_rate sel)
 Select waveform register update rate.
 
int ade7758_wave_sample_data_source (struct ade7758_dev *dev, enum ade7758_wavesel sel)
 Select source of sampled data for wave register.
 
int ade7758_wave_phase_sel (struct ade7758_dev *dev, enum ade7758_phsel sel)
 Select the phase of sampled data for wave register.
 
int ade7758_consel (struct ade7758_dev *dev, enum ade7758_consel sel)
 Select the input to the energy accumulation registers.
 
int ade7758_freq_source (struct ade7758_dev *dev, enum ade7758_phsel sel)
 Select the source of the measurement of the voltage line frequency.
 
int ade7758_adcs_mode (struct ade7758_dev *dev, enum ade7758_dismod sel)
 Operation mode of the ADCs.
 
int ade7758_energy_vals_phase_a (struct ade7758_dev *dev, struct ade7758_energy_values *data)
 Read energy values phase A.
 
int ade7758_energy_vals_phase_b (struct ade7758_dev *dev, struct ade7758_energy_values *data)
 Read energy values phase B.
 
int ade7758_energy_vals_phase_c (struct ade7758_dev *dev, struct ade7758_energy_values *data)
 Read energy values phase C.
 
int ade7758_rms_vals_phase_a (struct ade7758_dev *dev, struct ade7758_rms_values *data)
 Read rms values phase A.
 
int ade7758_rms_vals_phase_b (struct ade7758_dev *dev, struct ade7758_rms_values *data)
 Read rms values phase B.
 
int ade7758_rms_vals_phase_c (struct ade7758_dev *dev, struct ade7758_rms_values *data)
 Read rms values phase C.
 
int ade7758_period_val (struct ade7758_dev *dev, struct ade7758_period_value *data)
 
int ade7758_temp_val (struct ade7758_dev *dev, struct ade7758_temp_value *data)
 

Detailed Description

Header file of ADE7758 Driver.

Author
REtz (radu..nosp@m.etz@.nosp@m.analo.nosp@m.g.co.nosp@m.m)

Copyright 2025(c) Analog Devices, Inc.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. Neither the name of Analog Devices, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANALOG DEVICES, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Macro Definition Documentation

◆ ADE7758_ABS_MSK

#define ADE7758_ABS_MSK   NO_OS_BIT(5)

◆ ADE7758_AEHF_MSK

#define ADE7758_AEHF_MSK   NO_OS_BIT(0)

◆ ADE7758_CONSEL_MSK

#define ADE7758_CONSEL_MSK   NO_OS_GENMASK(1, 0)

◆ ADE7758_DISCF_MSK

#define ADE7758_DISCF_MSK   NO_OS_BIT(2)

◆ ADE7758_DISHPF_MSK

#define ADE7758_DISHPF_MSK   NO_OS_BIT(0)

◆ ADE7758_DISLPF_MSK

#define ADE7758_DISLPF_MSK   NO_OS_BIT(1)

◆ ADE7758_DISMOD_MSK

#define ADE7758_DISMOD_MSK   NO_OS_GENMASK(5, 3)

◆ ADE7758_DTRT_MSK

#define ADE7758_DTRT_MSK   NO_OS_GENMASK(6, 5)

◆ ADE7758_FREQSEL_MSK [1/2]

#define ADE7758_FREQSEL_MSK   NO_OS_GENMASK(1, 0)

◆ ADE7758_FREQSEL_MSK [2/2]

#define ADE7758_FREQSEL_MSK   NO_OS_BIT(7)

◆ ADE7758_FULL_SCALE_MSK

#define ADE7758_FULL_SCALE_MSK   NO_OS_GENMASK(4, 3)

◆ ADE7758_INTEGRATOR_EN_MSK

#define ADE7758_INTEGRATOR_EN_MSK   NO_OS_BIT(7)

◆ ADE7758_LENERGY_MSK

#define ADE7758_LENERGY_MSK   NO_OS_BIT(12)

◆ ADE7758_LVA_MSK

#define ADE7758_LVA_MSK   NO_OS_BIT(2)

◆ ADE7758_LVAR_MSK

#define ADE7758_LVAR_MSK   NO_OS_BIT(1)

◆ ADE7758_LWATT_MSK

#define ADE7758_LWATT_MSK   NO_OS_BIT(0)

◆ ADE7758_NOLOAD_MSK

#define ADE7758_NOLOAD_MSK   NO_OS_BIT(7)

◆ ADE7758_PEAKSEL_MSK

#define ADE7758_PEAKSEL_MSK   NO_OS_GENMASK(4, 2)

◆ ADE7758_PGA1_GAIN_MSK

#define ADE7758_PGA1_GAIN_MSK   NO_OS_GENMASK(1, 0)

◆ ADE7758_PGA2_GAIN_MSK

#define ADE7758_PGA2_GAIN_MSK   NO_OS_GENMASK(6, 5)

◆ ADE7758_PHSEL_MSK

#define ADE7758_PHSEL_MSK   NO_OS_GENMASK(1, 0)

◆ ADE7758_PKI_MSK

#define ADE7758_PKI_MSK   NO_OS_BIT(15)

◆ ADE7758_PKIRQSEL_MSK

#define ADE7758_PKIRQSEL_MSK   NO_OS_GENMASK(7, 5)

◆ ADE7758_PKV_MSK

#define ADE7758_PKV_MSK   NO_OS_BIT(14)

◆ ADE7758_REG_AIGAIN

#define ADE7758_REG_AIGAIN   0x27

◆ ADE7758_REG_AIRMS

#define ADE7758_REG_AIRMS   0x0A

◆ ADE7758_REG_AIRMSOS

#define ADE7758_REG_AIRMSOS   0x36

◆ ADE7758_REG_APCFDEN

#define ADE7758_REG_APCFDEN   0x46

◆ ADE7758_REG_APCFNUM

#define ADE7758_REG_APCFNUM   0x45

◆ ADE7758_REG_APHCAL

#define ADE7758_REG_APHCAL   0x3F

◆ ADE7758_REG_AVAG

#define ADE7758_REG_AVAG   0x30

◆ ADE7758_REG_AVAHR

#define ADE7758_REG_AVAHR   0x07

◆ ADE7758_REG_AVARG

#define ADE7758_REG_AVARG   0x2D

◆ ADE7758_REG_AVARHR

#define ADE7758_REG_AVARHR   0x04

◆ ADE7758_REG_AVAROS

#define ADE7758_REG_AVAROS   0x3C

◆ ADE7758_REG_AVRMS

#define ADE7758_REG_AVRMS   0x0D

◆ ADE7758_REG_AVRMSGAIN

#define ADE7758_REG_AVRMSGAIN   0x24

◆ ADE7758_REG_AVRMSOS

#define ADE7758_REG_AVRMSOS   0x33

◆ ADE7758_REG_AWATTHR

#define ADE7758_REG_AWATTHR   0x01

◆ ADE7758_REG_AWATTOS

#define ADE7758_REG_AWATTOS   0x39

◆ ADE7758_REG_AWG

#define ADE7758_REG_AWG   0x2A

◆ ADE7758_REG_BIGAIN

#define ADE7758_REG_BIGAIN   0x28

◆ ADE7758_REG_BIRMS

#define ADE7758_REG_BIRMS   0x0B

◆ ADE7758_REG_BIRMSOS

#define ADE7758_REG_BIRMSOS   0x37

◆ ADE7758_REG_BPHCAL

#define ADE7758_REG_BPHCAL   0x40

◆ ADE7758_REG_BVAG

#define ADE7758_REG_BVAG   0x31

◆ ADE7758_REG_BVAHR

#define ADE7758_REG_BVAHR   0x08

◆ ADE7758_REG_BVARG

#define ADE7758_REG_BVARG   0x2E

◆ ADE7758_REG_BVARHR

#define ADE7758_REG_BVARHR   0x05

◆ ADE7758_REG_BVAROS

#define ADE7758_REG_BVAROS   0x3D

◆ ADE7758_REG_BVRMS

#define ADE7758_REG_BVRMS   0X0E

◆ ADE7758_REG_BVRMSGAIN

#define ADE7758_REG_BVRMSGAIN   0x25

◆ ADE7758_REG_BVRMSOS

#define ADE7758_REG_BVRMSOS   0x34

◆ ADE7758_REG_BWATTHR

#define ADE7758_REG_BWATTHR   0x02

◆ ADE7758_REG_BWATTOS

#define ADE7758_REG_BWATTOS   0x3A

◆ ADE7758_REG_BWG

#define ADE7758_REG_BWG   0x2B

◆ ADE7758_REG_CHKSUM

#define ADE7758_REG_CHKSUM   0x7E

◆ ADE7758_REG_CIGAIN

#define ADE7758_REG_CIGAIN   0x29

◆ ADE7758_REG_CIRMS

#define ADE7758_REG_CIRMS   0x0C

◆ ADE7758_REG_CIRMSOS

#define ADE7758_REG_CIRMSOS   0x38

◆ ADE7758_REG_COMPMODE

#define ADE7758_REG_COMPMODE   0x16

◆ ADE7758_REG_CPHCAL

#define ADE7758_REG_CPHCAL   0x41

◆ ADE7758_REG_CVAG

#define ADE7758_REG_CVAG   0x32

◆ ADE7758_REG_CVAHR

#define ADE7758_REG_CVAHR   0x09

◆ ADE7758_REG_CVARG

#define ADE7758_REG_CVARG   0x2F

◆ ADE7758_REG_CVARHR

#define ADE7758_REG_CVARHR   0x06

◆ ADE7758_REG_CVAROS

#define ADE7758_REG_CVAROS   0x3E

◆ ADE7758_REG_CVRMS

#define ADE7758_REG_CVRMS   0x0F

◆ ADE7758_REG_CVRMSGAIN

#define ADE7758_REG_CVRMSGAIN   0x26

◆ ADE7758_REG_CVRMSOS

#define ADE7758_REG_CVRMSOS   0x35

◆ ADE7758_REG_CWATTHR

#define ADE7758_REG_CWATTHR   0x03

◆ ADE7758_REG_CWATTOS

#define ADE7758_REG_CWATTOS   0x3B

◆ ADE7758_REG_CWG

#define ADE7758_REG_CWG   0x2C

◆ ADE7758_REG_FREQ

#define ADE7758_REG_FREQ   0x10

◆ ADE7758_REG_GAIN

#define ADE7758_REG_GAIN   0x23

◆ ADE7758_REG_IPEAK

#define ADE7758_REG_IPEAK   0x22

◆ ADE7758_REG_IPINTLVL

#define ADE7758_REG_IPINTLVL   0x20

◆ ADE7758_REG_LCYCMODE

#define ADE7758_REG_LCYCMODE   0x17

◆ ADE7758_REG_LINECYC

#define ADE7758_REG_LINECYC   0x1C

◆ ADE7758_REG_MASK

#define ADE7758_REG_MASK   0x18

◆ ADE7758_REG_MMODE

#define ADE7758_REG_MMODE   0x14

◆ ADE7758_REG_OPMODE

#define ADE7758_REG_OPMODE   0x13

◆ ADE7758_REG_RSTATUS

#define ADE7758_REG_RSTATUS   0x1A

◆ ADE7758_REG_SAGCYC

#define ADE7758_REG_SAGCYC   0x1D

◆ ADE7758_REG_SAGLVL

#define ADE7758_REG_SAGLVL   0x1E

◆ ADE7758_REG_STATUS

#define ADE7758_REG_STATUS   0x19

◆ ADE7758_REG_TEMP

#define ADE7758_REG_TEMP   0x11

◆ ADE7758_REG_VADIV

#define ADE7758_REG_VADIV   0x44

◆ ADE7758_REG_VARCFDEN

#define ADE7758_REG_VARCFDEN   0x48

◆ ADE7758_REG_VARCFNUM

#define ADE7758_REG_VARCFNUM   0x47

◆ ADE7758_REG_VARDIV

#define ADE7758_REG_VARDIV   0x43

◆ ADE7758_REG_VERSION

#define ADE7758_REG_VERSION   0x7F

◆ ADE7758_REG_VERSION_PRODUCT

#define ADE7758_REG_VERSION_PRODUCT   0x48

◆ ADE7758_REG_VPEAK

#define ADE7758_REG_VPEAK   0x21

◆ ADE7758_REG_VPINTLVL

#define ADE7758_REG_VPINTLVL   0x1F

◆ ADE7758_REG_WAVMODE

#define ADE7758_REG_WAVMODE   0x15

◆ ADE7758_REG_WDIV

#define ADE7758_REG_WDIV   0x42

◆ ADE7758_REG_WFORM

#define ADE7758_REG_WFORM   0x12

◆ ADE7758_REG_ZXTOUT

#define ADE7758_REG_ZXTOUT   0X1B

◆ ADE7758_REHF_MSK

#define ADE7758_REHF_MSK   NO_OS_BIT(1)

◆ ADE7758_RESET_DEL

#define ADE7758_RESET_DEL   1

◆ ADE7758_RESET_MSK

#define ADE7758_RESET_MSK   NO_OS_BIT(13)

◆ ADE7758_REVPAP_MSK

#define ADE7758_REVPAP_MSK   NO_OS_BIT(17)

◆ ADE7758_REVPRP_MSK

#define ADE7758_REVPRP_MSK   NO_OS_BIT(18)

◆ ADE7758_RSTREAD_MSK

#define ADE7758_RSTREAD_MSK   NO_OS_BIT(6)

◆ ADE7758_SAGA_MSK

#define ADE7758_SAGA_MSK   NO_OS_BIT(3)

◆ ADE7758_SAGB_MSK

#define ADE7758_SAGB_MSK   NO_OS_BIT(4)

◆ ADE7758_SAGC_MSK

#define ADE7758_SAGC_MSK   NO_OS_BIT(5)

◆ ADE7758_SAVAR_MSK

#define ADE7758_SAVAR_MSK   NO_OS_BIT(6)

◆ ADE7758_SEQERR_MSK

#define ADE7758_SEQERR_MSK   NO_OS_BIT(19)

◆ ADE7758_SPI_READ

#define ADE7758_SPI_READ   NO_OS_BIT(7)

◆ ADE7758_SWRST_MSK

#define ADE7758_SWRST_MSK   NO_OS_BIT(6)

◆ ADE7758_TERMSEL_MSK

#define ADE7758_TERMSEL_MSK   NO_OS_GENMASK(4, 2)

◆ ADE7758_VACF_MSK

#define ADE7758_VACF_MSK   NO_OS_BIT(7)

◆ ADE7758_VAEHF_MSK

#define ADE7758_VAEHF_MSK   NO_OS_BIT(2)

◆ ADE7758_VERSION

#define ADE7758_VERSION   0x3F

◆ ADE7758_WAVSEL_MSK

#define ADE7758_WAVSEL_MSK   NO_OS_GENMASK(4, 2)

◆ ADE7758_WFSM_MSK

#define ADE7758_WFSM_MSK   NO_OS_BIT(16)

◆ ADE7758_ZXA_MSK

#define ADE7758_ZXA_MSK   NO_OS_BIT(9)

◆ ADE7758_ZXB_MSK

#define ADE7758_ZXB_MSK   NO_OS_BIT(10)

◆ ADE7758_ZXC_MSK

#define ADE7758_ZXC_MSK   NO_OS_BIT(11)

◆ ADE7758_ZXSEL_MSK

#define ADE7758_ZXSEL_MSK   NO_OS_GENMASK(5, 3)

◆ ADE7758_ZXTOA_MSK

#define ADE7758_ZXTOA_MSK   NO_OS_BIT(6)

◆ ADE7758_ZXTOB_MSK

#define ADE7758_ZXTOB_MSK   NO_OS_BIT(7)

◆ ADE7758_ZXTOC_MSK

#define ADE7758_ZXTOC_MSK   NO_OS_BIT(8)

◆ IS_12BITS_REG

#define IS_12BITS_REG ( x)
Value:
(((x) == ADE7758_REG_FREQ) || ((x) >= ADE7758_REG_AVRMSGAIN && (x) <= ADE7758_REG_CVAROS) \
|| ((x) == ADE7758_REG_APCFDEN) || ((x) == ADE7758_REG_VARCFDEN))
#define ADE7758_REG_CVAROS
Definition ade7758.h:138
#define ADE7758_REG_AVRMSGAIN
Definition ade7758.h:112
#define ADE7758_REG_FREQ
Definition ade7758.h:92
#define ADE7758_REG_VARCFDEN
Definition ade7758.h:148
#define ADE7758_REG_APCFDEN
Definition ade7758.h:146

◆ IS_16BITS_REG

#define IS_16BITS_REG ( x)
Value:
(((x) >= ADE7758_REG_AWATTHR && (x) <= ADE7758_REG_CVAHR) \
|| ((x) >= ADE7758_REG_ZXTOUT && (x) <= ADE7758_REG_LINECYC) || ((x) == ADE7758_REG_APCFNUM) \
|| ((x) == ADE7758_REG_VARCFNUM))
#define ADE7758_REG_ZXTOUT
Definition ade7758.h:103
#define ADE7758_REG_LINECYC
Definition ade7758.h:104
#define ADE7758_REG_CVAHR
Definition ade7758.h:85
#define ADE7758_REG_VARCFNUM
Definition ade7758.h:147
#define ADE7758_REG_APCFNUM
Definition ade7758.h:145
#define ADE7758_REG_AWATTHR
Definition ade7758.h:77

◆ IS_24BITS_REG

#define IS_24BITS_REG ( x)
Value:
(((x) >= ADE7758_REG_AIRMS && (x) <= ADE7758_REG_CVRMS) \
|| ((x) == ADE7758_REG_WFORM) || ((x) >= ADE7758_REG_MASK && (x) <= ADE7758_REG_RSTATUS))
#define ADE7758_REG_MASK
Definition ade7758.h:100
#define ADE7758_REG_WFORM
Definition ade7758.h:94
#define ADE7758_REG_AIRMS
Definition ade7758.h:86
#define ADE7758_REG_CVRMS
Definition ade7758.h:91
#define ADE7758_REG_RSTATUS
Definition ade7758.h:102

◆ IS_7BITS_REG

#define IS_7BITS_REG ( x)
Value:
#define ADE7758_REG_APHCAL
Definition ade7758.h:139
#define ADE7758_REG_CPHCAL
Definition ade7758.h:141

◆ IS_8BITS_REG

#define IS_8BITS_REG ( x)
Value:
(((x) == ADE7758_REG_TEMP) || ((x) >= ADE7758_REG_OPMODE && (x) <= ADE7758_REG_LCYCMODE) \
|| ((x) >= ADE7758_REG_SAGCYC && (x) <= ADE7758_REG_GAIN) || ((x) >= ADE7758_REG_WDIV && (x) <= ADE7758_REG_VADIV) \
#define ADE7758_REG_GAIN
Definition ade7758.h:111
#define ADE7758_REG_CHKSUM
Definition ade7758.h:149
#define ADE7758_REG_WDIV
Definition ade7758.h:142
#define ADE7758_REG_VADIV
Definition ade7758.h:144
#define ADE7758_REG_SAGCYC
Definition ade7758.h:105
#define ADE7758_REG_LCYCMODE
Definition ade7758.h:99
#define ADE7758_REG_OPMODE
Definition ade7758.h:95
#define ADE7758_REG_TEMP
Definition ade7758.h:93
#define ADE7758_REG_VERSION
Definition ade7758.h:150

Enumeration Type Documentation

◆ ade7758_ch_full_scale_sel

ADE7758 Current input full-scale select.

Enumerator
ADE7758_FS_0_5 
ADE7758_FS_0_25 
ADE7758_FS_0_125 

◆ ade7758_consel

ADE7758 select the input to the energy accumulation registers.

Enumerator
ADE7758_CONSEL_0 
ADE7758_CONSEL_1 
ADE7758_CONSEL_2 

◆ ade7758_data_rate

ADE7758 select the data rate.

Enumerator
ADE7758_DATA_RATE_26_04KSPS 
ADE7758_DATA_RATE_13_02KSPS 
ADE7758_DATA_RATE_6_51KSPS 
ADE7758_DATA_RATE_3_25KSPS 

◆ ade7758_dismod

ADE7758 ADCs can be turned off by using these bits.

Enumerator
ADE7758_NORMAL_OPERATION 
ADE7758_SWITCH_OFF_CURRENT_ADC 
ADE7758_SWITCH_OFF_VOLTAGE_ADC 
ADE7758_SLEEP_MODE 
ADE7758_SWAP_VOLTAGE_CURRENT 
ADE7758_OFF_CURRENT_ADCS_REDIRECTED_TO_VOLTAGE 
ADE7758_OFF_VOLTAGE_ADCS_REDIRECTED_TO_CURRENT 
ADE7758_POWER_DOWN_MODE 

◆ ade7758_pga_gain

ADE7758 select the PGA gain.

Enumerator
ADE7758_PGA_GAIN_1 
ADE7758_PGA_GAIN_2 

◆ ade7758_phsel

ADE7758 select the phase of the waveform sample or the source for the voltage line frequency measurement.

Enumerator
ADE7758_PHASE_A 
ADE7758_PHASE_B 
ADE7758_PHASE_C 

◆ ade7758_wavesel

ADE7758 select the type of waveform.

Enumerator
ADE7758_CURRENT 
ADE7758_VOLTAGE 
ADE7758_ACTIVE_POWER 
ADE7758_REACTIVE_POWER 
ADE7758_APPARENT_POWER 

Function Documentation

◆ ade7758_adcs_mode()

int ade7758_adcs_mode ( struct ade7758_dev * dev,
enum ade7758_dismod sel )

Operation mode of the ADCs.

Parameters
dev- The device structure.
sel- mode of the ADCs
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_clear_irq_status()

int ade7758_clear_irq_status ( struct ade7758_dev * dev,
int32_t * reg_data )

Clear irq status flags.

Parameters
dev- The device structure.
reg_data- value of the status register
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_consel()

int ade7758_consel ( struct ade7758_dev * dev,
enum ade7758_consel sel )

Select the input to the energy accumulation registers.

Parameters
dev- The device structure.
sel- consel value (see datasheet)
Returns
0 in case of success, negative error code otherwise.

◆ ade7758_enable_irq()

int ade7758_enable_irq ( struct ade7758_dev * dev,
uint32_t msk,
uint8_t en )

Enable/Disable interrupt.

Parameters
dev- The device structure.
msk- Interrupt mask.
en-Enable/Disable
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_energy_vals_phase_a()

int ade7758_energy_vals_phase_a ( struct ade7758_dev * dev,
struct ade7758_energy_values * data )

Read energy values phase A.

Parameters
dev- The device structure.
data- Structure to store energy values
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_energy_vals_phase_b()

int ade7758_energy_vals_phase_b ( struct ade7758_dev * dev,
struct ade7758_energy_values * data )

Read energy values phase B.

Parameters
dev- The device structure.
data- Structure to store energy values
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_energy_vals_phase_c()

int ade7758_energy_vals_phase_c ( struct ade7758_dev * dev,
struct ade7758_energy_values * data )

Read energy values phase C.

Parameters
dev- The device structure.
data- Structure to store energy values
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_freq_source()

int ade7758_freq_source ( struct ade7758_dev * dev,
enum ade7758_phsel sel )

Select the source of the measurement of the voltage line frequency.

Parameters
dev- The device structure.
sel- frequency measurement source
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_get_int_status()

int ade7758_get_int_status ( struct ade7758_dev * dev,
uint32_t msk,
uint8_t * status )

Get interrupt indicator from STATUS register.

Parameters
dev- The device structure.
msk- Interrupt mask.
status- Status indicator.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_init()

int ade7758_init ( struct ade7758_dev ** device,
struct ade7758_init_param init_param )

Initialize the device.

Parameters
device- The device structure.
init_param- The structure that contains the device initial parameters.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_period_val()

int ade7758_period_val ( struct ade7758_dev * dev,
struct ade7758_period_value * data )

◆ ade7758_read()

int ade7758_read ( struct ade7758_dev * dev,
uint16_t reg_addr,
int32_t * reg_data )

Read device register.

Parameters
dev- The device structure.
reg_addr- The register address.
reg_data- The data read from 32bit register.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_read_ipk_val()

int ade7758_read_ipk_val ( struct ade7758_dev * dev,
uint32_t * val )

read Ipeak val

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

◆ ade7758_remove()

int ade7758_remove ( struct ade7758_dev * dev)

Remove the device and release resources.

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

◆ ade7758_rms_vals_phase_a()

int ade7758_rms_vals_phase_a ( struct ade7758_dev * dev,
struct ade7758_rms_values * data )

Read rms values phase A.

Parameters
dev- The device structure.
data- Structure to store rms values
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_rms_vals_phase_b()

int ade7758_rms_vals_phase_b ( struct ade7758_dev * dev,
struct ade7758_rms_values * data )

Read rms values phase B.

Parameters
dev- The device structure.
data- Structure to store rms values
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_rms_vals_phase_c()

int ade7758_rms_vals_phase_c ( struct ade7758_dev * dev,
struct ade7758_rms_values * data )

Read rms values phase C.

Parameters
dev- The device structure.
data- Structure to store rms values
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_setup()

int ade7758_setup ( struct ade7758_dev * dev)

Setup the ADE7758 device.

Parameters
dev- The device structure.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_sw_reset()

int ade7758_sw_reset ( struct ade7758_dev * dev)

Reset the device using SW reset.

Parameters
dev- The device structure.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_temp_val()

int ade7758_temp_val ( struct ade7758_dev * dev,
struct ade7758_temp_value * data )

◆ ade7758_update_bits()

int ade7758_update_bits ( struct ade7758_dev * dev,
uint16_t reg_addr,
uint32_t mask,
uint32_t reg_data )

Update specific register bits.

Parameters
dev- The device structure.
reg_addr- The register address.
mask- Specific bits mask.
reg_data- The data to be written.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_version_product()

int ade7758_version_product ( struct ade7758_dev * dev,
uint32_t * data_read )

Version product.

Parameters
dev- The device structure.
data_read- The version product read value
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_vpk_val()

int ade7758_vpk_val ( struct ade7758_dev * dev,
uint32_t * val )

read Vpeak val

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

◆ ade7758_wave_phase_sel()

int ade7758_wave_phase_sel ( struct ade7758_dev * dev,
enum ade7758_phsel sel )

Select the phase of sampled data for wave register.

Parameters
dev- The device structure.
sel- phase
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_wave_sample_data_source()

int ade7758_wave_sample_data_source ( struct ade7758_dev * dev,
enum ade7758_wavesel sel )

Select source of sampled data for wave register.

Parameters
dev- The device structure.
sel- Update rate
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_wave_update_rate()

int ade7758_wave_update_rate ( struct ade7758_dev * dev,
enum ade7758_data_rate sel )

Select waveform register update rate.

Parameters
dev- The device structure.
sel- Update rate
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function:

◆ ade7758_write()

int ade7758_write ( struct ade7758_dev * dev,
uint16_t reg_addr,
uint32_t reg_data )

Write device register.

Parameters
dev-The device structure.
reg_addr- The register address.
reg_data- The data to be written.
Returns
0 in case of success, negative error code otherwise.
Here is the caller graph for this function: