no-OS
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
ade7913.h
Go to the documentation of this file.
1/***************************************************************************/
33#ifndef __ADE7913_H__
34#define __ADE7913_H__
35
36#include <stdbool.h>
37#include <stdint.h>
38#include <string.h>
39#include "no_os_util.h"
40#include "no_os_spi.h"
41#include "no_os_gpio.h"
42#include "no_os_irq.h"
43
44/* SPI commands */
45#define ADE7913_SPI_READ NO_OS_BIT(2)
46
47/* ENABLE and DISABLE */
48#define ENABLE 1u
49#define DISABLE 0u
50
51/* ADE7913 Register Map */
52#define ADE7913_REG_IWV 0x00
53#define ADE7913_REG_V1WV 0x01
54#define ADE7913_REG_V2WV 0x02
55#define ADE7913_REG_ADC_CRC 0x04
56#define ADE7913_REG_CTRL_CRC 0x05
57#define ADE7913_REG_CNT_SNAPSHOT 0x07
58#define ADE7913_REG_CONFIG 0x08
59#define ADE7913_REG_STATUS0 0x09
60#define ADE7913_REG_LOCK 0x0A
61#define ADE7913_REG_SYNC_SNAP 0x0B
62#define ADE7913_REG_COUNTER0 0x0C
63#define ADE7913_REG_COUNTER1 0x0D
64#define ADE7913_REG_EMI_CTRL 0x0E
65#define ADE7913_REG_STATUS1 0x0F
66#define ADE7913_REG_TEMPOS 0x08
67
68/* ADE7913_REG_CNT_SNAPSHOT Bit Definition */
69#define ADE7913_CNT_VAL_MSK NO_OS_GENMASK(11, 0)
70
71/* ADE7913_REG_CONFIG Bit Definition */
72#define ADE7913_CLKOUT_EN_MSK NO_OS_BIT(0)
73#define ADE7913_PWRDWN_EN_MSK NO_OS_BIT(2)
74#define ADE7913_TEMP_EN_MSK NO_OS_BIT(3)
75#define ADE7913_ADC_FREQ_MSK NO_OS_GENMASK(5, 4)
76#define ADE7913_SWRST_MSK NO_OS_BIT(6)
77#define ADE7913_BW_MSK NO_OS_BIT(7)
78
79/* ADE7913_REG_STATUS0 Bit Definition */
80#define ADE7913_RESET_ON_MSK NO_OS_BIT(0)
81#define ADE7913_CRC_STAT_MSK NO_OS_BIT(1)
82#define ADE7913_IC_PROT_MSK NO_OS_BIT(2)
83
84/* ADE7913_REG_LOCK Bit Definition */
85#define ADE7913_LOCK_KEY_MSK NO_OS_GENMASK(5, 4)
86
87/* ADE7913_REG_SYNC_SNAP Bit Definition */
88#define ADE7913_SYNC_MSK NO_OS_BIT(0)
89#define ADE7913_SNAP_MSK NO_OS_BIT(1)
90
91/* ADE7913_REG_EMI_CTRL Bit Definition */
92#define ADE7913_SLOT0_MSK NO_OS_BIT(0)
93#define ADE7913_SLOT1_MSK NO_OS_BIT(1)
94#define ADE7913_SLOT2_MSK NO_OS_BIT(2)
95#define ADE7913_SLOT3_MSK NO_OS_BIT(3)
96#define ADE7913_SLOT4_MSK NO_OS_BIT(4)
97#define ADE7913_SLOT5_MSK NO_OS_BIT(5)
98#define ADE7913_SLOT6_MSK NO_OS_BIT(6)
99#define ADE7913_SLOT7_MSK NO_OS_BIT(7)
100
101/* ADE7913_REG_STATUS1 Bit Definition */
102#define ADE7913_VERSION_MSK NO_OS_GENMASK(2, 0)
103#define ADE7913_ADC_NA_MSK NO_OS_BIT(6)
104
105/* Configuration Register Write Lock */
106#define ADE7913_LOCK_KEY 0XCA
107#define ADE7913_UNLOCK_KEY 0X9C
108
109/* Version Product */
110#define ADE7913_3_CHANNEL_ADE7913 3U
111#define ADE7913_2_CHANNEL_ADE7912 2U
112
113/* Nominal reference voltage */
114#define ADE7913_VREF_V (788)
115#define ADE7913_VREF_I (49)
116
122 /* 125 us period */
124 /* 250 us period */
126 /* 500 us period */
128 /* 1 ms period */
130};
131
137 /* Number of devices */
138 uint8_t no_devs;
139 /* burst mode */
140 uint8_t burst_mode;
141 /* Device 1 communication descriptor */
143 /* Device 2 communication descriptor */
145 /* Device 3 communication descriptor */
147};
148
162 /* Version product */
163 uint8_t *ver_product;
164 /* I_WAV */
165 int32_t *i_wav;
166 /* V1_WAV */
167 int32_t *v1_wav;
168 /* V2_WAV */
169 int32_t *v2_wav;
170 /* I_WAV multiple devices */
171 int32_t *i_wav_m;
172 /* V1_WAV multiple devices */
173 int32_t *v1_wav_m;
174 /* V2_WAV multiple devices */
175 int32_t *v2_wav_m;
176 /* ADC_CRC */
177 uint16_t *adc_crc;
178 /* Status 0 */
179 uint8_t *status0;
180 /* CNT_SNAPSHOT */
181 uint16_t *cnt_snapshot;
182 /* number of devices */
183 uint8_t no_devs;
184 /* burst mode */
185 uint8_t burst_mode;
188};
189
190// Read device register.
191int ade7913_read(struct ade7913_dev *dev, uint8_t reg_addr, uint8_t *reg_data);
192
193// Read multiple devices
194int ade7913_read_waveforms(struct ade7913_dev *dev, uint8_t reg_addr,
195 uint8_t *reg_data);
196
197// Write device register.
198int ade7913_write(struct ade7913_dev *dev, uint8_t reg_addr, uint8_t reg_data);
199
200// Write broadcast.
201int ade7913_write_broadcast(struct ade7913_dev *dev, uint8_t reg_addr,
202 uint8_t *reg_data);
203
204// Update specific register bits.
205static int ade7913_update_bits(struct ade7913_dev *dev, uint8_t reg_addr,
206 uint8_t mask, uint8_t reg_data);
207
208// Initialize the device.
209int ade7913_init(struct ade7913_dev **device,
211
212// Remove the device and release resources.
213int ade7913_remove(struct ade7913_dev *dev);
214
215// Reset the device using SW reset.
216int ade7913_sw_reset(struct ade7913_dev *dev);
217
218// Lock device.
219int ade7913_wr_lock(struct ade7913_dev *dev);
220
221// Unlock device.
222int ade7913_wr_unlock(struct ade7913_dev *dev);
223
224// Get synchronization counter value.
225int ade7913_get_sync_cnt_val(struct ade7913_dev *dev, uint16_t *counter);
226
227// Set clkout enable.
228int ade7913_set_clkout_en(struct ade7913_dev *dev,
229 uint8_t clkout_en);
230
231// Power down enable.
232int ade7913_pwrdwn(struct ade7913_dev *dev,
233 uint8_t pwrdwn);
234
235// Temperature enable.
236int ade7913_temp_en(struct ade7913_dev *dev,
237 uint8_t temp_en);
238
239// Sync enable.
240int ade7913_sync_en(struct ade7913_dev *dev);
241
242// Set ADC frequency
243int ade7913_adc_freq(struct ade7913_dev *dev,
244 enum ade7913_adc_freq_e frequency);
245
246// Digital lpf bandwith select.
247int ade7913_lfp_bw(struct ade7913_dev *dev, uint8_t bw);
248
249// CRC of config registers status
250int ade7913_crc_status(struct ade7913_dev *dev, uint8_t *status);
251
252// IC config regs protection status.
253int ade7913_ic_prot_status(struct ade7913_dev *dev, uint8_t *status);
254
255// Set EMI CTRL register.
256int ade7913_emi_ctrl(struct ade7913_dev *dev,
257 uint8_t emi_ctrl);
258
259// ADC not accesed during one period status.
260int ade7913_adc_na_status(struct ade7913_dev *dev, uint8_t *status);
261
262// Cnt snapshot.
263int ade7913_cnt_snapshot_val(struct ade7913_dev *dev, uint16_t *val);
264
265// Get version product value.
267 uint8_t *ver_product);
268
269#endif // __ADE7913_H__
struct ad7616_init_param init_param
Definition ad7616_sdz.c:107
int ade7913_pwrdwn(struct ade7913_dev *dev, uint8_t pwrdwn)
Power down enable.
Definition ade7913.c:693
int ade7913_cnt_snapshot_val(struct ade7913_dev *dev, uint16_t *val)
Cnt snapshot.
Definition ade7913.c:892
int ade7913_wr_lock(struct ade7913_dev *dev)
Lock device.
Definition ade7913.c:622
int ade7913_get_version_product(struct ade7913_dev *dev, uint8_t *ver_product)
Get version product value.
Definition ade7913.c:917
ade7913_adc_freq_e
ADE7913 ADC output frequency.
Definition ade7913.h:121
@ ADE7913_ADC_FREQ_8KHZ
Definition ade7913.h:123
@ ADE7913_ADC_FREQ_4KHZ
Definition ade7913.h:125
@ ADE7913_ADC_FREQ_2KHZ
Definition ade7913.h:127
@ ADE7913_ADC_FREQ_1KHZ
Definition ade7913.h:129
int ade7913_temp_en(struct ade7913_dev *dev, uint8_t temp_en)
Temperature enable.
Definition ade7913.c:709
int ade7913_emi_ctrl(struct ade7913_dev *dev, uint8_t emi_ctrl)
Set EMI CTRL register.
Definition ade7913.c:848
int ade7913_sync_en(struct ade7913_dev *dev)
Sync enable.
Definition ade7913.c:724
int ade7913_ic_prot_status(struct ade7913_dev *dev, uint8_t *status)
IC config regs protection status.
Definition ade7913.c:821
int ade7913_lfp_bw(struct ade7913_dev *dev, uint8_t bw)
Digital lpf bandwith select.
Definition ade7913.c:779
int ade7913_init(struct ade7913_dev **device, struct ade7913_init_param init_param)
Initialize the device.
Definition ade7913.c:335
int ade7913_sw_reset(struct ade7913_dev *dev)
Reset the device using SW reset.
Definition ade7913.c:586
int ade7913_get_sync_cnt_val(struct ade7913_dev *dev, uint16_t *counter)
Get synchronization counter value.
Definition ade7913.c:649
int ade7913_adc_freq(struct ade7913_dev *dev, enum ade7913_adc_freq_e frequency)
Set ADC frequency.
Definition ade7913.c:739
int ade7913_write_broadcast(struct ade7913_dev *dev, uint8_t reg_addr, uint8_t *reg_data)
Write broadcast.
Definition ade7913.c:252
int ade7913_set_clkout_en(struct ade7913_dev *dev, uint8_t clkout_en)
Set clkout enable.
Definition ade7913.c:677
int ade7913_write(struct ade7913_dev *dev, uint8_t reg_addr, uint8_t reg_data)
Write device register.
Definition ade7913.c:223
int ade7913_read(struct ade7913_dev *dev, uint8_t reg_addr, uint8_t *reg_data)
Read device register.
Definition ade7913.c:53
int ade7913_crc_status(struct ade7913_dev *dev, uint8_t *status)
CRC of config registers status.
Definition ade7913.c:794
int ade7913_wr_unlock(struct ade7913_dev *dev)
Unlock device.
Definition ade7913.c:635
int ade7913_read_waveforms(struct ade7913_dev *dev, uint8_t reg_addr, uint8_t *reg_data)
Read multiple devices.
Definition ade7913.c:136
int ade7913_remove(struct ade7913_dev *dev)
Remove the device and release resources.
Definition ade7913.c:555
int ade7913_adc_na_status(struct ade7913_dev *dev, uint8_t *status)
ADC not accesed during one period status.
Definition ade7913.c:865
Header file of GPIO Interface.
Header file of IRQ interface.
Header file of SPI Interface.
Header file of utility functions.
ADE7913 Device structure.
Definition ade7913.h:153
uint16_t * cnt_snapshot
Definition ade7913.h:181
int32_t * i_wav
Definition ade7913.h:165
int32_t * i_wav_m
Definition ade7913.h:171
int32_t * v2_wav
Definition ade7913.h:169
uint16_t * adc_crc
Definition ade7913.h:177
uint8_t no_devs
Definition ade7913.h:183
struct no_os_spi_desc * spi_desc0
Definition ade7913.h:157
struct no_os_irq_ctrl_desc * irq_ctrl
Definition ade7913.h:187
uint8_t * status0
Definition ade7913.h:179
struct no_os_spi_desc * spi_desc1
Definition ade7913.h:159
struct no_os_spi_desc * spi_desc2
Definition ade7913.h:161
struct no_os_spi_desc * spi_desc
Definition ade7913.h:155
int32_t * v1_wav
Definition ade7913.h:167
int32_t * v2_wav_m
Definition ade7913.h:175
int32_t * v1_wav_m
Definition ade7913.h:173
uint8_t burst_mode
Definition ade7913.h:185
uint8_t * ver_product
Definition ade7913.h:163
ADE7913 Device initialization parameters.
Definition ade7913.h:136
struct no_os_spi_init_param * spi_init1
Definition ade7913.h:144
uint8_t no_devs
Definition ade7913.h:138
uint8_t burst_mode
Definition ade7913.h:140
struct no_os_spi_init_param * spi_init2
Definition ade7913.h:146
struct no_os_spi_init_param * spi_init0
Definition ade7913.h:142
Definition ad9361_util.h:63
Definition no_os_irq.h:117
Structure holding SPI descriptor.
Definition no_os_spi.h:180
Structure holding the parameters for SPI initialization.
Definition no_os_spi.h:128