no-OS
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
ade9078.h
Go to the documentation of this file.
1/***************************************************************************/
33#ifndef __ADE9078_H__
34#define __ADE9078_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_print_log.h"
43
44/* SPI commands */
45#define ADE9078_SPI_READ NO_OS_BIT(3)
46
47#define ENABLE 0x0001
48#define DISABLE 0x0000
49
50/* ADE9078 Register Map */
51#define ADE9078_REG_AIGAIN 0x0000
52#define ADE9078_REG_AIGAIN0 0x0001
53#define ADE9078_REG_AIGAIN1 0x0002
54#define ADE9078_REG_AIGAIN2 0x0003
55#define ADE9078_REG_AIGAIN3 0x0004
56#define ADE9078_REG_AIGAIN4 0x0005
57#define ADE9078_REG_APHCAL0 0x0006
58#define ADE9078_REG_APHCAL1 0x0007
59#define ADE9078_REG_APHCAL2 0x0008
60#define ADE9078_REG_APHCAL3 0x0009
61#define ADE9078_REG_APHCAL4 0x000A
62#define ADE9078_REG_AVGAIN 0x000B
63#define ADE9078_REG_AIRMSOS 0x000C
64#define ADE9078_REG_AVRMSOS 0x000D
65#define ADE9078_REG_APGAIN 0x000E
66#define ADE9078_REG_AWATTOS 0x000F
67#define ADE9078_REG_AVAROS 0x0010
68#define ADE9078_REG_AFVAROS 0x0012
69#define ADE9078_REG_BIGAIN 0x0020
70#define ADE9078_REG_BIGAIN0 0x0021
71#define ADE9078_REG_BIGAIN1 0x0022
72#define ADE9078_REG_BIGAIN2 0x0023
73#define ADE9078_REG_BIGAIN3 0x0024
74#define ADE9078_REG_BIGAIN4 0x0025
75#define ADE9078_REG_BPHCAL0 0x0026
76#define ADE9078_REG_BPHCAL1 0x0027
77#define ADE9078_REG_BPHCAL2 0x0028
78#define ADE9078_REG_BPHCAL3 0x0029
79#define ADE9078_REG_BPHCAL4 0x002A
80#define ADE9078_REG_BVGAIN 0x002B
81#define ADE9078_REG_BIRMSOS 0x002C
82#define ADE9078_REG_BVRMSOS 0x002D
83#define ADE9078_REG_BPGAIN 0x002E
84#define ADE9078_REG_BWATTOS 0x002F
85#define ADE9078_REG_BVAROS 0x0030
86#define ADE9078_REG_BFVAROS 0x0032
87#define ADE9078_REG_CIGAIN 0x0040
88#define ADE9078_REG_CIGAIN0 0x0041
89#define ADE9078_REG_CIGAIN1 0x0042
90#define ADE9078_REG_CIGAIN2 0x0043
91#define ADE9078_REG_CIGAIN3 0x0044
92#define ADE9078_REG_CIGAIN4 0x0045
93#define ADE9078_REG_CPHCAL0 0x0046
94#define ADE9078_REG_CPHCAL1 0x0047
95#define ADE9078_REG_CPHCAL2 0x0048
96#define ADE9078_REG_CPHCAL3 0x0049
97#define ADE9078_REG_CPHCAL4 0x004A
98#define ADE9078_REG_CVGAIN 0x004B
99#define ADE9078_REG_CIRMSOS 0x004C
100#define ADE9078_REG_CVRMSOS 0x004D
101#define ADE9078_REG_CPGAIN 0x004E
102#define ADE9078_REG_CWATTOS 0x004F
103#define ADE9078_REG_CVAROS 0x0050
104#define ADE9078_REG_CFVAROS 0x0052
105#define ADE9078_REG_CONFIG0 0x0060
106#define ADE9078_REG_MTTHR_L0 0x0061
107#define ADE9078_REG_MTTHR_L1 0x0062
108#define ADE9078_REG_MTTHR_L2 0x0063
109#define ADE9078_REG_MTTHR_L3 0x0064
110#define ADE9078_REG_MTTHR_L4 0x0065
111#define ADE9078_REG_MTTHR_H0 0x0066
112#define ADE9078_REG_MTTHR_H1 0x0067
113#define ADE9078_REG_MTTHR_H2 0x0068
114#define ADE9078_REG_MTTHR_H3 0x0069
115#define ADE9078_REG_MTTHR_H4 0x006A
116#define ADE9078_REG_NIRMSOS 0x006B
117#define ADE9078_REG_ISUMRMSOS 0x006C
118#define ADE9078_REG_NIGAIN 0x006D
119#define ADE9078_REG_NPHCAL 0x006E
120#define ADE9078_REG_VNOM 0x0071
121#define ADE9078_REG_DICOEFF 0x0072
122#define ADE9078_REG_ISUMLVL 0x0073
123#define ADE9078_REG_AI_PCF 0x020A
124#define ADE9078_REG_AV_PCF 0x020B
125#define ADE9078_REG_AIRMS 0x020C
126#define ADE9078_REG_AVRMS 0x020D
127#define ADE9078_REG_AWATT 0x0210
128#define ADE9078_REG_AVAR 0x0211
129#define ADE9078_REG_AVA 0x0212
130#define ADE9078_REG_AFVAR 0x0214
131#define ADE9078_REG_APF 0x0216
132#define ADE9078_REG_AMTREGION 0x021D
133#define ADE9078_REG_BI_PCF 0x022A
134#define ADE9078_REG_BV_PCF 0x022B
135#define ADE9078_REG_BIRMS 0x022C
136#define ADE9078_REG_BVRMS 0x022D
137#define ADE9078_REG_BWATT 0x0230
138#define ADE9078_REG_BVAR 0x0231
139#define ADE9078_REG_BVA 0x0232
140#define ADE9078_REG_BFVAR 0x0234
141#define ADE9078_REG_BPF 0x0236
142#define ADE9078_REG_BMTREGION 0x023D
143#define ADE9078_REG_CI_PCF 0x024A
144#define ADE9078_REG_CV_PCF 0x024B
145#define ADE9078_REG_CIRMS 0x024C
146#define ADE9078_REG_CVRMS 0x024D
147#define ADE9078_REG_CWATT 0x0250
148#define ADE9078_REG_CVAR 0x0251
149#define ADE9078_REG_CVA 0x0252
150#define ADE9078_REG_CFVAR 0x0254
151#define ADE9078_REG_CPF 0x0256
152#define ADE9078_REG_CMTREGION 0x025D
153#define ADE9078_REG_NI_PCF 0x0265
154#define ADE9078_REG_NIRMS 0x0266
155#define ADE9078_REG_ISUMRMS 0x0269
156#define ADE9078_REG_VERSION2 0x026A
157#define ADE9078_REG_AWATT_ACC 0x02E5
158#define ADE9078_REG_AWATTHR_LO 0x02E6
159#define ADE9078_REG_AWATTHR_HI 0x02E7
160#define ADE9078_REG_AVAR_ACC 0x02EF
161#define ADE9078_REG_AVARHR_LO 0x02F0
162#define ADE9078_REG_AVARHR_HI 0x02F1
163#define ADE9078_REG_AVA_ACC 0x02F9
164#define ADE9078_REG_AVAHR_LO 0x02FA
165#define ADE9078_REG_AVAHR_HI 0x02FB
166#define ADE9078_REG_AFVAR_ACC 0x030D
167#define ADE9078_REG_AFVARHR_LO 0x030E
168#define ADE9078_REG_AFVARHR_HI 0x030F
169#define ADE9078_REG_BWATT_ACC 0x0321
170#define ADE9078_REG_BWATTHR_LO 0x0322
171#define ADE9078_REG_BWATTHR_HI 0x0323
172#define ADE9078_REG_BVAR_ACC 0x032B
173#define ADE9078_REG_BVARHR_LO 0x032C
174#define ADE9078_REG_BVARHR_HI 0x032D
175#define ADE9078_REG_BVA_ACC 0x0335
176#define ADE9078_REG_BVAHR_LO 0x0336
177#define ADE9078_REG_BVAHR_HI 0x0337
178#define ADE9078_REG_BFVAR_ACC 0x0349
179#define ADE9078_REG_BFVARHR_LO 0x034A
180#define ADE9078_REG_BFVARHR_HI 0x034B
181#define ADE9078_REG_CWATT_ACC 0x035D
182#define ADE9078_REG_CWATTHR_LO 0x035E
183#define ADE9078_REG_CWATTHR_HI 0x035F
184#define ADE9078_REG_CVAR_ACC 0x0367
185#define ADE9078_REG_CVARHR_LO 0x0368
186#define ADE9078_REG_CVARHR_HI 0x0369
187#define ADE9078_REG_CVA_ACC 0x0371
188#define ADE9078_REG_CVAHR_LO 0x0372
189#define ADE9078_REG_CVAHR_HI 0x0373
190#define ADE9078_REG_CFVAR_ACC 0x0385
191#define ADE9078_REG_CFVARHR_LO 0x0386
192#define ADE9078_REG_CFVARHR_HI 0x0387
193#define ADE9078_REG_PWATT_ACC 0x0397
194#define ADE9078_REG_NWATT_ACC 0x039B
195#define ADE9078_REG_PVAR_ACC 0x039F
196#define ADE9078_REG_NVAR_ACC 0x03A3
197#define ADE9078_REG_IPEAK 0x0400
198#define ADE9078_REG_VPEAK 0x0401
199#define ADE9078_REG_STATUS0 0x0402
200#define ADE9078_REG_STATUS1 0x0403
201#define ADE9078_REG_EVENT_STATUS 0x0404
202#define ADE9078_REG_MASK0 0x0405
203#define ADE9078_REG_MASK1 0x0406
204#define ADE9078_REG_EVENT_MASK 0x0407
205#define ADE9078_REG_USER_PERIOD 0x040E
206#define ADE9078_REG_VLEVEL 0x040F
207#define ADE9078_REG_APERIOD 0x0418
208#define ADE9078_REG_BPERIOD 0x0419
209#define ADE9078_REG_CPERIOD 0x041A
210#define ADE9078_REG_COM_PERIOD 0x041B
211#define ADE9078_REG_ACT_NL_LVL 0x041C
212#define ADE9078_REG_REACT_NL_LVL 0x041D
213#define ADE9078_REG_APP_NL_LVL 0x041E
214#define ADE9078_REG_PHNOLOAD 0x041F
215#define ADE9078_REG_WTHR 0x0420
216#define ADE9078_REG_VARTHR 0x0421
217#define ADE9078_REG_VATHR 0x0422
218#define ADE9078_REG_LAST_DATA_32 0x0423
219#define ADE9078_REG_ADC_REDIRECT 0x0424
220#define ADE9078_REG_CF_LCFG 0x0425
221#define ADE9078_REG_PART_ID 0x0472
222#define ADE9078_REG_RUN 0x0480
223#define ADE9078_REG_CONFIG1 0x0481
224#define ADE9078_REG_ANGL_VA_VB 0x0482
225#define ADE9078_REG_ANGL_VB_VC 0x0483
226#define ADE9078_REG_ANGL_VA_VC 0x0484
227#define ADE9078_REG_ANGL_VA_IA 0x0485
228#define ADE9078_REG_ANGL_VB_IB 0x0486
229#define ADE9078_REG_ANGL_VC_IC 0x0487
230#define ADE9078_REG_ANGL_IA_IB 0x0488
231#define ADE9078_REG_ANGL_IB_IC 0x0489
232#define ADE9078_REG_ANGL_IA_IC 0x048A
233#define ADE9078_REG_CFMODE 0x0490
234#define ADE9078_REG_COMPMODE 0x0491
235#define ADE9078_REG_ACCMODE 0x0492
236#define ADE9078_REG_CONFIG3 0x0493
237#define ADE9078_REG_CF1DEN 0x0494
238#define ADE9078_REG_CF2DEN 0x0495
239#define ADE9078_REG_CF3DEN 0x0496
240#define ADE9078_REG_CF4DEN 0x0497
241#define ADE9078_REG_ZXTOUT 0x0498
242#define ADE9078_REG_ZXTHRSH 0x0499
243#define ADE9078_REG_ZX_LP_SEL 0x049A
244#define ADE9078_REG_SEQ_CYC 0x049C
245#define ADE9078_REG_PHSIGN 0x049D
246#define ADE9078_REG_WFB_CFG 0x04A0
247#define ADE9078_REG_WFB_PG_IRQEN 0x04A1
248#define ADE9078_REG_WFB_TRG_CFG 0x04A2
249#define ADE9078_REG_WFB_TRG_STAT 0x04A3
250#define ADE9078_REG_CONFIG5 0x04A4
251#define ADE9078_REG_CRC_RSLT 0x04A8
252#define ADE9078_REG_CRC_SPI 0x04A9
253#define ADE9078_REG_LAST_DATA_16 0x04AC
254#define ADE9078_REG_LAST_CMD 0x04AE
255#define ADE9078_REG_CONFIG2 0x04AF
256#define ADE9078_REG_EP_CFG 0x04B0
257#define ADE9078_REG_PWR_TIME 0x04B1
258#define ADE9078_REG_EGY_TIME 0x04B2
259#define ADE9078_REG_CRC_FORCE 0x04B4
260#define ADE9078_REG_CRC_OPTEN 0x04B5
261#define ADE9078_REG_TEMP_CFG 0x04B6
262#define ADE9078_REG_PSM2_CFG 0x04B8
263#define ADE9078_REG_PGA_GAIN 0x04B9
264#define ADE9078_REG_CHNL_DIS 0x04BA
265#define ADE9078_REG_WR_LOCK 0x04BF
266#define ADE9078_REG_VAR_DIS 0x04E0
267#define ADE9078_REG_RESERVED1 0x04F0
268#define ADE9078_REG_VERSION 0x04FE
269#define ADE9078_REG_AI_SINC_DAT 0x0500
270#define ADE9078_REG_AV_SINC_DAT 0x0501
271#define ADE9078_REG_BI_SINC_DAT 0x0502
272#define ADE9078_REG_BV_SINC_DAT 0x0503
273#define ADE9078_REG_CI_SINC_DAT 0x0504
274#define ADE9078_REG_CV_SINC_DAT 0x0505
275#define ADE9078_REG_NI_SINC_DAT 0x0506
276#define ADE9078_REG_AI_LPF_DAT 0x0510
277#define ADE9078_REG_AV_LPF_DAT 0x0511
278#define ADE9078_REG_BI_LPF_DAT 0x0512
279#define ADE9078_REG_BV_LPF_DAT 0x0513
280#define ADE9078_REG_CI_LPF_DAT 0x0514
281#define ADE9078_REG_CV_LPF_DAT 0x0515
282#define ADE9078_REG_NI_LPF_DAT 0x0516
283#define ADE9078_REG_AV_PCF_1 0x0600
284#define ADE9078_REG_BV_PCF_1 0x0601
285#define ADE9078_REG_CV_PCF_1 0x0602
286#define ADE9078_REG_NI_PCF_1 0x0603
287#define ADE9078_REG_AI_PCF_1 0x0604
288#define ADE9078_REG_BI_PCF_1 0x0605
289#define ADE9078_REG_CI_PCF_1 0x0606
290#define ADE9078_REG_AIRMS_1 0x0607
291#define ADE9078_REG_BIRMS_1 0x0608
292#define ADE9078_REG_CIRMS_1 0x0609
293#define ADE9078_REG_AVRMS_1 0x060A
294#define ADE9078_REG_BVRMS_1 0x060B
295#define ADE9078_REG_CVRMS_1 0x060C
296#define ADE9078_REG_NIRMS_1 0x060D
297#define ADE9078_REG_AWATT_1 0x060E
298#define ADE9078_REG_BWATT_1 0x060F
299#define ADE9078_REG_CWATT_1 0x0610
300#define ADE9078_REG_AVA_1 0x0611
301#define ADE9078_REG_BVA_1 0x0612
302#define ADE9078_REG_CVA_1 0x0613
303#define ADE9078_REG_AVAR_1 0x0614
304#define ADE9078_REG_BVAR_1 0x0615
305#define ADE9078_REG_CVAR_1 0x0616
306#define ADE9078_REG_AFVAR_1 0x0617
307#define ADE9078_REG_BFVAR_1 0x0618
308#define ADE9078_REG_CFVAR_1 0x0619
309#define ADE9078_REG_APF_1 0x061A
310#define ADE9078_REG_BPF_1 0x061B
311#define ADE9078_REG_CPF_1 0x061C
312#define ADE9078_REG_AV_PCF_2 0x0680
313#define ADE9078_REG_AI_PCF_2 0x0681
314#define ADE9078_REG_AIRMS_2 0x0682
315#define ADE9078_REG_AVRMS_2 0x0683
316#define ADE9078_REG_AWATT_2 0x0684
317#define ADE9078_REG_AVA_2 0x0685
318#define ADE9078_REG_AVAR_2 0x0686
319#define ADE9078_REG_AFVAR_2 0x0687
320#define ADE9078_REG_APF_2 0x0688
321#define ADE9078_REG_BV_PCF_2 0x0693
322#define ADE9078_REG_BI_PCF_2 0x0694
323#define ADE9078_REG_BIRMS_2 0x0695
324#define ADE9078_REG_BVRMS_2 0x0696
325#define ADE9078_REG_BWATT_2 0x0697
326#define ADE9078_REG_BVA_2 0x0698
327#define ADE9078_REG_BVAR_2 0x0699
328#define ADE9078_REG_BFVAR_2 0x069A
329#define ADE9078_REG_BPF_2 0x069B
330#define ADE9078_REG_CV_PCF_2 0x06A6
331#define ADE9078_REG_CI_PCF_2 0x06A7
332#define ADE9078_REG_CIRMS_2 0x06A8
333#define ADE9078_REG_CVRMS_2 0x06A9
334#define ADE9078_REG_CWATT_2 0x06AA
335#define ADE9078_REG_CVA_2 0x06AB
336#define ADE9078_REG_CVAR_2 0x06AC
337#define ADE9078_REG_CFVAR_2 0x06AD
338#define ADE9078_REG_CPF_2 0x06AE
339#define ADE9078_REG_NI_PCF_2 0x06B9
340#define ADE9078_REG_NIRMS_2 0x06BA
341
342/* ADE9078_REG_CONFIG0 Bit Definition */
343#define ADE9078_DISRPLPF NO_OS_BIT(13)
344#define ADE9078_DISAPLPF NO_OS_BIT(12)
345#define ADE9078_ININTEN NO_OS_BIT(11)
346#define ADE9078_VNOMC_EN NO_OS_BIT(10)
347#define ADE9078_VNOMB_EN NO_OS_BIT(9)
348#define ADE9078_VNOMA_EN NO_OS_BIT(8)
349#define ADE9078_ZX_SRC_SEL NO_OS_BIT(6)
350#define ADE9078_INTEN NO_OS_BIT(5)
351#define ADE9078_MTEN NO_OS_BIT(4)
352#define ADE9078_HPFDIS NO_OS_BIT(3)
353#define ADE9078_ISUM_CFG NO_OS_GENMASK(1, 0)
354
355/* ADE9078_REG_AMTREGION Bit Definition */
356#define ADE9078_AREGION NO_OS_GENMASK(3, 0)
357
358/* ADE9078_REG_BMTREGION Bit Definition */
359#define ADE9078_BREGION NO_OS_GENMASK(3, 0)
360
361/* ADE9078_REG_CMTREGION Bit Definition */
362#define ADE9078_CREGION NO_OS_GENMASK(3, 0)
363
364/* ADE9078_REG_IPEAK Bit Definition */
365#define ADE9078_IPPHASE NO_OS_GENMASK(26, 24)
366#define ADE9078_IPEAKVAL NO_OS_GENMASK(23, 0)
367
368/* ADE9078_REG_VPEAK Bit Definition */
369#define ADE9078_VPPHASE NO_OS_GENMASK(26, 24)
370#define ADE9078_VPEAKVAL NO_OS_GENMASK(23, 0)
371
372/* ADE9078_REG_STATUS0 Bit Definition */
373#define ADE9078_STATUS0_MISMTCH NO_OS_BIT(24)
374#define ADE9078_STATUS0_COH_WFB_FULL NO_OS_BIT(23)
375#define ADE9078_STATUS0_WFB_TRIG NO_OS_BIT(22)
376#define ADE9078_STATUS0_PF_RDY NO_OS_BIT(21)
377#define ADE9078_STATUS0_PWRRDY NO_OS_BIT(18)
378#define ADE9078_STATUS0_PAGE_FULL NO_OS_BIT(17)
379#define ADE9078_STATUS0_WFB_TRIG_IRQ NO_OS_BIT(16)
380#define ADE9078_STATUS0_DREADY NO_OS_BIT(15)
381#define ADE9078_STATUS0_CF4 NO_OS_BIT(14)
382#define ADE9078_STATUS0_CF3 NO_OS_BIT(13)
383#define ADE9078_STATUS0_CF2 NO_OS_BIT(12)
384#define ADE9078_STATUS0_CF1 NO_OS_BIT(11)
385#define ADE9078_STATUS0_REVPSUM4 NO_OS_BIT(10)
386#define ADE9078_STATUS0_REVPSUM3 NO_OS_BIT(9)
387#define ADE9078_STATUS0_REVPSUM2 NO_OS_BIT(8)
388#define ADE9078_STATUS0_REVPSUM1 NO_OS_BIT(7)
389#define ADE9078_STATUS0_REVRPC NO_OS_BIT(6)
390#define ADE9078_STATUS0_REVRPB NO_OS_BIT(5)
391#define ADE9078_STATUS0_REVRPA NO_OS_BIT(4)
392#define ADE9078_STATUS0_REVAPC NO_OS_BIT(3)
393#define ADE9078_STATUS0_REVAPB NO_OS_BIT(2)
394#define ADE9078_STATUS0_REVAPA NO_OS_BIT(1)
395#define ADE9078_STATUS0_EGYRDY NO_OS_BIT(0)
396
397/* ADE9078_REG_STATUS1 Bit Definition */
398#define ADE9078_STATUS1_ERROR3 NO_OS_BIT(31)
399#define ADE9078_STATUS1_ERROR2 NO_OS_BIT(30)
400#define ADE9078_STATUS1_ERROR1 NO_OS_BIT(29)
401#define ADE9078_STATUS1_ERROR0 NO_OS_BIT(28)
402#define ADE9078_STATUS1_CRC_DONE NO_OS_BIT(27)
403#define ADE9078_STATUS1_CRC_CHG NO_OS_BIT(26)
404#define ADE9078_STATUS1_SEQERR NO_OS_BIT(18)
405#define ADE9078_STATUS1_RSTDONE NO_OS_BIT(16)
406#define ADE9078_STATUS1_ZXIC NO_OS_BIT(15)
407#define ADE9078_STATUS1_ZXIB NO_OS_BIT(14)
408#define ADE9078_STATUS1_ZXIA NO_OS_BIT(13)
409#define ADE9078_STATUS1_ZXCOMB NO_OS_BIT(12)
410#define ADE9078_STATUS1_ZXVC NO_OS_BIT(11)
411#define ADE9078_STATUS1_ZXVB NO_OS_BIT(10)
412#define ADE9078_STATUS1_ZXVA NO_OS_BIT(9)
413#define ADE9078_STATUS1_ZXTOVC NO_OS_BIT(8)
414#define ADE9078_STATUS1_ZXTOVB NO_OS_BIT(7)
415#define ADE9078_STATUS1_ZXTOVA NO_OS_BIT(6)
416#define ADE9078_STATUS1_RFNOLOAD NO_OS_BIT(4)
417#define ADE9078_STATUS1_VANLOAD NO_OS_BIT(2)
418#define ADE9078_STATUS1_RNLOAD NO_OS_BIT(1)
419#define ADE9078_STATUS1_ANLOAD NO_OS_BIT(0)
420
421/* ADE9078_REG_EVENT_STATUS Bit Definition */
422#define ADE9078_EVENT_DREADY NO_OS_BIT(16)
423#define ADE9078_EVENT_RFNOLOAD NO_OS_BIT(14)
424#define ADE9078_EVENT_VANLOAD NO_OS_BIT(12)
425#define ADE9078_EVENT_RNLOAD NO_OS_BIT(11)
426#define ADE9078_EVENT_ANLOAD NO_OS_BIT(10)
427#define ADE9078_EVENT_REVPSUM4 NO_OS_BIT(9)
428#define ADE9078_EVENT_REVPSUM3 NO_OS_BIT(8)
429#define ADE9078_EVENT_REVPSUM2 NO_OS_BIT(7)
430#define ADE9078_EVENT_REVPSUM1 NO_OS_BIT(6)
431
432/* ADE9078_REG_MASK0 Bit Definition */
433#define ADE9078_MASK0_MISMTCH NO_OS_BIT(24)
434#define ADE9078_MASK0_COH_WFB_FULL NO_OS_BIT(23)
435#define ADE9078_MASK0_WFB_TRIG NO_OS_BIT(22)
436#define ADE9078_MASK0_THD_PF_RDY NO_OS_BIT(21)
437#define ADE9078_MASK0_PWRRDY NO_OS_BIT(18)
438#define ADE9078_MASK0_PAGE_FULL NO_OS_BIT(17)
439#define ADE9078_MASK0_WFB_TRIG_IRQ NO_OS_BIT(16)
440#define ADE9078_MASK0_DREADY NO_OS_BIT(15)
441#define ADE9078_MASK0_CF4 NO_OS_BIT(14)
442#define ADE9078_MASK0_CF3 NO_OS_BIT(13)
443#define ADE9078_MASK0_CF2 NO_OS_BIT(12)
444#define ADE9078_MASK0_CF1 NO_OS_BIT(11)
445#define ADE9078_MASK0_REVPSUM4 NO_OS_BIT(10)
446#define ADE9078_MASK0_REVPSUM3 NO_OS_BIT(9)
447#define ADE9078_MASK0_REVPSUM2 NO_OS_BIT(8)
448#define ADE9078_MASK0_REVPSUM1 NO_OS_BIT(7)
449#define ADE9078_MASK0_REVRPC NO_OS_BIT(6)
450#define ADE9078_MASK0_REVRPB NO_OS_BIT(5)
451#define ADE9078_MASK0_REVRPA NO_OS_BIT(4)
452#define ADE9078_MASK0_REVAPC NO_OS_BIT(3)
453#define ADE9078_MASK0_REVAPB NO_OS_BIT(2)
454#define ADE9078_MASK0_REVAPA NO_OS_BIT(1)
455#define ADE9078_MASK0_EGYRDY NO_OS_BIT(0)
456
457/* ADE9078_REG_MASK1 Bit Definition */
458#define ADE9078_MASK1_ERROR3 NO_OS_BIT(31)
459#define ADE9078_MASK1_ERROR2 NO_OS_BIT(30)
460#define ADE9078_MASK1_ERROR1 NO_OS_BIT(29)
461#define ADE9078_MASK1_ERROR0 NO_OS_BIT(28)
462#define ADE9078_MASK1_CRC_DONE NO_OS_BIT(27)
463#define ADE9078_MASK1_CRC_CHG NO_OS_BIT(26)
464#define ADE9078_MASK1_SEQERR NO_OS_BIT(18)
465#define ADE9078_MASK1_ZXIC NO_OS_BIT(15)
466#define ADE9078_MASK1_ZXIB NO_OS_BIT(14)
467#define ADE9078_MASK1_ZXIA NO_OS_BIT(13)
468#define ADE9078_MASK1_ZXCOMB NO_OS_BIT(12)
469#define ADE9078_MASK1_ZXVC NO_OS_BIT(11)
470#define ADE9078_MASK1_ZXVB NO_OS_BIT(10)
471#define ADE9078_MASK1_ZXVA NO_OS_BIT(9)
472#define ADE9078_MASK1_ZXTOVC NO_OS_BIT(8)
473#define ADE9078_MASK1_ZXTOVB NO_OS_BIT(7)
474#define ADE9078_MASK1_ZXTOVA NO_OS_BIT(6)
475#define ADE9078_MASK1_RFNOLOAD NO_OS_BIT(4)
476#define ADE9078_MASK1_VANLOAD NO_OS_BIT(2)
477#define ADE9078_MASK1_RNLOAD NO_OS_BIT(1)
478#define ADE9078_MASK1_ANLOAD NO_OS_BIT(0)
479
480/* ADE9078_REG_EVENT_MASK Bit Definition */
481#define ADE9078_EVENT_DREADY_MSK NO_OS_BIT(16)
482#define ADE9078_EVENT_RFNOLOAD_MSK NO_OS_BIT(14)
483#define ADE9078_EVENT_VANLOAD_MSK NO_OS_BIT(12)
484#define ADE9078_EVENT_RNLOAD_MSK NO_OS_BIT(11)
485#define ADE9078_EVENT_ANLOAD_MSK NO_OS_BIT(10)
486#define ADE9078_EVENT_REVPSUM4_MSK NO_OS_BIT(9)
487#define ADE9078_EVENT_REVPSUM3_MSK NO_OS_BIT(8)
488#define ADE9078_EVENT_REVPSUM2_MSK NO_OS_BIT(7)
489#define ADE9078_EVENT_REVPSUM1_MSK NO_OS_BIT(6)
490
491/* ADE9078_REG_VLEVEL Bit Definition */
492#define ADE9078_VLEVEL_VAL NO_OS_GENMASK(23, 0)
493
494/* ADE9078_REG_PHNOLOAD Bit Definition */
495#define ADE9078_CFVARNL NO_OS_BIT(16)
496#define ADE9078_CVANL NO_OS_BIT(14)
497#define ADE9078_CVARNL NO_OS_BIT(13)
498#define ADE9078_CWATTNL NO_OS_BIT(12)
499#define ADE9078_BFVARNL NO_OS_BIT(10)
500#define ADE9078_BVANL NO_OS_BIT(8)
501#define ADE9078_BVARNL NO_OS_BIT(7)
502#define ADE9078_BWATTNL NO_OS_BIT(6)
503#define ADE9078_AFVARNL NO_OS_BIT(4)
504#define ADE9078_AVANL NO_OS_BIT(2)
505#define ADE9078_AVARNL NO_OS_BIT(1)
506#define ADE9078_AWATTNL NO_OS_BIT(0)
507
508/* ADE9078_REG_ADC_REDIRECT Bit Definition */
509#define ADE9078_VC_DIN NO_OS_GENMASK(20, 18)
510#define ADE9078_VB_DIN NO_OS_GENMASK(17, 15)
511#define ADE9078_VA_DIN NO_OS_GENMASK(14, 12)
512#define ADE9078_IN_DIN NO_OS_GENMASK(11, 9)
513#define ADE9078_IC_DIN NO_OS_GENMASK(8, 6)
514#define ADE9078_IB_DIN NO_OS_GENMASK(5, 3)
515#define ADE9078_IA_DIN NO_OS_GENMASK(2, 0)
516
517/* ADE9078_REG_CF_LCFG Bit Definition */
518#define ADE9078_CF4_LT NO_OS_BIT(22)
519#define ADE9078_CF3_LT NO_OS_BIT(21)
520#define ADE9078_CF2_LT NO_OS_BIT(20)
521#define ADE9078_CF1_LT NO_OS_BIT(19)
522#define ADE9078_CF_LTMR NO_OS_GENMASK(18, 0)
523
524/* ADE9078_REG_PART_ID Bit Definition */
525#define ADE9078_AD73370_ID NO_OS_BIT(21)
526#define ADE9078_ADE9000_ID NO_OS_BIT(20)
527#define ADE9078_ADE9004_ID NO_OS_BIT(16)
528
529/* ADE9078_REG_CONFIG1 Bit Definition */
530#define ADE9078_EXT_REF NO_OS_BIT(15)
531#define ADE9078_IRQ0_ON_IRQ1 NO_OS_BIT(12)
532#define ADE9078_BURST_EN NO_OS_BIT(11)
533#define ADE9078_PWR_SETTLE NO_OS_GENMASK(9, 8)
534#define ADE9078_CF_ACC_CLR NO_OS_BIT(5)
535#define ADE9078_CF4_CFG NO_OS_GENMASK(3, 2)
536#define ADE9078_CF3_CFG NO_OS_BIT(1)
537#define ADE9078_SWRST NO_OS_BIT(0)
538
539/* ADE9078_REG_CFMODE Bit Definition */
540#define ADE9078_CF4DIS NO_OS_BIT(15)
541#define ADE9078_CF3DIS NO_OS_BIT(14)
542#define ADE9078_CF2DIS NO_OS_BIT(13)
543#define ADE9078_CF1DIS NO_OS_BIT(12)
544#define ADE9078_CF4SEL NO_OS_GENMASK(11, 9)
545#define ADE9078_CF3SEL NO_OS_GENMASK(8, 6)
546#define ADE9078_CF2SEL NO_OS_GENMASK(5, 3)
547#define ADE9078_CF1SEL NO_OS_GENMASK(2, 0)
548
549/* ADE9078_REG_COMPMODE Bit Definition */
550#define ADE9078_TERMSEL4 NO_OS_GENMASK(11, 9)
551#define ADE9078_TERMSEL3 NO_OS_GENMASK(8, 6)
552#define ADE9078_TERMSEL2 NO_OS_GENMASK(5, 3)
553#define ADE9078_TERMSEL1 NO_OS_GENMASK(2, 0)
554
555/* ADE9078_REG_ACCMODE Bit Definition */
556#define ADE9078_SELFREQ NO_OS_BIT(8)
557#define ADE9078_ICONSEL NO_OS_BIT(7)
558#define ADE9078_VCONSEL NO_OS_GENMASK(6, 4)
559#define ADE9078_VARACC NO_OS_GENMASK(3, 2)
560#define ADE9078_WATTACC NO_OS_GENMASK(1, 0)
561
562/* ADE9078_REG_CONFIG3 Bit Definition */
563#define ADE9078_PEAKSEL NO_OS_GENMASK(4, 2)
564
565/* ADE9078_REG_ZX_LP_SEL Bit Definition */
566#define ADE9078_LP_SEL NO_OS_GENMASK(4, 3)
567#define ADE9078_ZX_SEL NO_OS_GENMASK(2, 1)
568
569/* ADE9078_REG_PHSIGN Bit Definition */
570#define ADE9078_SUM4SIGN NO_OS_BIT(9)
571#define ADE9078_SUM3SIGN NO_OS_BIT(8)
572#define ADE9078_SUM2SIGN NO_OS_BIT(7)
573#define ADE9078_SUM1SIGN NO_OS_BIT(6)
574#define ADE9078_CVARSIGN NO_OS_BIT(5)
575#define ADE9078_CWSIGN NO_OS_BIT(4)
576#define ADE9078_BVARSIGN NO_OS_BIT(3)
577#define ADE9078_BWSIGN NO_OS_BIT(2)
578#define ADE9078_AVARSIGN NO_OS_BIT(1)
579#define ADE9078_AWSIGN NO_OS_BIT(0)
580
581/* ADE9078_REG_WFB_CFG Bit Definition */
582#define ADE9078_WF_IN_EN NO_OS_BIT(12)
583#define ADE9078_WF_SRC NO_OS_GENMASK(9, 8)
584#define ADE9078_WF_MODE NO_OS_BIT(7, 6)
585#define ADE9078_WF_CAP_SEL NO_OS_BIT(5)
586#define ADE9078_WF_CAP_EN NO_OS_BIT(4)
587#define ADE9078_BURST_CHAN NO_OS_GENMASK(3, 0)
588
589/* ADE9078_WFB_TRG_CFG Bit Definition */
590#define ADE9078_TRIG_FORCE NO_OS_BIT(10)
591#define ADE9078_ZXCOMB NO_OS_BIT(9)
592#define ADE9078_ZXVC NO_OS_BIT(8)
593#define ADE9078_ZXVB NO_OS_BIT(7)
594#define ADE9078_ZXVA NO_OS_BIT(6)
595#define ADE9078_ZXIC NO_OS_BIT(5)
596#define ADE9078_ZXIB NO_OS_BIT(4)
597#define ADE9078_ZXIA NO_OS_BIT(3)
598
599/* ADE9078_WFB_TRG_STAT Bit Definition */
600#define ADE9078_WFB_LAST_PAGE NO_OS_GENMASK(15, 12)
601#define ADE9078_WFB_TRIG_ADDR NO_OS_GENMASK(10, 0)
602
603/* ADE9078_CONFIG2 Bit Definition */
604#define ADE9078_UPERIOD_SEL NO_OS_BIT(12)
605#define ADE9078_HPF_CRN NO_OS_GENMASK(11, 9)
606
607/* ADE9078_EP_CFG Bit Definition */
608#define ADE9078_NOLOAD_TMR NO_OS_GENMASK(15, 13)
609#define ADE9078_PWR_SIGN_SEL_1 NO_OS_BIT(7)
610#define ADE9078_RD_RST_EN NO_OS_BIT(5)
611#define ADE9078_EGY_LD_ACCUM NO_OS_BIT(4)
612#define ADE9078_EGY_TMR_MODE NO_OS_BIT(1)
613#define ADE9078_EGY_PWR_EN NO_OS_BIT(0)
614
615/* ADE9078_CRC_FORCE Bit Definition */
616#define ADE9078_FORCE_CRC_UPDATE NO_OS_BIT(0)
617
618/* ADE9078_CRC_OPTEN Bit Definition */
619#define ADE9078_CRC_WFB_TRG_CFG_EN NO_OS_BIT(15)
620#define ADE9078_CRC_WFB_PG_IRQEN NO_OS_BIT(14)
621#define ADE9078_CRC_WFB_CFG_EN NO_OS_BIT(13)
622#define ADE9078_CRC_SEQ_CYC_EN NO_OS_BIT(12)
623#define ADE9078_CRC_ZXLPSEL_EN NO_OS_BIT(11)
624#define ADE9078_CRC_ZXTOUT_EN NO_OS_BIT(10)
625#define ADE9078_CRC_APP_NL_LVL_EN NO_OS_BIT(9)
626#define ADE9078_CRC_REACT_NL_LVL_EN NO_OS_BIT(8)
627#define ADE9078_CRC_ACT_NL_LVL_EN NO_OS_BIT(7)
628#define ADE9078_CRC_EVENT_MASK_EN NO_OS_BIT(2)
629#define ADE9078_CRC_MASK1_EN NO_OS_BIT(1)
630#define ADE9078_CRC_MASK0_EN NO_OS_BIT(0)
631
632/* ADE9078_PSM2_CFG Bit Definition */
633#define ADE9078_PKDET_LVL NO_OS_BIT(8, 5)
634#define ADE9078_LPLINE NO_OS_BIT(4, 0)
635
636/* ADE9078_PGA_GAIN Bit Definition */
637#define ADE9078_VC_GAIN NO_OS_GENMASK(13, 12)
638#define ADE9078_VB_GAIN NO_OS_GENMASK(11, 10)
639#define ADE9078_VA_GAIN NO_OS_GENMASK(9, 8)
640#define ADE9078_IN_GAIN NO_OS_GENMASK(7, 6)
641#define ADE9078_IC_GAIN NO_OS_GENMASK(5, 4)
642#define ADE9078_IB_GAIN NO_OS_GENMASK(3, 2)
643#define ADE9078_IA_GAIN NO_OS_GENMASK(1, 0)
644
645/* ADE9078_CHNL_DIS Bit Definition */
646#define ADE9078_VC_DISADC NO_OS_BIT(6)
647#define ADE9078_VB_DISADC NO_OS_BIT(5)
648#define ADE9078_VA_DISADC NO_OS_BIT(4)
649#define ADE9078_IN_DISADC NO_OS_BIT(3)
650#define ADE9078_IC_DISADC NO_OS_BIT(2)
651#define ADE9078_IB_DISADC NO_OS_BIT(1)
652#define ADE9078_IA_DISADC NO_OS_BIT(0)
653
654/* ADE9078_VAR_DIS Bit Definition */
655#define ADE9078_VARDIS NO_OS_BIT(0)
656
657/* Miscellaneous Definitions */
658#define ADE9078_CHIP_ID 0x63
659#define ADE9078_PART_ID 0
660#define ADE9078_RESET_RECOVER 100
661
662/*Configuration registers*/
663/*PGA@0x0000. Gain of all channels=1*/
664#define ADE9078_PGA_GAIN 0x0000
665/*Integrator disabled*/
666#define ADE9078_CONFIG0 0x00000000
667/*CF3/ZX pin outputs Zero crossing */
668#define ADE9078_CONFIG1 0x0002
669/*Default High pass corner frequency of 1.2475Hz*/
670#define ADE9078_CONFIG2 0x0A00
671/*Peak and overcurrent detection disabled*/
672#define ADE9078_CONFIG3 0x0000
673/*50Hz operation, 3P4W Wye configuration, signed accumulation*/
674#define ADE9078_ACCMODE 0x0000
675/*Line period and zero crossing obtained from combined signals VA,VB and VC*/
676#define ADE9078_ZX_LP_SEL 0x001E
677/*Enable EGYRDY interrupt*/
678#define ADE9078_MASK0 0x00000001
679/*MASK1 interrupts disabled*/
680#define ADE9078_MASK1 0x00000000
681/*Events disabled */
682#define ADE9078_EVENT_MASK 0x00000000
683/*Assuming Vnom=1/2 of full scale.*/
684/*Refer Technical reference manual for detailed calculations.*/
685#define ADE9078_VLEVEL 0x00117514
686/* Set DICOEFF= 0xFFFFE000 when integrator is enabled*/
687#define ADE9078_DICOEFF 0x00000000
688/*Constant Definitions***/
689/*DSP ON*/
690#define ADE9078_RUN_ON 0x0001
691/*Energy Accumulation Settings*/
692/*Enable energy accumulation, accumulate samples at 8ksps*/
693/*latch energy accumulation after EGYRDY*/
694/*If accumulation is changed to half line cycle mode, change EGY_TIME*/
695#define ADE9078_EP_CFG 0x0001
696/*Accumulate 8000 samples*/
697#define ADE9078_EGY_TIME 0x1F3F
698/*Waveform buffer Settings*/
699/*Neutral current samples enabled, Resampled data enabled*/
700/*Burst all channels*/
701#define ADE9078_WFB_CFG 0x1000
702/*size of buffer to read. 512 Max.Each element IA,VA...IN has max 512 points*/
703/*[Size of waveform buffer/number of sample sets = 2048/4 = 512]*/
704/*(Refer ADE9078 technical reference manual for more details)*/
705#define WFB_ELEMENT_ARRAY_SIZE 512
706/*Full scale Codes (FS) referred from Datasheet.*/
707/*Respective digital codes are produced when ADC inputs*/
708/*are at full scale. Do not Change. */
709#define ADE9078_RMS_FS_CODES 52866837
710#define ADE9078_WATT_FS_CODES 20823646
711
712/* Assuming a transformer ratio of 1000:1 and 10 ohms burden resistance value */
713#define ADE9078_BURDEN_RES 10
714#define ADE9078_CURRENT_TR_RATIO 1000
715#define ADE9078_CURRENT_TR_FCN (ADE9078_CURRENT_TR_RATIO / ADE9078_BURDEN_RES)
716/* Assuming a voltage divider with Rlow 1k and Rup 990k */
717#define ADE9078_UP_RES 990000
718#define ADE9078_DOWN_RES 1000
719#define ADE9078_VOLTAGE_TR_FCN ((ADE9078_DOWN_RES + ADE9078_UP_RES) / ADE9078_DOWN_RES)
720
721// 0.707V rms full scale * 1000 for mili units
722#define ADE9078_FS_VOLTAGE 707
723
729 /* Approximated neutral current rms calculation */
731 /* Determine positive mismatch between neutral and
732 phase currents */
734 /* determine negative mismatch between neutral and
735 phase currents */
737 /* approximated neutral current rms calculation */
739};
740
760
780
800
807 /* Digital to freq converter */
809 /* Digital to freq converter */
811 /* Event */
813 /* Dready */
815};
816
822 /* 64 ms */
824 /* 128 ms */
826 /* 256 ms */
828 /* 0 ms */
830};
831
839 /* Total active power */
841 /* Total reactive power */
843 /* Total apparent power */
845 /* Fundamental reactive power */
847 /* Total active power */
849 /* Total active power2 */
851};
852
858 /* 50 Hz */
860 /* 60 Hz */
862};
863
869 /* 4 wire wye */
871 /* 3-wire delta. VB' = VA − VC */
873 /* 4-wire wye, nonBlondel compliant. VB' = −VA − VC */
875 /* 4-wire delta, nonBlondel compliant. VB' = −VA */
877 /* 3-wire delta. VA' = VA − VB; VB' = VA − VC; VC' = VC − VB*/
879};
880
887 /* signed acc mode */
889 /* absolute value acc mode */
891 /* positive acc mode */
893 /* negative acc mode */
895};
896
904 /* signed acc mode */
906 /* absolute value acc mode */
908 /* positive acc mode */
910 /* negative acc mode */
912};
913
921 /* Phase A voltage zero-crossing signal */
923 /* Phase B voltage zero-crossing signal */
925 /* Phase C voltage zero-crossing signal */
927 /* Zero-crossing on combined signal from VA, VB, and VC */
929};
930
937 /* Sinc4 output at 32 kSPS */
939 /* Sinc4 + IIR LPF output at 8 kSPS */
941 /* Current and voltage channel waveform samples,
942 processed by the DSP (xI_PCF, xV_PCF) at 4 kSPS */
944};
945
952 /* Stop when waveform buffer is full */
954 /* Continuous fill—stop only on enabled trigger
955 events */
957 /* Continuous filling—center capture around
958 enabled trigger events. */
960 /* Continuous fill—save event address of enabled
961 trigger events */
963};
964
971 /* All channels */
973 /* IA and VA */
975 /* IB and VB */
977 /* IC and VC */
979 /* IA */
981 /* VA */
983 /* IB */
985 /* VB */
987 /* IC */
989 /* VC */
991 /* IN if WF_IN_EN = 1*/
993 /* Burst Disable read single addr */
995};
996
1003 /* 39.695 Hz. */
1005 /* 19.6375 Hz. */
1007 /* 9.895 Hz. */
1009 /* 4.9675 Hz. */
1011 /* 2.49 Hz. */
1013 /* 1.2475 Hz. */
1015 /* 0.625 Hz. */
1017 /* 0.3125 Hz. */
1019};
1020
1027 /* 64 samples */
1029 /* 128 samples */
1031 /* 256 samples */
1033 /* 512 samples */
1035 /* 1024 samples */
1037 /* 2048 samples */
1039 /* 4096 samples */
1041 /* disable no load threshold */
1043};
1044
1052 /* 100:1 */
1054 /* 200:1 */
1056 /* 300:1 */
1058 /* 400:1 */
1060 /* 500:1 */
1062 /* 600:1 */
1064 /* 700:1 */
1066 /* 800:1 */
1068 /* 900:1 */
1070 /* 1000:1 */
1072 /* 1100:1 */
1074 /* 1200:1 */
1076 /* 1300:1 */
1078 /* 1400:1 */
1080 /* 1500:1 */
1082 /* 1600:1 */
1084};
1085
1091 /* Gain = 1 */
1093 /* Gain = 2 */
1095 /* Gain = 3 */
1097 /* Gain = 4 */
1099};
1100
1110
1120
1126 /* SPI is not available in PSM2 & PSM3*/
1127 /* PSM0 normal mode */
1129 /* PSM1 Tamper measurement mode */
1131 /* PSM2 Current peak detect mode */
1133 /* PSM3 IDLE */
1135};
1136
1144 /* psm0 descriptor */
1146 /* psm1 descriptor */
1148 /* reset descriptor */
1150 /* Variable for mode selection */
1151 uint8_t power_mode;
1152};
1153
1161 /* psm0 descriptor */
1163 /* psm1 descriptor */
1165 /* psm1 descriptor */
1167 /* Variable storing the WATT value */
1168 uint32_t watt_val;
1169 /* Variable storing the IRMS value */
1170 uint32_t irms_val;
1171 /* Variable storing the VRMS value */
1172 uint32_t vrms_val;
1173 /* Variable for mode selection */
1174 uint8_t power_mode;
1175};
1176
1177/* Read device register. */
1178int ade9078_read(struct ade9078_dev *dev, uint16_t reg_addr,
1179 uint32_t *reg_data);
1180
1181/* Write device register. */
1182int ade9078_write(struct ade9078_dev *dev, uint16_t reg_addr,
1183 uint32_t reg_data);
1184
1185/* Set power mode */
1186int ade9078_set_power_mode(struct ade9078_dev *dev);
1187
1188/* Update specific register bits. */
1189int ade9078_update_bits(struct ade9078_dev *dev, uint16_t reg_addr,
1190 uint32_t mask, uint32_t reg_data);
1191
1192/* Read Energy/Power for specific phase */
1193int ade9078_read_data_ph(struct ade9078_dev *dev, enum ade9078_phase phase);
1194
1195/* Set User Energy use model */
1196int ade9078_set_egy_model(struct ade9078_dev *dev, enum ade9078_egy_model model,
1197 uint16_t value);
1198
1199/* Initialize the device. */
1200int ade9078_init(struct ade9078_dev **device,
1202
1203/* Setup the device */
1204int ade9078_setup(struct ade9078_dev *dev);
1205
1206/* Remove the device and release resources. */
1207int ade9078_remove(struct ade9078_dev *dev);
1208
1209/* Get interrupt indicator from STATUS0 register. */
1210int ade9078_get_int_status0(struct ade9078_dev *dev, uint32_t msk,
1211 uint8_t *status);
1212
1213#endif // __ADE9078_H__
struct ad7616_init_param init_param
Definition ad7616_sdz.c:107
@ NORMAL_MODE
Definition ade7880.h:767
ade9078_cregion_sel_e
ADE9078 These bits indicate which CIGAINx and CPHCALx is currently being used.
Definition ade9078.h:786
@ ADE9078_CIGAIN_CPHCAL_4
Definition ade9078.h:796
@ ADE9078_CIGAIN_CPHCAL_0
Definition ade9078.h:788
@ ADE9078_CIGAIN_CPHCAL_DISABLE
Definition ade9078.h:798
@ ADE9078_CIGAIN_CPHCAL_2
Definition ade9078.h:792
@ ADE9078_CIGAIN_CPHCAL_1
Definition ade9078.h:790
@ ADE9078_CIGAIN_CPHCAL_3
Definition ade9078.h:794
ade9078_power_mode_e
ADE9078 Power mode selection.
Definition ade9078.h:1125
@ IDLE_MODE
Definition ade9078.h:1134
@ TAMPER_MODE
Definition ade9078.h:1130
@ CURRENT_PEAK_DETECT_MODE
Definition ade9078.h:1132
int ade9078_write(struct ade9078_dev *dev, uint16_t reg_addr, uint32_t reg_data)
Write device register.
Definition ade9078.c:95
ade9078_phase
ADE9078 available phases.
Definition ade9078.h:1105
@ ADE9078_PHASE_C
Definition ade9078.h:1108
@ ADE9078_PHASE_B
Definition ade9078.h:1107
@ ADE9078_PHASE_A
Definition ade9078.h:1106
ade9078_vconsel_e
ADE9078 3-wire and 4-wire hardware configuration selection.
Definition ade9078.h:868
@ ADE9078_3WIRE_DELTA_2
Definition ade9078.h:878
@ ADE9078_4WIRE_WYE_VA
Definition ade9078.h:876
@ ADE9078_3WIRE_DELTA
Definition ade9078.h:872
@ ADE9078_4WIRE_WYE
Definition ade9078.h:870
@ ADE9078_4WIRE_WYE_VA_VC
Definition ade9078.h:874
ade9078_aregion_sel_e
ADE9078 These bits indicate which AIGAINx and APHCALx is currently being used.
Definition ade9078.h:746
@ ADE9078_AIGAIN_APHCAL_DISABLE
Definition ade9078.h:758
@ ADE9078_AIGAIN_APHCAL_2
Definition ade9078.h:752
@ ADE9078_AIGAIN_APHCAL_4
Definition ade9078.h:756
@ ADE9078_AIGAIN_APHCAL_1
Definition ade9078.h:750
@ ADE9078_AIGAIN_APHCAL_3
Definition ade9078.h:754
@ ADE9078_AIGAIN_APHCAL_0
Definition ade9078.h:748
ade9078_cf4_pin_out_cfg_e
ADE9078 These bits indicate which function to output on CF4 pin.
Definition ade9078.h:806
@ ADE9078_CF4_D_F_CONV2
Definition ade9078.h:810
@ ADE9078_CF4_DREADY
Definition ade9078.h:814
@ ADE9078_CF4_EVENT
Definition ade9078.h:812
@ ADE9078_CF4_D_F_CONV
Definition ade9078.h:808
ade9078_wf_src_e
Waveform buffer source and DREADY (data ready update rate) selection.
Definition ade9078.h:936
@ ADE9078_SRC_SINC4
Definition ade9078.h:938
@ ADE9078_SRC_DSP
Definition ade9078.h:943
@ ADE9078_SRC_SINC4_IIR
Definition ade9078.h:940
int ade9078_set_egy_model(struct ade9078_dev *dev, enum ade9078_egy_model model, uint16_t value)
Set User Energy use model.
Definition ade9078.c:312
ade9078_pwr_settle_e
ADE9078 Power settle time.
Definition ade9078.h:821
@ ADE9078_PWR_SETTLE_1
Definition ade9078.h:825
@ ADE9078_PWR_SETTLE_3
Definition ade9078.h:829
@ ADE9078_PWR_SETTLE_2
Definition ade9078.h:827
@ ADE9078_PWR_SETTLE_0
Definition ade9078.h:823
int ade9078_setup(struct ade9078_dev *dev)
Setup the device.
Definition ade9078.c:459
int ade9078_read_data_ph(struct ade9078_dev *dev, enum ade9078_phase phase)
Read the power/energy for specific phase.
Definition ade9078.c:235
ade9078_cf4_sel_e
ADE9078 Type of energy output on the CF4 pin. Configure TERMSEL4 in the COMPMODE register to select w...
Definition ade9078.h:838
@ ADE9078_CF4_SEL_REACTIV_P
Definition ade9078.h:842
@ ADE9078_CF4_SEL_TOTAL_ACTIVE_P_2
Definition ade9078.h:850
@ ADE9078_CF4_SEL_TOTAL_ACTIVE_P
Definition ade9078.h:848
@ ADE9078_CF4_SEL_FUN_REACTIVE_P
Definition ade9078.h:846
@ ADE9078_CF4_SEL_APPARENT_P
Definition ade9078.h:844
@ ADE9078_CF4_SEL_ACTIV_P
Definition ade9078.h:840
int ade9078_read(struct ade9078_dev *dev, uint16_t reg_addr, uint32_t *reg_data)
Read device register.
Definition ade9078.c:48
ade9078_isum_cfg_e
ADE9078 isum calculation configuration.
Definition ade9078.h:728
@ ADE9078_ISUM_APROX_N_RMS
Definition ade9078.h:738
@ ADE9078_ISUM_APROX_N
Definition ade9078.h:730
@ ADE9078_ISUM_DET_MISM_NEG
Definition ade9078.h:736
@ ADE9078_ISUM_DET_MISM_POS
Definition ade9078.h:733
int ade9078_init(struct ade9078_dev **device, struct ade9078_init_param init_param)
Initialize the device.
Definition ade9078.c:373
ade9078_var_acc_mode_e
ADE9078 Total and fundamental reactive power accumulation mode for energy registers and CFx pulses.
Definition ade9078.h:886
@ ADE9078_ACC_ABSOLUTE
Definition ade9078.h:890
@ ADE9078_ACC_POSITIVE
Definition ade9078.h:892
@ ADE9078_ACC_NEGATIVE
Definition ade9078.h:894
@ ADE9078_ACC_SIGNED
Definition ade9078.h:888
ade9078_hpf_freq_e
High-pass filter corner (f3dB) enabled when the HPFDIS bit in the CONFIG0 register is equal to zero.
Definition ade9078.h:1002
@ ADE9078_HPF_0_625
Definition ade9078.h:1016
@ ADE9078_HPF_4_9675
Definition ade9078.h:1010
@ ADE9078_HPF_19_6375
Definition ade9078.h:1006
@ ADE9078_HPF_2_49
Definition ade9078.h:1012
@ ADE9078_HPF_9_895
Definition ade9078.h:1008
@ ADE9078_HPF_36_695
Definition ade9078.h:1004
@ ADE9078_HPF_0_3125
Definition ade9078.h:1018
@ ADE9078_HPF_1_2475
Definition ade9078.h:1014
int ade9078_get_int_status0(struct ade9078_dev *dev, uint32_t msk, uint8_t *status)
Get interrupt indicator from STATUS0 register.
Definition ade9078.c:208
ade9078_wf_mode_e
Fixed data rate waveforms filling and trigger based modes.
Definition ade9078.h:951
@ ADE9078_MODE_STOP_FULL
Definition ade9078.h:953
@ ADE9078_MODE_CENTER_CAPTURE
Definition ade9078.h:959
@ ADE9078_MODE_TRIG_EN_EVENTS
Definition ade9078.h:956
@ ADE9078_MODE_SAVE_EVENT_ADDR
Definition ade9078.h:962
ade9078_line_period_sel_e
Selects line period measurement used for VRMS½ cycle, 10 cycle rms/12 cycle rms, and resampling.
Definition ade9078.h:903
@ ADE9078_COM_PERIOD
Definition ade9078.h:911
@ ADE9078_APERIOD
Definition ade9078.h:905
@ ADE9078_BPERIOD
Definition ade9078.h:907
@ ADE9078_CPERIOD
Definition ade9078.h:909
ade9078_egy_model
ADE9078 available user energy use models.
Definition ade9078.h:1115
@ ADE9078_EGY_WITH_RESET
Definition ade9078.h:1116
@ ADE9078_EGY_NR_SAMPLES
Definition ade9078.h:1118
@ ADE9078_EGY_HALF_LINE_CYCLES
Definition ade9078.h:1117
ade9078_pkdet_lvl_e
ADE9078 These bits configure the PSM2 low power comparator peak current detection Level,...
Definition ade9078.h:1051
@ ADE9078_PKDET_LVL_300
Definition ade9078.h:1057
@ ADE9078_PKDET_LVL_1200
Definition ade9078.h:1075
@ ADE9078_PKDET_LVL_1300
Definition ade9078.h:1077
@ ADE9078_PKDET_LVL_500
Definition ade9078.h:1061
@ ADE9078_PKDET_LVL_200
Definition ade9078.h:1055
@ ADE9078_PKDET_LVL_700
Definition ade9078.h:1065
@ ADE9078_PKDET_LVL_1400
Definition ade9078.h:1079
@ ADE9078_PKDET_LVL_1100
Definition ade9078.h:1073
@ ADE9078_PKDET_LVL_1600
Definition ade9078.h:1083
@ ADE9078_PKDET_LVL_1500
Definition ade9078.h:1081
@ ADE9078_PKDET_LVL_900
Definition ade9078.h:1069
@ ADE9078_PKDET_LVL_600
Definition ade9078.h:1063
@ ADE9078_PKDET_LVL_100
Definition ade9078.h:1053
@ ADE9078_PKDET_LVL_400
Definition ade9078.h:1059
@ ADE9078_PKDET_LVL_800
Definition ade9078.h:1067
@ ADE9078_PKDET_LVL_1000
Definition ade9078.h:1071
ade9078_burst_ch_e
Selects which data to read out of the waveform buffer through SPI.
Definition ade9078.h:970
@ ADE9078_BURST_IB_VB
Definition ade9078.h:976
@ ADE9078_BURST_VC
Definition ade9078.h:990
@ ADE9078_BURST_IA_VA
Definition ade9078.h:974
@ ADE9078_BURST_IC_VC
Definition ade9078.h:978
@ ADE9078_BURST_IB
Definition ade9078.h:984
@ ADE9078_BURST_DISABLED
Definition ade9078.h:994
@ ADE9078_BURST_IC
Definition ade9078.h:988
@ ADE9078_BURST_IN
Definition ade9078.h:992
@ ADE9078_BURST_VB
Definition ade9078.h:986
@ ADE9078_BURST_ALL_CH
Definition ade9078.h:972
@ ADE9078_BURST_IA
Definition ade9078.h:980
@ ADE9078_BURST_VA
Definition ade9078.h:982
int ade9078_remove(struct ade9078_dev *dev)
Remove the device and release resources.
Definition ade9078.c:519
ade9078_no_load_tmr_e
This register configures how many 4 kSPS samples to evaluate the no load condition over.
Definition ade9078.h:1026
@ ADE9078_NOLOAD_SAMPLES_256
Definition ade9078.h:1032
@ ADE9078_NOLOAD_SAMPLES_64
Definition ade9078.h:1028
@ ADE9078_NOLOAD_SAMPLES_4096
Definition ade9078.h:1040
@ ADE9078_NOLOAD_SAMPLES_DISABLE
Definition ade9078.h:1042
@ ADE9078_NOLOAD_SAMPLES_1024
Definition ade9078.h:1036
@ ADE9078_NOLOAD_SAMPLES_128
Definition ade9078.h:1030
@ ADE9078_NOLOAD_SAMPLES_2048
Definition ade9078.h:1038
@ ADE9078_NOLOAD_SAMPLES_512
Definition ade9078.h:1034
int ade9078_update_bits(struct ade9078_dev *dev, uint16_t reg_addr, uint32_t mask, uint32_t reg_data)
Update specific register bits.
Definition ade9078.c:181
int ade9078_set_power_mode(struct ade9078_dev *dev)
Set power mode.
Definition ade9078.c:122
ade9078_zx_select_e
Selects the zero-crossing signal, which can be routed to the CF3/ZX output pin and used for line cycl...
Definition ade9078.h:920
@ ADE9078_ZXCOMB_SEL
Definition ade9078.h:928
@ ADE9078_ZXVA_SEL
Definition ade9078.h:922
@ ADE9078_ZXVB_SEL
Definition ade9078.h:924
@ ADE9078_ZXVC_SEL
Definition ade9078.h:926
ade9078_vc_gain_e
ADE9078 PGA gain for Voltage Channel C ADC.
Definition ade9078.h:1090
@ ADE9078_VC_GAIN_4
Definition ade9078.h:1098
@ ADE9078_VC_GAIN_1
Definition ade9078.h:1092
@ ADE9078_VC_GAIN_3
Definition ade9078.h:1096
@ ADE9078_VC_GAIN_2
Definition ade9078.h:1094
ade9078_bregion_sel_e
ADE9078 These bits indicate which BIGAINx and BPHCALx is currently being used.
Definition ade9078.h:766
@ ADE9078_BIGAIN_BPHCAL_0
Definition ade9078.h:768
@ ADE9078_BIGAIN_BPHCAL_DISABLE
Definition ade9078.h:778
@ ADE9078_BIGAIN_BPHCAL_4
Definition ade9078.h:776
@ ADE9078_BIGAIN_BPHCAL_1
Definition ade9078.h:770
@ ADE9078_BIGAIN_BPHCAL_3
Definition ade9078.h:774
@ ADE9078_BIGAIN_BPHCAL_2
Definition ade9078.h:772
ade9078_freq_sel_e
ADE9078 Freq value.
Definition ade9078.h:857
@ ADE9078_SELFREQ_50
Definition ade9078.h:859
@ ADE9078_SELFREQ_60
Definition ade9078.h:861
Header file of GPIO Interface.
Print messages helpers.
Header file of SPI Interface.
Header file of utility functions.
ADE9078 Device structure.
Definition ade9078.h:1158
uint32_t vrms_val
Definition ade9078.h:1172
struct no_os_gpio_desc * reset_desc
Definition ade9078.h:1166
uint32_t irms_val
Definition ade9078.h:1170
struct no_os_gpio_desc * psm0_desc
Definition ade9078.h:1162
struct no_os_spi_desc * spi_desc
Definition ade9078.h:1160
uint32_t watt_val
Definition ade9078.h:1168
struct no_os_gpio_desc * psm1_desc
Definition ade9078.h:1164
uint8_t power_mode
Definition ade9078.h:1174
ADE9078 Device initialization parameters.
Definition ade9078.h:1141
struct no_os_gpio_desc * psm1_desc
Definition ade9078.h:1147
struct no_os_gpio_desc * psm0_desc
Definition ade9078.h:1145
uint8_t power_mode
Definition ade9078.h:1151
struct no_os_gpio_desc * reset_desc
Definition ade9078.h:1149
struct no_os_spi_init_param * spi_init
Definition ade9078.h:1143
Definition ad9361_util.h:63
Structure holding the GPIO descriptor.
Definition no_os_gpio.h:84
Structure holding SPI descriptor.
Definition no_os_spi.h:180
Structure holding the parameters for SPI initialization.
Definition no_os_spi.h:128