2020년 2월 8일 토요일

라즈베리파이 : SPI ( Speed etc.)

Speed

The driver supports the following speeds:
  cdiv    speed
     2    125.0 MHz
     4     62.5 MHz
     8     31.2 MHz
    16     15.6 MHz
    32      7.8 MHz
    64      3.9 MHz
   128     1953 kHz
   256      976 kHz
   512      488 kHz
  1024      244 kHz
  2048      122 kHz
  4096       61 kHz
  8192     30.5 kHz
 16384     15.2 kHz
 32768     7629 Hz
When asking for say 24 MHz, the actual speed will be 15.6 MHz.
Forum post: SPI has more speeds

Supported Mode bits

SPI_CPOL    - Clock polarity
SPI_CPHA    - Clock phase
SPI_CS_HIGH - Chip Select active high
SPI_NO_CS   - 1 device per bus, no Chip Select
SPI_3WIRE   - Bidirectional mode, data in and out pin shared
Bidirectional or "3-wire" mode is supported by the spi-bcm2835 kernel module. Please note that in this mode, either the tx or rx field of the spi_transfer struct must be a NULL pointer, since only half-duplex communication is possible. Otherwise, the transfer will fail. The spidev_test.c source code does not consider this correctly, and therefore does not work at all in 3-wire mode.

Supported bits per word

  • 8 - Normal
  • 9 - This is supported using LoSSI mode.

Transfer modes

Only interrupt mode is supported.

라즈베리파이 : 이미지 크기 줄이기

참조 URL : https://bluesid.tistory.com/309

GParted LIVE 부팅을 이용하여 메모리의 사이즈를 줄임(shriking)
https://softwarebakery.com//shrinking-images-on-linux

그리고 fdisk -l 장치명
ex) fdisk -l /dev/disk2

https://raspberrypi.stackexchange.com/questions/4943/how-to-resize-an-image-file-before-writing-to-sd-card

이런저런 내용중에 잘 보아야 하는것이 Blocks... 용량끝의 위치

위치를 확인하고 나면 아래 명령어를 작은 크기의 이미지를 만들 수 있음

dd if=/dev/disk2 of=/path/to/rpi_backup.img bs=512 count=2831360


< dd 명령어 설명 >
if=FILE, 표준 입력 대신 지정한 파일을 입력 받는다.
of=FILE, 표준 입력 대신 지정된 파일을 출력 한다.
bs=BYTES, 한번에 BYTES씩 읽어 들이고 출력
count=BLOCK, 입력 블록의 ibs 크기만큼만 복사한다.

======================================

이번 포스트에선 라즈베리파이용 OS를 설치한 SD 카드를 백업하고 그 백업파일의 용량을 줄여보도록 하겠다.
준비물:
1. OS가 설치된 SD 카드 & 리더기
2. Win32DiskImager (https://sourceforge.net/projects/win32diskimager/)
3. VirtualBox (https://download.virtualbox.org/virtualbox/6.0.0/VirtualBox-6.0.0-127566-Win.exe)
4. Ubuntu ios 파일 (버전은 상관없으나 18.04 추천, 만약 자신의 pc가 32비트면 16.04로 설치, http://releases.ubuntu.com/18.04/ubuntu-18.04.1-desktop-amd64.iso)
우선 Win32DiskImager를 이용해 설치했던 것처럼 백업을 받아보겠다. 방법은 아주 간단하다.
1) Win32DiskImager를 실행하고 백업할 SD 카드를 선택한다. 여기서 드라이브 레이블이 두가지가 뜨게 되는데, 파일 탐색기에서 드라이 이름이 boot 라고 뜨는 드라이브 레이블을 선택한다.
2) 폴더 버튼을 클릭하여 백업을 받을 경로와 백업 파일의 이름을 입력해준다 (파일 확장자는 .img로 해준다.)
3) Read 버튼을 클릭해여 백업을 받는다.
이렇게 백업을 다 받으면 분명 백업파일의 용량이 백업한 SD 카드와 용량이 비슷할 것이다. (8GB SD카드면 약 8GB 가량의 백업파일, 32GB SD면 약 32GB 가량의 백업 파일이 생성되었을 것이다.)
그런데 분명 우리가 라즈베리파이에서 실제 사용한 용량은 몇 GB에 불과했었는데, 왜 이렇게 큰 용량의 백업이 생성된 것일까?
그것은 Win32DiskImager에서 SD카드의 모든 볼륨의 데이터를 이미지화 시켰기 때문이다. 그러면 용량을 줄일 수는 없을까? (줄일 수 없으면 이 얘기를 꺼내지도 않았을 것이다 ㅋ)
백업 파일의 용량을 줄이기 위해선 리눅스가 설치된 PC가 필요하다.
그렇기 때문에 리눅스가 설치된 PC가 있으면 좋지만, 한국에서는 윈도우를 많이 쓰는 편이라 리눅스를 사용하는 일반인은 많지 않을 것이다. 그래서 우리는 VirtualBox로 가상머신을 돌려 리눅스를 윈도우 위에서 가상으로 사용할 것이다. (VirtualBox에 리눅스를 설치하는 과정은 실제 윈도우에 영향을 주지 않으니 윈도우가 날라갈 걱정은 할 필요가 없다)
VirtualBox에 Ubuntu를 설치하는 방법은 다른 페이지를 참고했으면 한다 (만약 Ubuntu 버전이 다르더라도 설치방법은 같다.)
그리고 호스트 PC와 가상머신이 파일을 쉽게 주고 받을 수 있게 공유 폴더도 설정하기 바란다. (이것도 다른 페이지 참고)
버추얼박스(VirtualBox) 우분투 설치하는 방법
https://extrememanual.net/7223
리눅스 PC는 라즈베리파이 개발에 있어서 땔래야 땔 수 없는 존재이다. 만약 이번 기회로 처음 리눅스를 써보게 되는 것이라면, 삭제하지 말고 기본적인 명령어 정도는 익혀놔야 나중에 편할 것이다 (TMI.)
우선 공유 폴더를 통해서 백업파일을 가상머신으로 넘겨준다.
1) 우선 "ls -al 백업파일.img"를 입력하여 백업파일의 크기를 확인하자. 필자는 8GB SD카드를 사용했기 때문에 백업파일도 약 8GB이다.
2) 백업파일의 내부를 확인하기 위해 "sudo fdisk -l 백업파일.img"를 입력합니다. 여기서 우리가 봐야할 부분은 "백업파일.img2"의 Start 섹터이다. 이것을 따로 적어둔다 (필자의 경우 98304를 적어두면 되는 것이다.)
3) "sudo losetup /dev/loop0 백업파일.img -o $((적어둔_Start섹터*512))"를 입력하여 리눅스 파티션을 루프백 디바이스 마운트한다.
4) 만약 자신의 우분투에 Gparted가 설치되어있지 않다면 위 명령을 입력하여 설치한다.
sudo apt update
sudo apt install gparted
5) 이제 마운트한 루프백 디바이스의 파티션을 조정하기 위해 위 명령을 입력하여 Gparted를 실행한다.
sudo gparted /dev/loop0
6) /dev/loop0를 클릭하고 상단 메뉴에서 "Partition - Resize/Move"를 클릭한다.
7) 그러면 창이 하나 뜨는데, 여기서 /dev/loop0의 최대 크기와 줄일 수 있는 최소 크기를 확인 할 수 있.
8) 이제 /dev/loop0의 필요 없는 공간을 없애주기 위해 새로운 크기를 설정해주어야한다. 새로운 크기에 확인한 최소 크기를 입력하여도 되지만 혹시 모를 상황에 대비해 여유공간으로 200MB정도 더해서 입력하고 Resize 버튼을 클릭한다.
9) /dev/loop0를 클릭하고 상단 메뉴에서 "Edit - Apply All Operations"를 클릭한다.
10) 작업을 실행하면서 뜬 팝업을 닫지 말고 메뉴를 확장해서(세모모양) "resize2fs -p /dev/loop0 1392640K"에서 1392640K 부분을 따로 적어 둔다 (최종 파티션의 크기이다.) 적어두었다면 close를 클릭해 Gparted를 종류한다.
11) 이제 루프백 디바이스(백업파일의 리눅스 파티션)을 언마운트 하고, 이번에는 백업파일 전체를 마운트한다.
sudo losetup -d /dev/loop0
sudo losetup /dev/loop0 백업파일.img
12) fdisk를 실행하여 다음과 같이 옵션에 입력한다.
sudo fdisk /dev/loop0  (이게 fdisk 실행)
Command (m for help): d    ---------------------- (파티션 제거) Partition number (1,2, default 2): 2
Command (m for help): n  ------------------------ (파티션 생성) Partition number (2-4, default 2048): 2 First sector (2048-15523839, default 2048): 98304  ----------------- (백업파일 안에 리눅스 파티션의 Start 섹터, 필자의 경우 98304) Last sector, +sectors or +size{K, M, G, T, P} (98304-15523839, default 15523839): +1392640K ----- (10에서 적어둔 최종 파티션의 크기, 필자의 경우 1392640K, 주의할 점은 +와 K를 꼭 빼먹지 말고 대소문자 구분하여 입력해야한다.)
Command (m for help): w  ------- (fdisk 종료)
13) "sudo fdisk -al /dev/loop0"를 입력하여 /dev/loop0의 섹터 값을 확인 하고 리눅스 파티션의 End 섹터 값을 따로 적어둔다 (필자의 경우 2883583이다.)
14) 루프백 마운트를 해제하고 truncate 명령으로 13에서 적어둔 End 섹터를 기준으로 백업파일을 자른다.
sudo losetup -d /dev/loop0
truncate -s $(((End_섹터값+1)*512)) 백업파일.img  ---- (필자의 경우 End_섹터값에 2883583을 입력하면 된다.)
15) "ls -al 백업파일.img"을 입력하여 백업파일의 크기를 다시 확인해보면 파일 크기가 줄어들었다는 것을 알 수 있다.


출처: https://betaman-workshop.tistory.com/29 [BetaMan의 공사장]

라즈베리 파이 : CM3 파티션 <참조>

sudo ./rpiboot
Waiting for BCM2835/6/7
Sending bootcode.bin
Successful read 4 bytes
Waiting for BCM2835/6/7
Second stage boot server
File read: start.elf
Second stage boot server done


lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    1 29.1G  0 disk
tqsda1        8:1    1  256M  0 part /media/pi/boot
mqsda2        8:2    1 28.9G  0 part /media/pi/rootfs
mmcblk0     179:0    0 14.9G  0 disk
tqmmcblk0p1 179:1    0  256M  0 part /boot
mqmmcblk0p2 179:2    0 14.6G  0 part /


----------------------------------------------------------------------
sudo fdisk /dev/sda

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table


Command (m for help):

----------------------------------------------------------------------
Command (m for help): p
Disk /dev/sda: 29.1 GiB, 31268536320 bytes, 61071360 sectors
Disk model: 0001
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd9b3f436

Device     Boot  Start      End  Sectors  Size Id Type
/dev/sda1         8192   532479   524288  256M  c W95 FAT32 (LBA)
/dev/sda2       532480 61071359 60538880 28.9G 83 Linux

Command (m for help): i
Partition number (1,2, default 2):

         Device: /dev/sda2
          Start: 532480
            End: 61071359
        Sectors: 60538880
      Cylinders: 29561
           Size: 28.9G
             Id: 83
           Type: Linux
    Start-C/H/S: 1023/3/32
      End-C/H/S: 1023/63/32

Command (m for help): i
Partition number (1,2, default 2): 1

         Device: /dev/sda1
          Start: 8192
            End: 532479
        Sectors: 524288
      Cylinders: 257
           Size: 256M
             Id: c
           Type: W95 FAT32 (LBA)
    Start-C/H/S: 64/0/1
      End-C/H/S: 1023/3/32

Command (m for help):

==============================================================================
[참조]
parted -s /dev/mmcblk1 mklabel msdos
parted -s /dev/mmcblk1  unit cyl mkpart primary fat32 -- 0 9
parted -s /dev/mmcblk1  set 1 boot on
parted -s /dev/mmcblk1 unit cyl mkpart primary ext2 -- 9 -2

fdisk -l /dev/mmcblk1
mkfs.vfat -F 32 -n "boot" /dev/mmcblk1p1
mkfs.ext3 -L "rootfs" /dev/mmcblk1p2

==============================================================================

dd if=/dev/sda of=~/CM3/usbboot/nfs_share/back_up.img bs=512 count=60538880


----------------------------------------------------------------------



IEC 61850 개요

IEC 61850

변전 시스템의 통신/제어를 위한 변전소 자동화 통신 프로토콜



출처: https://luyin.tistory.com/196 [Luyin]

1. 통신의 부하 조절 및 역할 분담을 위하여 두개의 bus 사용
1) Station Bus, Process bus
- 스테이션 버스 (station bus) 역할
- IED와 상위 운영시스템 간의 통신
- IED로부터 마스터에 주기적 데이터 수집(polling)
- 멀티캐스트 GOOSE 메시지를 통한 IED간의 이벤트 데이터 교환
2) 프로세스 버스 (process bus):
- 플랜트 장비(개폐장치, 계측장치)와 IED갂의 통신
- 디지털화된 샘플값의 전송

2. SCL(Substation Configuration description Language)
- 변전소의 구성을 기술하는 언어
- XML을 기반으로 작성됨
- IEC 61850 표준규격의 Part 6에 정의됨
+ 다음을 정보를 작성하는 규칙으로 사용됨
- IED Capability Description           (ICD) 파일
  IED Configuration Description ICD
- System Configuration Description     (SCD) 파일
- System functional specification      (SSD) 파일
  System specification description SSD
- 엔지니어링에 관한 정보를 담은 파읷들은 다른 어떤 엔지니어링 툴(Tool) 에서 인을 수 있고 수정가능 하여야 한다.

-------------------------------------------
(예)
<Substation name="">
<VoltageLevel name="E1">
<Bay name="Q1">
<Equipment name="QA1" Type="CBR">
<Connection nodeName="L1"/>
<LNode inst="1" lnClass="CSWI"/>
</Equipment>
<Equipment Ref="QB1" Type="DIS">
<Connection nodeName="L1"/>
<LNode inst="2" lnClass="CSWI"/>
</Equipment>
</Bay>
</VoltageLevel>
</Substation>
아래에 기술된 내용은 다음의 설명을 포함하고 있다.
변전소에 있는 E1Q1 라는 베이(bay)에서
차단기 QA1과 단로기 QB1는 모두 L1이라는 노드에 전기적으로 연결되어 있다.
-------------------------------------------

3. Logical Node (데이터 관점에서)
IED( Intelligent Electronic Device : 지능형 전자 디바이스 )들 사이에서 데이터 교환 단위
일종의 Container로 객체들을 그룹화
그룹화된 LN은 고유이 이름이 존재함
데이터 교환은 IED들 사이에서 발생한다.
IED안에 있는 function 이나 sub-function 사이에 발생
교환되는 데이터는 function에 속해있는 객체들로 그룹화

4. 데이터 모델의 계층 구조
1) Physical Device : 서버 = 물리장치(PHD)
2) Logical Device  : 논리장치 (LD)
3) Logical Node    : 논리노드 (LN)
4) Data            : 데이터 (DO)
5) Data Attribute  : 데이터 속성 (DA)

5. 논리노드, 데이터
1) IEC 61850-7-4
- Compatible LN classes (CPLNC)
- Compatible data classes (CPDC)
2) IEC 61850-7-3
- Common data classes (CDC)
3) IEC 61850-7-2
- LN class (LNC)  -> logical node
- Dtat class (DC) -> data

6. 관련 규격
IEC 61970 : EMS 및 상위 운영 시스템 의 관점에서 정의
IEC 61968 : 배전 관리의 DMS에서 이기종간의 전송 규약 정의
IEC 61850 : IED( Intelligent Electronic Device ), MU와 같은 전력 계통의 디바이스에 대한 표준



[ 참고 ]
레거시 디바이스는 레거시 데이터 프로토콜 전송을 어우르는 61859래퍼(Wrapper)를 사용한다.
GOOSE(일반 개체 지향적 변저소 이벤드 모델)
GSSE(일반 변전소 형태의 이벤트 모델)

소프트웨어 규격
- 변전소 FAT(Factory Acceptance Test) 및 SAT (Site Acceptance Test) 사용가능
- 시각동기
: IEEE 1588 PTP 시각 동기
: IEEE 1588 PTP 신호 검출
- IEC 61850 프로토콜
: IEC 61850 GOOSE 신호적합성 확인, 실시간 패킷 display 및 저장
: IEC 61850 SV 신호적합성 확인, 실시간 패킷 display 및 저장
: IEC 61850 GOOSE 및 SV 신호의 네트워크 트래픽, loss, 지연시간, 아날로그 전압, 아날로그 전류 및 Binary 신호 값 측정 및 기록
- SCL(Substation Configuration Language) 지원
: SCL 형태의 파일 입출력을 사용하여 IEC 61850 GOOSE 및 SV를 구성(Configuration) 지원







ADE7880 datasheet 정리

1. 사용 Pin
1) Harmonic
7, 8 IAP, IAN Analog Inputs for Current Channel A.
9, 12 IBP, IBN Analog Inputs for Current Channel B.
13, 14 ICP, ICN Analog Inputs for Current Channel C
2) 순환전류 
15, 16 INP, INN Analog Inputs for Neutral Current Channel N.
3) 누설전류 (VN 제외)
18, 19, 22, 23 VN, VCP, VBP, VAP Analog Inputs for the Voltage Channel. 
4) 인터럽트
29, 32 IRQ0, IRQ1 Interrupt Request Outputs. These are active low logic outputs. 
(1) IRQ0 - 하모닉 관련 .. 레지스터 MASK0, STATUS0
(2) IRQ1 - ZC 관련 .. 레지스터 MASK1, STATUS1


2. POWER MANAGEMENT
PSM0, Normal Power Mode (PM0 : High .. PM1 : Low )

PSM0에서 하드웨어 리셋시
- 모든 레지스터 초기화된다(LPOILVL, CONFIG2 포함)
- I2C enabled
-  DSP is in idle mode.

3. Bit 15 (RSTDONE) in the STATUS1 register
ADE7880은 IRQ1 interrupt pin을 LOW로 만들고  STATUS1 레지스터의 Bit 15 (RSTDONE)를 1로 설정하여 전이 상태(transition period)의 끝을 알린다.
전이 상태 동안 STATUS1 레지스터의 Bit 15 (RSTDONE)는 0을 유지하고, 이 전이 상태가 끝나면 1로된다.
해당 비트가 1로 설정된 상태에서 STATUS1 레지스터에 쓰면 상태 비트가 지워지고 IRQ1 핀이 다시 하이로 설정된다.

STATUS1 레지스터의 비트 15 (RSTDONE)가 1로 설정된 경우 IRQ1 핀이 낮아 지더라도 인터럽트 마스크 레지스터의 비트 15 (RSTDONE)에는 기능이 연결되지 않습니다.
이는 RSTDONE 인터럽트를 마스크 할 수 없게 만든다.

4. POWER-UP PROCEDURE
3.3V 전압이 인가된 후 초기화 시간은 66ms가 필요하다.

5. SPI 사용
(1) When the ADE7880 enters PSM0 mode, the I2C port is the active serial port.
To use the SPI port, toggle the SS/HSA pin three times from high to low.
(2) If SPI is the active serial port, any write to the CONFIG2 register locks the port, 
and a switch to the I2C port is no longer possible

6. Initial the DSP
DSP를 시작하기 전에 (RUN 레지스터를 0x01로 설정) 다음의 쓰기 작업 순서를 수행하십시오
1) 8-bit write: 0xAD is written at Address 0xE7FE.
2) 8-bit write: 0x14 is written at Address 0xE7E2.
3) Wait 200 μs.
4) 8-bit write: 0xAD is written at Address 0xE7FE.
5) 8-bit write: 0x04 is written at Address 0xE7E2.
6) RUN 레지스터를 0x01로 설정

7. ANALOG INPUTS
The ADE7880 has seven analog inputs forming current and voltage channels.
(1) 전류
The current channels consist of four pairs of fully differential voltage inputs:
- IAP and IAN, 
- IBP and IBN, 
- ICP and ICN, 
- and INP and INN. 
These voltage input pairs have a maximum differential signal of ±0.5 V

< Programmable Gain Amplifier (PGA)>
1) Gain 값
All inputs have a programmable gain amplifier (PGA) 
- with a possible gain selection of 1, 2, 4, 8, or 16.
000: gain = 1.
001: gain = 2.
010: gain = 4.
011: gain = 8.
100: gain = 16.
101, 110, 111: reserved

2) Gain 레지스터
PGA1[2:0] : Phase currents gain (IA, IB, and IC )
PGA2[2:0] : Neutral current gain (IN)
PGA3[2:0] : Phase voltages gain 

The gain of IA, IB, and IC inputs is set in Bits[2:0] (PGA1[2:0]) of the Gain register.
The gain of the IN input is set in Bits[5:3] (PGA2[2:0]) of the Gain register;
thus, a different gain from the IA, IB, or IC inputs is possible.

(2) 전압
The voltage channel has three single-ended voltage inputs: 
- VAP,
- VBP, and 
- VCP.
These single-ended voltage inputs have a maximum input voltage of ±0.5 V with respect to VN. 
The maximum signal level on analog inputs for VxP and VN is also ±0.5 V with respect to AGND. 
The maximum common-mode signal allowed on the inputs is ±25 mV. 

8. ANALOG-TO-DIGITAL CONVERSION
In the ADE7880, the sampling clock is equal to 1.024 MHz (CLKIN/16).
and the bandwidth of interest is 40 Hz to 3.3 kHz. 
All ADCs in the ADE7880 are designed to produce the same 24-bit signed output code for the same input signal level. 

값 : 0x800000 (−8,388,608) ~ 0x7FFFFF (+8,388,607)

9. CURRENT CHANNEL ADC
출력 값 형식 : signed twos complement 24-bit data-words
셈플링 : rate of 8 kSPS (thousand samples per second). 

값 : −5,326,737 (0xAEB86F) ~ +5,326,737 (0x514791).

10. Current Waveform Gain Registers 
출력 값 형식 : 24-bit signed current waveform gain registers 
레지스터 : AIGAIN, BIGAIN, CIGAIN, NIGAIN 

For example, 
가. if 0x400000 is written to those registers, the ADC output is scaled up by 50%. 
나. To scalethe input by −50%, write 0xC00000 to the registers. Equation 4

<Equation 4>
Current Waveform = ADCOutput ×(1+ (Content of Current GainRegister/(2^23)))
** 2^23 = 8388608

출력값 형태 
24-Bit xIGAIN Transmitted as 32-Bit Words
(MSB first)
------------------------------------------------
32 ~ 28bit : 0s
27 ~ 24bit  : BITS[27:24] ARE EQUAL TO BIT 23
23 ~  0bit : BIT 23 IS A SIGN BIT
------------------------------------------------

11. Current Channel HPF
High-pass filters (HPFs) 
- 상전류, neutral currents 와 상전압 측정 path에 위치한다.
- DC offset을 재거한다.
- 초기 설정 값은 활성화이다.

레지스터 비트 설정 :
Bit 0 (HPFEN) of the CONFIG3[7:0]
- 1 : 활성화 (default)
- 0 : 비활성화 

12. Current Channel Sampling
HPF의 출력에서 얻는 값
24-bit signed registers에 저장  
샘플링 주파수 :  8 kSPS. 

레지스터 : IAWV, IBWV, ICWV, INWV

읽는 방법
All power and rms calculations remain uninterrupted during this process. 
Bit 17 (DREADY) in the STATUS0 register is set when the IAWV, IBWV, ICWV, and INWV registers are available 
to be read using the I2C or SPI serial port. 
Setting Bit 17 (DREADY) in the MASK0 register enables an interrupt to be set when the DREADY flag is set. 

출력값 형태 
(MSB first)
------------------------------------------------
32 ~ 24bit : BITS[31:24] ARE EQUAL TO BIT 23
23 ~  0bit : BIT 23 IS A SIGN BIT
------------------------------------------------


13. di/dt CURRENT SENSOR AND DIGITAL INTEGRATO
The di/dt sensor detects changes in the magnetic field caused by the ac current. 
관련 레지스터:
- Bit 0 (INTEN)   / CONFIG register
- Bit 3 (ININTEN) / CONFIG3 register. 

Bit 0 (INTEN)   : 상전류 채널(phase current)의  integrators 제어
Bit 3 (ININTEN) : neutral current channel의 integrator제어 

- 0 :  disabled.
- 1 : enabled. 

13.1  DICOEFF 24-bit signed register
재 시동후 초기 값은  0x000000
integrator을 ON 하기 전에 반드시 0xFFF8000로 초기화 하여야 한다.
DICOEFF는 integrator가 turned off 되고  0x000000인 경우에 동작하지 안는다.

입력값 형태 (figure 44)
(MSB first)
------------------------------------------------
32 ~ 28bit : 0s
27 ~ 24bit  : BITS[27:24] ARE EQUAL TO BIT 23
23 ~  0bit : BIT 23 IS A SIGN BIT
------------------------------------------------

When the digital integrator is switched off, the ADE7880 can be used directly with a conventional current sensor, 
such as a current transformer (CT)

14. VOLTAGE CHANNEL ADC
출력 형태 : signed twos complement 24-bit words
샘플링 레이트 : 8 kSPS. 
입력 범위 : full-scale analog input signal of ±0.5 V
ADC 출력 범위 : −5,326,737 (0xAEB86F) ~ +5,326,737 (0x514791)


15. Voltage Waveform Gain Registers 
입력 형태 : 24-bit signed voltage waveform gain registers 
레지스터 : AVGAIN, BVGAIN, CVGAIN

For example, 
if 0x400000 is written to those registers, the ADC output is scaled up by 50%.
To scale the input by −50%, write 0xC00000 to the registers. 

< Equation 5 >
Voltage Waveform = ADC Output × (1+ (Content of Voltage GainRegister/(2^23))) 
** 2^23 = 8388608

입력값 형태 (figure 44)
32 ZPSE
(MSB first)
------------------------------------------------
32 ~ 28bit : 0s
27 ~ 24bit  : BITS[27:24] ARE EQUAL TO BIT 23
23 ~  0bit : BIT 23 IS A SIGN BIT
------------------------------------------------

16. Voltage Channel HPF
레지스터 : Bit 0 (HPFEN) / CONFIG3 register
- 1 : 활성화
- 0 : 비활성화
Current Channel HPF section 참조 

17. Voltage Channel Sampling
HPF의 출력값 
샘플링 : 8 kSPS. 
레지스터 : VAWV, VBWV, VCWV (24-bit signed registers)

읽는 방법
STATUS0 레지스터의 Bit 17 (DREADY)은 VAWV, VBWV 및 VCWV 레지스터를 읽을 수 있는 경우 설정됩니다.
MASK0 레지스터의 비트 17 (DREADY)을 설정하면 DREADY 플래그가 설정 될 때 인터럽트를 설정할 수 있습니다.

17. CHANGING PHASE VOLTAGE DATA PATH
The ADE7880 can direct one phase voltage input to the computational data path of another phase. 

For example, 
Phase A voltage can be introduced in the Phase B computational data path,
which means all powers computed by the ADE7880 in Phase B are based on Phase A voltage and Phase B current.

Bits[9:8] (VTOIA[1:0]) of the CONFIG register manage which phase voltage is directed to the Phase A computational data path.
If VTOIA[1:0] = 00 (default value), the Phase A voltage is directed to the Phase A computational data path. 
If VTOIA[1:0] = 01, the Phase B voltage is directed to the Phase A computational data path. 
If VTOIA[1:0] = 10, the Phase C voltage is directed to the Phase A computational data path. 
If VTOIA[1:0] = 11, the ADE7880 behaves as if VTOIA[1:0] = 00.

Bits[11:10] (VTOIB[1:0]) of the CONFIG register manage which phase voltage is directed to the Phase B computational data path. 
If VTOIB[1:0] = 00 (default value), the Phase B voltage is directed to the Phase B computational data path.
If VTOIB[1:0] = 01, the Phase C voltage is directed to the Phase B computational data path. 
If VTOIB[1:0] = 10, the Phase A voltage is directed to the Phase B computational data path. 
If VTOIB[1:0] = 11, the ADE7880 behaves as if VTOIB[1:0] = 00.

Bits[13:12] (VTOIC[1:0]) of the CONFIG register manage which phase voltage is directed to the Phase C computational data path. 
If VTOIC[1:0] = 00 (default value), the Phase C voltage is directed to the Phase C computational data path, 
if VTOIC[1:0] = 01, the Phase A voltage is directed to the Phase C computational data path. 
If VTOIC[1:0] = 10, the Phase B voltage is directed to the Phase C computational data path. 
If VTOIC[1:0] = 11, the ADE7880 behaves as if VTOIC[1:0] = 00.


18. DIGITAL SIGNAL PROCESSOR

<DSP 연산 종료>
연산 종료는 STATUS0 레지스터에서 비트 17 (DREADY)을 1로 설정하여 신호를 보냅니다.

<인터럽트 사용>
이 플래그에 첨부 된 인터럽트는 MASK0 레지스터에서 비트 17 (DREADY)을 설정하여 활성화 할 수 있습니다.
활성화되면 IRQ0 핀이 낮게 설정되고 계산 종료시 상태 비트 DREADY가 1로 설정됩니다.
비트 17 (DREADY)이 1로 설정된 상태에서 STATUS0 레지스터에 쓰면 상태 비트가 지워지고 IRQ0 핀이 high로 설정됩니다.

DSP에 의해 사용되는 레지스터 범위 : 0x4380 ~ 0x43BE

이것은 두 가지를 의미합니다.
- 하나의 레지스터 만 초기화해야하는 경우 RAM에 값이 기록되도록 두 번 더 기록하십시오.
- 두 개 이상의 레지스터를 초기화해야하는 경우 값을 RAM에 쓰도록 큐의 마지막 레지스터를 두 번 더 쓰십시오.

전원을 켤 때 또는 하드웨어 또는 소프트웨어를 재설정 한 후 전원 켜기 절차 섹션에 설명 된대로 DSP는 유휴 모드입니다.
명령이 실행되지 않습니다. 데이터 메모리 RAM에있는 모든 레지스터는 기본값 인 0으로 초기화되며 제한없이 읽거나 쓸 수 있습니다.

DSP를 시작하고 중지하는 데 사용되는 Run 레지스터는 0x0000으로 지워집니다.

DSP가 코드 실행을 시작하려면 Run 레지스터를 0x0001로 기록해야합니다.

먼저 데이터 메모리 RAM에있는 모든 ADE7880 레지스터를 원하는 값으로 초기화하는 것이 좋습니다.

그런 다음 파이프 라인을 플러시하기 위해 큐에 마지막 레지스터를 두 번 더 쓴 다음 0x0001로 실행 레지스터를 씁니다.
이러한 방식으로 DSP는 원하는 구성에서 계산을 시작합니다.


** 0xE228 / Run / unsigned 16bit length : Run register starts and stops the DSP


< 쓰기 보호 모드 >
DSP의 데이터 메모리 RAM (주소 0x4380과 주소 0x43BE 사이)에 저장된 데이터의 무결성을 보호하기 위해 쓰기 방지 메커니즘을 사용할 수 있습니다.
기본적으로 보호는 비활성화되어 있으며 0x4380과 0x43BE 사이에있는 레지스터는 제한없이 쓸 수 있습니다.
보호가 활성화되면 이러한 레지스터에 대한 쓰기가 허용되지 않습니다.

쓰기 방지 상태에 관계없이 레지스터를 항상 제한없이 읽을 수 있습니다.

- 보호 모드 활성화
내부 8 비트 레지스터
1) 0xAD (Address 0xE7FE)
2) 0x80 (Address 0xE7E3)
    - 보호 모드 비활성화
1) 0xAD (Address 0xE7FE)
2) 0x00 (Address 0xE7E3)

DSP를 시작하기 전에 쓰기 방지를 활성화하는 것이 좋습니다.
데이터 메모리 RAM 기반 레지스터를 변경해야하는 경우 보호를 비활성화하고 값을 변경 한 다음 보호를 다시 활성화하십시오.
이러한 레지스터를 변경하기 위해 DSP를 중지 할 필요는 없습니다.

< Initial the DSP >
DSP를 시작하기 전에 (RUN 레지스터를 0x01로 설정) 다음의 쓰기 작업 순서를 수행하십시오
1) 8-bit write: 0xAD is written at Address 0xE7FE.
2) 8-bit write: 0x14 is written at Address 0xE7E2.
3) Wait 200 μs.
4) 8-bit write: 0xAD is written at Address 0xE7FE.
5) 8-bit write: 0x04 is written at Address 0xE7E2.
6) RUN 레지스터를 0x01로 설정


19. ADE7880 시동시 레지스터 초기화 절차 :

1) PGA 설정 
Select the PGA gains in the phase currents, voltages, and neutral current channels: 
Bits [2:0] (PGA1), Bits [5:3] (PGA2) and Bits [8:6] (PGA3) in the Gain register.
2) digital integrator 활성화
If Rogowski coils are used, enable the digital integrators in the phase and neutral currents:
Bit 0 (INTEN) set to 1 in CONFIG register. 
Initialize DICOEFF register to 0xFF8000 before setting the INTEN bit in the CONFIG register.
3) Bit 14 (SELFREQ) / COMPMODE register 설정
If fn is between 55 Hz and 66 Hz, set Bit 14 (SELFREQ) in COMPMODE register.
4) 모든 레지스터(memory RAM registers)를 초기화 한다.
Initialize all the other data memory RAM registers. 
Write the last register in the queue three times to ensure that its value is written into the RAM.
5) 레지스터 (WTHR, VARTHR, VATHR, VLEVEL, VNOM) 초기화
Initialize WTHR, VARTHR, VATHR, VLEVEL and VNOM registers based on 
- Equation 26, 
- Equation 37, 
- Equation 44, 
- Equation 22, and 
- Equation 42, respectively.
6) 레지스터 CF1DEN, CF2DEN, CF3DEN 초기화 
Initialize CF1DEN, CF2DEN, and CF3DEN based on 
- Equation 49.

- CF1DEN : CF1 denominator.

7) data memory RAM 보호 모드 설정 
- 보호 모드 활성화
1) 0xAD (Address 0xE7FE)
2) 0x80 (Address 0xE7E3)

Enable the data memory RAM protection 
by writing 0xAD to an internal 8-bit register located at Address 0xE7FE 
followed by a write of 0x80 to an internal 8-bit register located at Address 0xE7E3.

8) RAM 레지스터 초기화 
원하는 값으로 초기화되도록 모든 데이터 메모리 RAM 레지스터를 다시 읽습니다.
하나 이상의 레지스터가 올바르게 초기화되지 않는 경우 주소 0xE7FE에있는 내부 8 비트 레지스터에 0xAD를 기록한 다음 
주소 0xE7E3에있는 내부 8 비트 레지스터에 0x00을 기록하여 보호를 비활성화하십시오.
레지스터를 다시 초기화하고 큐의 마지막 레지스터를 세 번 씁니다.
0xAD를 Address 0xE7FE에있는 내부 8 비트 레지스터에 쓴 다음 0x80을 Address 0xE7E3에있는 내부 8 비트 레지스터에 쓴 다음 쓰기 방지를 활성화하십시오.

9) DSP Start
Start the DSP by setting Run = 1.

10) xWATTHR, xVAHR, xFWATTHR, xFVARHR 레지스터 읽고 시작.
Read the energy registers xWATTHR, xVAHR, xFWATTHR, and xFVARHR 
to erase their content and start energy accumulation from a known state.

11) CF1, CF2 and CF3 frequency converter outputs 활성화 
CFMODE 레지스터에서 bit 9, 10 및 11 (CF1DIS, CF2DIS 및 CF3DIS)을 0으로 지워서 CF1, CF2 및 CF3 주파수 변환기 출력을 활성화합니다.
Enable the CF1, CF2 and CF3 frequency converter outputs by clearing bits 9, 10 and 11
(CF1DIS, CF2DIS, and CF3DIS) to 0 in CFMODE register.

ADE7880이 PSM0 일반 모드로 유지되는 경우 DSP를 중지 할 분명한 이유가 없습니다.
데이터 메모리 RAM에있는 것을 포함한 모든 ADE7880 레지스터는 DSP를 멈추지 않고 수정할 수 있습니다. 
그러나 DSP를 중지하려면 Run 레지스터에 0x0000을 씁니다. 

DSP를 다시 시작하려면 다음 절차 중 하나를 수행하십시오.
• 데이터 메모리 RAM에있는 ADE7880 레지스터가 수정되지 않은 경우 0x0001을 Run 레지스터에 기록하여 DSP를 시작하십시오.
• 데이터 메모리 RAM에있는 ADE7880 레지스터를 수정해야하는 경우 먼저 소프트웨어 또는 하드웨어 리셋을 실행하고 모든 ADE7880 레지스터를 원하는 값으로 초기화 한 다음 활성화하십시오.

쓰기 보호 후 0x0001을 Run 레지스터에 기록하여 DSP를 시작하십시오.

20. ADE7880 QUICK SETUP AS ENERGY METER
An energy meter is usually characterized by the nominal current In, nominal voltage Vn, nominal frequency fn, and the meter constant MC.

To quickly set up the ADE7880, execute the following steps:
1. Select the PGA gains in the phase currents, voltages and neutral current channels: 
Bits[2:0] (PGA1), 
Bits[5:3] (PGA2) and 
Bits[8:6] (PGA3) 
in the Gain register.
2. If Rogowski coils are used, 
enable the digital integrators in the phase and neutral currents: 
Bit 0 (INTEN)set to 1 in the CONFIG register. 
Initialize the DICOEFF register to 0xFF8000 
before setting the INTEN bit in the CONFIG register.
3. If fn is between 55 Hz and 66 Hz, 
set Bit 14 (SELFREQ) in the COMPMODE register.
4. Initialize all the other data memory RAM registers. 
Write the last register in the queue three times to ensure that its value is written into the RAM.
5. Initialize the WTHR, VARTHR, VATHR, VLEVEL and VNOM registers 
based on Equation 26, Equation 37, Equation 44, Equation 22, and Equation 42, respectively.

default)
WTHR = VARTHR = VATHR = 3
VNOM = 0
VLEVEL = 0

6. Initialize CF1DEN, CF2DEN, and CF3DEN based on Equation 49.
7. Enable the data memory RAM protection 
by writing 0xAD to an internal 8-bit register located at Address 0xE7FE 
followed by a write of 0x80 to an internal 8-bit register located at Address 0xE7E3.
8. Read back all data memory RAM registers to ensure that they initialized with the desired values. 
If one or more registers did not initialize correctly, disable the protection 
by writing 0xAD to an internal 8-bit register at Address 0xE7FE, 
followed by a write of 0x00 to an internal 8-bit register located at Address 0xE7E3. 
Reinitialize the registers, and write the last register in the queue three times. 
Enable the write protection 
by writing 0xAD to an internal 8-bit register located at Address 0xE7FE, 
followed by a write of 0x80 to an internal 8-bit register located at Address 0xE7E3.
9. Start the DSP by setting Run = 1.
10. Read the energy registers xWATTHR, xVAHR, xFWATTHR, and xFVARHR
to erase their content and start energy accumulation from a known state.
11. Enable the CF1, CF2, and CF3 frequency converter outputs 
by clearing bits 9, 10, and 11 (CF1DIS, CF2DIS, and CF3DIS) to 0 in the CFMODE register.

For a quick setup of the ADE7880 harmonic calculations, see the Recommended Approach to Managing Harmonic Calculations section





21. Interrupt

2개의 인터럽트 핀 : /IRQ0, /IRQ1
2개의 32-bit interrupt mask registers : MASK0, MASK1
- enable  : 1
- disable : 0
2개의 32-bit status registers : STATUS0, STATUS1

When an interrupt event occurs
in the ADE7880, the corresponding flag in the interrupt status
register is set to a logic 1 (see Table 36 and Table 37).

인터럽트 이벤트가 발생하면 interrupt status register 에 있는 관련 flag가 1로 설정된다.
- Table 36 STATUS0 Register (Address 0xE502)
- Table 37 STATUS1 Register (Address 0xE503)

1) 인터럽트 발생
인터럽트 마스크 레지스터에서이 인터럽트에 대한 마스크 비트가 로직 1이면 IRQx 로직 출력이 액티브 로우가됩니다.
인터럽트 상태 레지스터의 플래그 비트는 마스크 비트의 상태에 관계없이 설정된다.
2) 인터럽트 식별
인터럽트 소스를 확인하려면 MCU가 해당 STATUSx 레지스터를 읽고 1로 설정된 비트를 식별해야합니다.
3) 인터럽트 해지
상태 레지스터에서 플래그를 지우려면 플래그가 1로 설정된 상태에서 STATUSx 레지스터에 다시 씁니다.
인터럽트 핀이 로우가되면 상태 레지스터를 읽고 인터럽트 소스를 식별합니다.
그런 다음 상태 플래그를 변경하지 않고 상태 플래그를 다시 기록하여 상태 플래그를 0으로 지 웁니다.
IRQx 핀은 상태 플래그가 취소 될 때까지 낮게 유지됩니다.

4) 인터럽트 기본값
기본적으로 모든 인터럽트는 비활성화되어 있습니다.
5) RSTDONE 인터럽트
그러나 RSTDONE 인터럽트는 예외입니다.
이 인터럽트는 마스킹 (비활성화) 될 수 없으므로 MASK1 레지스터의 비트 15 (RSTDONE)에는 기능이 없습니다.
IRQ1 핀은 항상 로우가되고 STATUS1 레지스터의 비트 15 (RSTDONE)는 전원 공급 또는 하드웨어 / 소프트웨어 리셋 프로세스가 종료 될 때마다 1로 설정됩니다.
상태 플래그를 취소하려면 비트 15 (RSTDONE)를 1로 설정하여 STATUS1 레지스터를 작성해야합니다.

6) MASK 레지스터의 다른 상태 레지스터와 연동  
특정 인터럽트는 다른 상태 레지스터와 함께 사용됩니다.

MASK1 레지스터의 다음 비트는 PHNOLOAD 레지스터의 상태 비트와 함께 작동합니다.
• Bit 0 (NLOAD) : The phase is indicated in Bits[2:0] (NLPHASE[x]) in the PHNOLOAD register (see Table 41.)
• Bit 1 (FNLOAD) : The phase is indicated in Bits[5:3] (FNLPHASE[x]) in the PHNOLOAD register (see Table 41).
• Bit 2 (VANLOAD) : The phase is indicated in Bits[8:6] (VANLPHASE[x]) in the PHNOLOAD register (see Table 41).

MASK1 레지스터의 다음 비트는 PHSTATUS 레지스터의 상태 비트와 함께 작동합니다.
• Bit 16, (SAG) : The phase is indicated by Bits[14:12] (VSPHASE[x]) in the PHSTATUS register (see Table 40).
• Bit 17 (OI) : occurred on one of the phases indicated by Bits[5:3] (OIPHASE[x]) in the PHSTATUS register (see Table 40).
• Bit 18 (OV) : occurred on one of the phases indicated by Bits[11:9] (OVPHASE[x]) in the PHSTATUS register (see Table 40).

MASK1 레지스터의 다음 비트는 각각 IPEAK 및 VPEAK 레지스터의 상태 비트와 작동합니다.
• Bit 23 (PKI)
• Bit 24 (PKV)

MASK0 레지스터의 다음 비트는 PHSIGN 레지스터의 상태 비트와 함께 작동합니다.
• Bits[6:8] (REVAPx)
• Bits[10:12] (REVRPx)
• Bit 9, Bit 13, and Bit 18 (REVPSUMx)

STATUSx 레지스터를 읽고이 비트 중 하나를 1로 설정하면
비트와 연관된 상태 레지스터는 인터럽트를 트리거 한 위상을 식별하기 위해 즉시 읽히고 그 시점에서만 비트가 1로 설정된 상태에서 STATUSx 레지스터를 다시 쓸 수 있습니다.


21-1. Using the Interrupts with an MCU
시간 t1에서 IRQx 핀은 액티브 로우가되어 ADE7880에서 하나 이상의 인터럽트 이벤트가 발생했음을 나타내며,이 시점에서 다음 단계를 수행하십시오.

1. IRQx 핀을 MCU의 네거티브 에지 트리거 외부 인터럽트에 연결하십시오.
2. 네거티브 에지가 감지되면, ISR (Interrupt Service Routine) 실행을 시작하도록 MCU를 구성하십시오.
3. ISR에 들어가면, 전역 인터럽트 마스크 비트를 사용하여 모든 인터럽트를 비활성화합니다. 
이 시점에서 현재 외부 ISR 중에 발생하는 인터럽트 이벤트를 캡처하기 위해 MCU 외부 인터럽트 플래그를 지울 수 있습니다.
4. MCU 인터럽트 플래그가 지워지면 인터럽트 상태 레지스터 인 STATUSx에서 읽습니다.
인터럽트 상태 레지스터 내용은 인터럽트 소스를 결정하는 데 사용되므로 적절한 조치를 취해야합니다.
5. 동일한 STATUSx 컨텐츠가 ADE7880에 다시 기록되어 상태 플래그를 지우고 IRQx 라인을 로직 하이 (t2)로 재설정합니다.

<Interrupt Management>
1) /IRQx -> polling
2) JUMP TO ISR
3) GLOBAL INTERRUPT MASK
4) CLEAR MCU INTERRUPT FLAG
5) READ STATUSx
Option 5-1) READ PHx : (when PHSTATUS, IPEAK, VPEAK, or PHSIGN Registers are Involved)
6) WRITE BACK STATUSx
7) /IRQx -> raising
8) ISR ACTION (BASED ON STATUSx CONTENTS)
9) ISR RETURN GLOBAL INTERRUPT MASK RESET
10) JUMP TO ISR


23. Communication Verification
ADE7880에는 I2C 또는 SPI를 통한 통신을 확인할 수있는 3 개의 레지스터 세트가 포함되어 있습니다.
- LAST_OP (주소 0xEA01)
- LAST_ADD (주소 0xE9FE)
- LAST_RWDATA 레지스터 [8bit/16bit/32bit]

LAST_RWDATA 레지스터에는 성공적인 통신 길이에 따라 3 개의 개별 주소가 있습니다.

ADE7880과 성공적으로 통신 한 후 마지막으로 액세스 한 레지스터의 주소가 16 비트에 저장됩니다.
LAST_ADD 레지스터 (주소 0xE9FE).
다음 읽기 또는 쓰기가 완료 될 때까지 값을 저장하는 읽기 전용 레지스터입니다.
LAST_OP 레지스터 (주소 0xEA01)는 작업의 특성을 저장합니다.
즉, 읽기 또는 쓰기가 수행되었는지 여부를 나타냅니다.

마지막 작업이 쓰기 인 경우 LAST_OP 레지스터는 0xCA 값을 저장합니다.
마지막 작업이 읽기 인 경우 LAST_OP 레지스터는 0x35 값을 저장합니다.

LAST_RWDATA 레지스터는 레지스터에서 쓰거나 읽은 데이터를 저장합니다.
실패한 읽기 또는 쓰기 작업은이 레지스터에 반영되지 않습니다.
LAST_OP, LAST_ADD 및 LAST_RWDATA 레지스터를 읽을 때 해당 값은 자체적으로 저장되지 않습니다.



< 41페이지 RMS >
[ ROOT MEAN SQUARE MEASUREMENT ]


22. Current RMS Calculation
현재 rms 값은 부호있는 24 비트 값
AIRMS, BIRMS, CIRMS, NIRMS 레지스터에 저장됩니다.
현재 rms 측정의 업데이트 속도는 8kHz입니다.

1) 레지스터
AIRMS, BIRMS, CIRMS, NIRMS

2) 활성화 설정
- bit 2 (INSEL) / CONFIG3 레지스터
- 0 : (default)

If Bit 2 (INSEL) of the CONFIG3 register is 0 (default), the NIRMS register contains the rms value of the neutral current.
If the INSEL bit is 1, the NIRMS register contains the rms value of the sum of the instantaneous values of the phase currents.
CONFIG3 레지스터의 비트 2 (INSEL)가 0 (기본값) 인 경우 NIRMS 레지스터는 중성 전류의 rms 값을 포함합니다.
INSEL 비트가 1 인 경우 NIRMS 레지스터에는 위상 전류의 순간 값 합계의 rms 값이 포함됩니다.

0.5V의 지정된 풀 스케일 아날로그 입력 신호로 ADC는 약 ± 5,326,737의 출력 코드를 생성합니다.
풀 스케일 정현파 신호의 등가 rms 값은 라인 주파수와 상관없이 3,766,572 (0x39792C)입니다.

적분기가 활성화 된 경우,
즉 CONFIG 레지스터의 비트 0 (INTEN)이 1로 설정된 경우 
- 50Hz에서 풀 스케일 사인파 신호의 해당 rms 값은 3,759,718 (0x395E66)이고 
- 60Hz에서 3,133,207 (0x2FCF17) .

2) 측정을 위해 안정화 되는 시간 
DSP RUN(RUN register is set to 0x01) 후에 약1.3초

IRQ1 인터럽트는 제로 크로싱이 발생한 시점을 나타내는 데 사용할 수 있습니다 (인터럽트 섹션 참조).

표 12는 I rms 측정을위한 안정화 시간을 보여줍니다. 
이는 rms 레지스터가 0에서 풀 스케일로 시작할 때 현재 채널에 대한 입력의 99.5 % 내에서 안정화되는 데 걸리는 시간입니다.

--------------------------------------------------------------------
Table 12. Settling Time for I rms Measurement
--------------------------------------------------------------------
Integrator Status 50 Hz Input Signals 60 Hz Input Signals
--------------------------------------------------------------------
Integrator Off 580 ms 580 ms
Integrator On 700 ms 700 ms
--------------------------------------------------------------------

그러나 IC 전원 공급 및 DSP 리셋의 경우 FS / 1000 신호가 99.5 % 정산되기 위해 RUN 레지스터가 0x01로 설정되는 순간부터 약 1.3 초가 소요됩니다.

3) 값
(MSB first)
--------------------------------------------------------------------
32 ~ 24bit : 0s (0000 0000)
23 ~  0bit : 24-BIT NUMBER / 24-bit signed registers 
--------------------------------------------------------------------

23. Current RMS Offset Compensation
레지스터 : AIRMSOS, BIRMSOS, CIRMSOS, NIRMSOS. 
These are 24-bit signed registers


(MSB First)
--------------------------------------------------------------------
32 ~ 28bit : 0s
27 ~ 24bit  : BITS[27:24] ARE EQUAL TO BIT 23
23 ~  0bit : BIT 23 IS A SIGN BIT
--------------------------------------------------------------------

24. Current Mean Absolute Value(mav) Calculation

레지스터 : AIMAV, BIMAV, CIMAV
업데이트 주기 : 8 kHz.
unsigned 20-bit values

(MSB First)
--------------------------------------------------------------------
32 ~ 21bit : 0s (0000 0000 0000)
19 ~  0bit : 20-BIT UNSIGNED NUMBER
--------------------------------------------------------------------

25. Current MAV Gain and Offset Compensation

26. Voltage Channel RMS Calculation

레지스터 : AVRMS, BVRMS, CVRMS

업데이트 주기 : 8 kHz
signed 24-bit values

specified full-scale analog input signal of 0.5 V
the ADC produces an output code that is approximately ±5,326,737
The equivalent rms value of a full-scale sinusoidal signal is 3,766,572 (0x39792C) 

안정성을 보장하기 위해 전압 제로 크로싱과 동기식으로 rms 레지스터를 읽는 것이 좋습니다.
IRQ1 인터럽트는 제로 크로싱이 발생한 시점을 나타내는 데 사용할 수 있습니다 (인터럽트 섹션 참조).
Vrms 측정 안정화 시간은 50Hz 및 60Hz 입력 신호 모두에 대해 580ms입니다.
V rms 측정 안정화 시간은 rms 레지스터가 0에서 시작할 때 전압 채널에 대한 입력 값을 반영하는 데 걸리는 시간입니다.

(MSB first)
--------------------------------------------------------------------
32 ~ 24bit : 0s (0000 0000)
23 ~  0bit : 24-BIT NUMBER / 24-bit signed registers 
--------------------------------------------------------------------

27. Voltage RMS Offset Compensation

AVRMSOS, BVRMSOS, CVRMSOS

(MSB first)
--------------------------------------------------------------------
32 ~ 28bit : 0s
27 ~ 24bit  : BITS[27:24] ARE EQUAL TO BIT 23
23 ~  0bit : BIT 23 IS A SIGN BIT
--------------------------------------------------------------------

** 28. Voltage RMS in 3-Phase, 3-Wire Delta Configurations

레지스터 : CONSEL 비트 / ACCMODE 레지스터

상 3 선 델타 구성에서 위상 B는 시스템의 접지로 간주되며 위상 A 및 위상 C 전압이 이에 대해 측정됩니다.
이 구성은 ACCMODE 레지스터에서 01과 동일한 CONSEL 비트를 사용하여 선택됩니다.
(ADE7880을 사용할 수있는 모든 구성은 표 15 참조).
----------------------------------------------
Table 15. Meter Form Configuration
----------------------------------------------
ANSI Meter Form Configuration CONSEL
----------------------------------------------
5S/13S 3-wire delta 01
6S/14S 4-wire wye 10
8S/15S 4-wire delta 11
9S/16S 4-wire wye 00
----------------------------------------------
이 상황에서 모든 B 상 활성, 무효 및 피상 전력은 0입니다.

이 구성에서 ADE7880은 Phase A와 Phase C 사이의 라인 전압의 rms 값을 계산하고 결과를 BVRMS 레지스터에 저장합니다.

BVGAIN 및 BVRMSOS 레지스터는이 구성에서 계산 된 BVRMS 레지스터를 교정하는 데 사용될 수 있습니다.

[ACTIVE POWER CALCULATION]

[APPARENT POWER CALCULATION]

[POWER FACTOR CALCULATION]

[HARMONICS CALCULATIONS]
1. Configuring the Harmonic Calculations
1) this phase voltage 선택
레지스터 : Bit 9 and Bit 8 (ACTPHSEL) / HCONFIG[15:0]register
ACTPHSEL = 00, phase A
ACTPHSEL = 01, Phase B
ACTPHSEL = 10, Phase C 

2) The phase under analysis 선택 
레지스터 : Bit 2 and Bit 1 (HPHASE) / HCONFIG[15:0]register
HPHASE = 00, the Phase A
HPHASE = 01, the Phase B
HPHASE = 10, the Phase C
HPHASE = 11, the neutral

2. Harmonic Calculations When a Phase is Monitored

1) 하모닉 차수 설정 레지스터
동시에 모니터링되는 3 개의 추가 고조파의 인덱스는 8 비트 레지스터 HX, HY 및 HZ에 의해 제공됩니다.

2) maximum index (allowed in HX, HY, and HZ register)
63


3. Harmonic Engine Outputs When Phase A, Phase B, or Phase C is Analyzed

1) RMS of the Fundamental Component
FVRMS, FIRMS

2) RMS of a Harmonic Component
HXVRMS, HXIRMS
HYVRMS, HYIRMS
HZVRMS, HZIRMS

3) offset compensation registers:
- HXIRMSOS, HXVRMSOS, 
- HYIRMSOS, HYVRMSOS,
- HZIRMSOS, HZVRMSOS.
It is recommended to leave the offset compensation registers at 0, the default value.

4) Harmonic Engine Outputs when Neutral Current and ISUM are Analyze
RMS of a Harmonic Component (Including the Fundamental) of the Neutral Current : 
- HXIRMS
- HYIRMS
- HZIRMS

5) Harmonic Calculations When the Neutral is Monitored
-- skip --

6) Configuring Harmonic Calculations Update Rate
- harmonic indexes are set in the HX, HY and HZ index registers
- update rate of the harmonic engine
  : Bits[7:5] (HRATE) / HCONFIG register 
- 000 : 125 μs (default) 
- 001 : 250 μs
- 010 : 1 ms
- 011 : 16 ms
- 100 : 128 ms
- 101 : 512 ms
- 110 : 1.024 sec
- 111 : disabled **


The ADE7880 provides two ways to manage the harmonic computations. 

<고조파 계산을 관리하는 두 가지 방법>
레지스터 : 비트 0 (HRCFG) / HCONFIG 레지스터

1) 비트 0 (HRCFG) : 기본값 0
일정 시간이 지난 후 STATUS0 레지스터의 비트 19 (HREADY)를 1로 설정 한 다음 HRATE 주파수에서 고조파 계산이 업데이트 될 때마다 활성화됩니다.

시간은 HCONFIG 레지스터의 비트 [4:3] (HSTIME) 상태에 의해 결정됩니다.
기본값 01은 시간을 750ms, 고조파 계산의 안정화 시간으로 설정합니다.
다른 가능한 값은 500ms (HSTIME = 00), 1 초 (10) 및 1250ms (11)입니다.

2) 비트 0 (HRCFG) : 1
고조파 계산이 완료되기를 기다리지 않고 HRATE 비트에 의해 결정된 업데이트 주파수에서 고조파 계산이 업데이트 될 때마다 STATUS0 레지스터의 비트 19 (HREADY)를 1로 설정합니다.

MASK0 인터럽트 마스크 레지스터의 해당 마스크 비트가 활성화되면 IRQ 핀도 활성 로우가됩니다.
해당 비트가 1로 설정된 상태에서 STATUS0 레지스터에 쓰면 상태 비트가 지워지고 핀 IRQ가 다시 하이로 설정됩니다.

< CF2 / HREADY 핀 사용 >
또한 ADE7880은 고조파 레지스터에서 고조파 계산이 업데이트되는 순간에 동기하여 CF2 / HREADY 핀에서 HREADY라는 주기적인 출력 신호를 제공합니다.

이 기능은 CONFIG 레지스터에서 비트 2 (CF2DIS)가 1로 설정된 경우에 선택됩니다. CF2DIS가 0 (기본값)으로 설정되면 CF2 에너지 대 주파수 변환기 출력은 CF2 / HREADY 핀에 제공됩니다. 이 신호의 기본 상태는 높습니다.

HCONFIG 레지스터의 HRATE 비트를 기준으로 고조파 레지스터가 업데이트 될 때마다 신호 HREADY가 약 10 µs 동안 낮아지고 다시 높아집니다. HCONFIG 레지스터의 비트 0 (HRCFG)이 1로 설정된 경우, STATUS0 레지스터의 HREADY 비트는 고조파 계산이 시작된 직후 HRATE주기마다 1로 설정되며 HREADY 신호는 동기적으로 높음, 낮음 및 뒤로 토글됩니다.

HRCFG 비트가 0으로 설정되면 HSTIME 기간 후에 STATUS0 레지스터의 HREADY 비트가 1로 설정되고 HREADY 신호는 동 높음, 낮음 및 뒤로 전환됩니다.

HREADY 신호를 사용하면 MASK0 레지스터에서 HREADY 인터럽트를 사용할 필요없이 고조파 레지스터에 빠르게 액세스 할 수 있습니다,


7. Recommended Approach to Managing Harmonic Calculations
The recommended approach to managing the ADE7880 harmonic calculations is the following:
• Set up Bit 2 (CF2DIS) in the CONFIG register. 
Set the CF2DIS bit to 1 to use the CF2/HREADY pin to signal when the harmonic calculations have settled and are updated. 
The high to low transition of HREADY signal indicates when to read the harmonic registers. 
Use the burst reading mode to read the harmonic registers as it is the most efficient way to read them.
• Choose the harmonics to be monitored by setting HX, HY and HZ appropriately.
• Select all the HCONFIG register bits.
• Initialize the gain registers used in the harmonic calculations. Leave the offset registers to 0.
• Read the registers in which the harmonic information is stored using the burst or regular reading mode at high to low transitions of CF2/HREADY pin.

ADE7880 고조파 계산 관리에 권장되는 접근 방식은 다음과 같습니다.
• CONFIG 레지스터에서 비트 2 (CF2DIS)를 설정하십시오.
고조파 계산이 완료되고 업데이트 될 때 CF2 / HREADY 핀을 사용하여 신호를 보내려면 CF2DIS 비트를 1로 설정하십시오.
HREADY 신호의 하이에서 로우 전환은 고조파 레지스터를 읽을시기를 나타냅니다.
버스트 판독 모드를 사용하면 가장 효율적인 고조파 레지스터이므로 고조파 레지스터를 읽을 수 있습니다.
• HX, HY 및 HZ를 적절히 설정하여 모니터링 할 고조파를 선택하십시오.
• 모든 HCONFIG 레지스터 비트를 선택하십시오.
• 고조파 계산에 사용 된 게인 레지스터를 초기화하십시오. 오프셋 레지스터를 0으로 두십시오.
• CF2 / HREADY 핀의 하이에서 로우 트랜지션으로 버스트 또는 일반 읽기 모드를 사용하여 고조파 정보가 저장된 레지스터를 읽습니다.

[ WAVEFORM SAMPLING MODE ]
The waveform samples of the current and voltage waveform, the active, reactive, and apparent power outputs are stored every 125 µs (8 kHz rate) into 24-bit signed registers that can be accessed through various serial ports of the ADE7880. 
Table 22 provides a list of registers and their descriptions.

------------------------------------------
Waveform Registers List (table 22)
------------------------------------------
IAWV Phase A current
VAWV Phase A voltage
IBWV Phase B current
VBWV Phase B voltage
ICWV Phase C current
VCWV Phase C voltage
INWV Neutral current
AVA Phase A apparent power
BVA Phase B apparent power
CVA Phase C apparent power
AWATT Phase A active power
BWATT Phase B active power
CWATT Phase C active power
------------------------------------------

Bit 17 (DREADY) in the STATUS0 register can be used to
signal when the registers listed in Table 22 can be read using
I2C or SPI serial ports. An interrupt attached to the flag can be
enabled by setting Bit 17 (DREADY) in the MASK0 register. (see
the Digital Signal Processor section for more details on
Bit DREADY).

As stated in the Current Waveform Gain Registers section, the
serial ports of the ADE7880 work on 32-, 16-, or 8-bit words.
All registers listed in Table 22 are transmitted signed extended
from 24 bits to 32 bits (see Figure 45).

(MSB first)
------------------------------------------------
32 ~ 24bit : BITS[31:24] ARE EQUAL TO BIT 23
23 ~  0bit : BIT 23 IS A SIGN BIT
------------------------------------------------


[ ENERGY-TO-FREQUENCY CONVERSION ]


[INTERRUPTS]
The ADE7880 has two interrupt pins, IRQ0 and IRQ1. 
Each of the pins is managed by a 32-bit interrupt mask register, MASK0 and MASK1, respectively. 
To enable an interrupt, a bit in the MASKx register must be set to 1. 
To disable it, the bit must be cleared to 0. Two 32-bit status registers, STATUS0 and STATUS1, are associated with the interrupts. 

When an interrupt event occurs in the ADE7880, the corresponding flag in the interrupt status register is set to a logic 1 (see Table 36 and Table 37). 

If the mask bit for this interrupt in the interrupt mask register is logic 1, then the IRQx logic output goes active low. 
The flag bits in the interrupt status register are set irrespective of the state of the mask bits. 

To determine the source of the interrupt, the MCU must perform a read of the corresponding STATUSx register and identify which bit is set to 1. To erase the flag in the status register, write back to the STATUSx register with the flag set to 1. 

After an interrupt pin goes low, the status register is read and the source of the interrupt is identified. Then, the status register is written back without any change to clear the status flag to 0. 
The IRQx pin remains low until the status flag is cancelled.

By default, all interrupts are disabled. However, the RSTDONE interrupt is an exception. This interrupt can never be masked (disabled) and, therefore, Bit 15 (RSTDONE) in the MASK1 register does not have any functionality. 
The IRQ1 pin always goes low, and Bit 15 (RSTDONE) in the STATUS1 register is set to 1 whenever a power-up or a hardware/software reset process ends. 
To cancel the status flag, the STATUS1 register has to be written with Bit 15 (RSTDONE) set to 1.
Certain interrupts are used in conjunction with other status registers. 

The following bits in the MASK1 register work in conjunction with the status bits in the PHNOLOAD register:
• Bit 0 (NLOAD)
• Bit 1 (FNLOAD)
• Bit 2 (VANLOAD)
The following bits in the MASK1 register work with the status bits in the PHSTATUS register:
• Bit 16, (SAG)
• Bit 17 (OI)
• Bit 18 (OV)
The following bits in the MASK1 register work with the status bits in the IPEAK and VPEAK registers, respectively:
• Bit 23 (PKI)
• Bit 24 (PKV)
The following bits in the MASK0 register work with the status bits in the PHSIGN register:
• Bits[6:8] (REVAPx)
• Bits[10:12] (REVRPx)
• Bit 9, Bit 13, and Bit 18 (REVPSUMx)

When the STATUSx register is read and one of these bits is set to 1, the status register associated with the bit is immediately read to identify the phase that triggered the interrupt and only at that time can the STATUSx register be written back with the bit set to 1.

Using the Interrupts with an MCU Figure 101 shows a timing diagram that illustrates a suggested implementation of the ADE7880 interrupt management using an MCU. 

At Time t1, the IRQx pin goes active low indicating that one or more interrupt events have occurred in the ADE7880, at which point, take the following steps:
1. Tie the IRQx pin to a negative-edge-triggered external interrupt on the MCU.
2. On detection of the negative edge, configure the MCU to start executing its interrupt service routine (ISR).
3. On entering the ISR, disable all interrupts using the global interrupt mask bit. At this point, the MCU external interrupt flag can be cleared to capture interrupt events that occur during the current ISR.
4. When the MCU interrupt flag is cleared, a read from STATUSx, the interrupt status register, is carried out. The interrupt status register content is used to determine the source of the interrupt(s) and, therefore, the appropriate action to be taken.
5. The same STATUSx content is written back into the ADE7880 to clear the status flag(s) and reset the IRQx line to logic high (t2).

If a subsequent interrupt event occurs during the ISR (t3), that event is recorded by the MCU external interrupt flag being
set again.
On returning from the ISR, the global interrupt mask bit is cleared (same instruction cycle) and the external interrupt flag uses the MCU to jump to its ISR once again. 
This ensures that the MCU does not miss any external interrupts.

Figure 102 shows a recommended timing diagram when the status bits in the STATUSx registers work in conjunction with bits in other registers. When the IRQx pin goes active low, the STATUSx register is read, and if one of these bits is 1, a second status register is read immediately to identify the phase that triggered the interrupt. 
The name, PHx, in Figure 102 denotes one of the PHSTATUS, IPEAK, VPEAK, or PHSIGN registers.
Then, STATUSx is written back to clear the status flag(s).

---------------------------------------------------------------------

ADE7880에는 IRQ0 및 IRQ1의 두 개의 인터럽트 핀이 있습니다.
각 핀은 각각 32 비트 인터럽트 마스크 레지스터 MASK0 및 MASK1에 의해 관리됩니다.
인터럽트를 활성화하려면 MASKx 레지스터의 비트를 1로 설정해야합니다.
이를 비활성화하려면 비트를 0으로 지워야합니다. 

두 개의 32 비트 상태 레지스터 인 STATUS0 및 STATUS1은 인터럽트와 연관되어 있습니다.
인터럽트 이벤트가 발생하면 인터럽트 상태 레지스터의 해당 플래그가 로직 1로 설정됩니다 (표 36 및 표 37 참조).

인터럽트 마스크 레지스터에서이 인터럽트에 대한 마스크 비트가 로직 1이면 IRQx 로직 출력이 액티브 로우가됩니다.

인터럽트 상태 레지스터의 플래그 비트는 마스크 비트의 상태에 관계없이 설정된다.

인터럽트 소스를 확인하려면 MCU가 해당 STATUSx 레지스터를 읽고 어떤 비트가 1로 설정되어 있는지 확인해야합니다. 

상태 레지스터에서 플래그를 지우려면 플래그가 1로 설정된 상태에서 STATUSx 레지스터에 다시 씁니다.

인터럽트 핀이 로우가되면 상태 레지스터를 읽고 인터럽트 소스를 식별합니다. 
그런 다음 상태 플래그를 변경하지 않고 상태 플래그를 다시 기록하여 상태 플래그를 0으로 지 웁니다.
IRQx 핀은 상태 플래그가 취소 될 때까지 낮게 유지됩니다.

기본적으로 모든 인터럽트는 비활성화되어 있습니다. 
그러나 RSTDONE 인터럽트는 예외입니다. 
이 인터럽트는 마스킹 (비활성화) 될 수 없으므로 MASK1 레지스터의 비트 15 (RSTDONE)에는 기능이 없습니다.
IRQ1 핀은 항상 로우가되고 전원을 켜거나 하드웨어 / 소프트웨어 리셋 프로세스가 종료 될 때마다 STATUS1 레지스터의 비트 15 (RSTDONE)가 1로 설정됩니다.
상태 플래그를 취소하려면 비트 15 (RSTDONE)를 1로 설정하여 STATUS1 레지스터를 작성해야합니다.


특정 인터럽트는 다른 상태 레지스터와 함께 사용됩니다.

MASK1 레지스터의 다음 비트는 PHNOLOAD 레지스터의 상태 비트와 함께 작동합니다.
• 비트 0 (NLOAD)
• 비트 1 (FNLOAD)
• 비트 2 (VANLOAD)
MASK1 레지스터의 다음 비트는 PHSTATUS 레지스터의 상태 비트와 함께 작동합니다.
• 비트 16 (SAG)
• 비트 17 (OI)
• 비트 18 (OV)
MASK1 레지스터의 다음 비트는 각각 IPEAK 및 VPEAK 레지스터의 상태 비트와 작동합니다.
• 비트 23 (PKI)
• 비트 24 (PKV)
MASK0 레지스터의 다음 비트는 PHSIGN 레지스터의 상태 비트와 함께 작동합니다.
• 비트 [6 : 8] (REVAPx)
• 비트 [10:12] (REVRPx)
• 비트 9, 비트 13 및 비트 18 (REVPSUMx)

STATUSx 레지스터를 읽고이 비트 중 하나를 1로 설정하면, 
비트와 관련된 상태 레지스터는 인터럽트를 트리거 한 위상을 식별하기 위해 즉시 읽히고 
그 때에 만 비트가 "1"로 설정된 상태에서 STATUSx 레지스터를 다시 쓸 수 있습니다.

MCU와 함께 인터럽트 사용 그림 101은 MCU를 사용하여 제안 된 ADE7880 인터럽트 관리 구현을 보여주는 타이밍 다이어그램입니다.

시간 t1에서 IRQx 핀은 액티브 로우가되어 ADE7880에서 하나 이상의 인터럽트 이벤트가 발생했음을 나타내며,이 시점에서 다음 단계를 수행하십시오.
1. IRQx 핀을 MCU의 네거티브 에지 트리거 외부 인터럽트에 연결하십시오.
2. 네거티브 에지가 감지되면 ISR (Interrupt Service Routine) 실행을 시작하도록 MCU를 구성하십시오.
3. ISR에 들어가면 전역 인터럽트 마스크 비트를 사용하여 모든 인터럽트를 비활성화합니다. 이 시점에서 현재 외부 ISR 중에 발생하는 인터럽트 이벤트를 캡처하기 위해 MCU 외부 인터럽트 플래그를 지울 수 있습니다.
4. MCU 인터럽트 플래그가 지워지면 인터럽트 상태 레지스터 인 STATUSx에서 읽습니다. 인터럽트 상태 레지스터 내용은 인터럽트 소스를 결정하는 데 사용되므로 적절한 조치를 취해야합니다.
5. 동일한 STATUSx 내용이 ADE7880에 다시 기록되어 상태 플래그를 지우고 IRQx 라인을 로직 하이 (t2)로 재설정합니다.

ISR (t3) 동안 후속 인터럽트 이벤트가 발생하면 해당 이벤트는 MCU 외부 인터럽트 플래그로 기록됩니다.
다시 설정하십시오.
ISR에서 복귀하면 전역 인터럽트 마스크 비트가 지워지고 (동일한 명령 사이클) 외부 인터럽트 플래그가 MCU를 사용하여 ISR로 다시 점프합니다.
이는 MCU가 외부 인터럽트를 놓치지 않도록합니다.

그림 102는 STATUSx 레지스터의 상태 비트가 다른 레지스터의 비트와 함께 작동 할 때 권장되는 타이밍 다이어그램을 보여줍니다. IRQx 핀이 액티브 로우가되면 STATUSx 레지스터가 읽히고이 비트 중 하나가 1이면 인터럽트를 트리거 한 위상을 식별하기 위해 두 번째 상태 레지스터가 즉시 읽 힙니다.
그림 102에서 이름 PHx는 PHSTATUS, IPEAK, VPEAK 또는 PHSIGN 레지스터 중 하나를 나타냅니다.
그런 다음 STATUSx를 다시 작성하여 상태 플래그를 지 웁니다.


[Communication Verification]
The ADE7880 includes a set of three registers that allow any communication via I2C or SPI to be verified. 
The LAST_OP (Address 0xEA01), LAST_ADD (Address 0xE9FE) and LAST_RWDATA registers record the nature, 
address and data of the last successful communication respectively. 
The LAST_RWDATA register has three separate addresses depending on the length of the successful communication.

Table 24. LAST_RWDATA Register Locations
---------------------------------------------------------------------
Communication Type Address
---------------------------------------------------------------------
8-Bit Read/Write 0xE7FD
16-Bit Read/Write 0xE9FF
32-Bit Read/Write 0xE5FF
---------------------------------------------------------------------

0xE9FE LAST_ADD
0xEA01 LAST_OP

After each successful communication with the ADE7880, the address of the last accessed register is stored in the 16-bit LAST_ADD register (Address 0xE9FE). 

This is a read only register that stores the value until the next successful read or write is complete. 
The LAST_OP register (Address 0xEA01) stores the nature of the operation. 

That is, it indicates whether a read or a write was performed. 

If the last operation is a write, the LAST_OP register stores the value 0xCA. 

If the last operation is a read, the LAST_OP register stores the value 0x35. 

The LAST_RWDATA register stores the data that was written or read from the register. Any unsuccessful read or write operation is not reflected in these registers.
When LAST_OP, LAST_ADD and LAST_RWDATA registers are read, their values are not stored into themselves.

[SPI-Compatible Interface]

1) SPI Read Operation
The read operation using the SPI interface of the ADE7880 initiates when the master sets the SS/HSA pin low and begins sending one byte, representing the address of the ADE7880, on the MOSI line. 

The master sets data on the MOSI line starting with the first high-to-low transition of SCLK. The SPI of the ADE7880 samples data on the low-to-high transitions of SCLK.
The most significant seven bits of the address byte can have any value, but as a good programming practice, it is recommended they be different from 0111000b, the seven bits used in the I2C protocol. 

Bit 0 (read/write) of the address byte must be 1 for a read operation. Next, the master sends the 16-bit address of the register that is read. 

After the ADE7880 receives the last bit of address of the register on a low-to-high transition of SCLK, it begins to transmit its contents on the MISO line when the next SCLK high-to-low transition occurs; thus, the master can sample the data on a low-to-high SCLK transition. 

After the master receives the last bit, it sets the SS and SCLK lines high and the communication ends. 
The data lines, MOSI and MISO, go into a high impedance state. 
See Figure 107 for details of the SPI read operation.

ADE7880의 SPI 인터페이스를 사용한 읽기 작업은 마스터가 SS / HSA 핀을 낮게 설정하고 
MOSI 라인에서 ADE7880의 주소를 나타내는 1 바이트를 보내기 시작할 때 시작됩니다.

마스터는 SCLK의 첫 번째 높고 낮은 전환으로 시작하여 MOSI 라인에 데이터를 설정합니다. 
ADE7880의 SPI는 SCLK의 로우에서 하이 전환에 대한 데이터를 샘플링합니다.

주소 바이트의 최상위 7 비트는 값을 가질 수 있지만, 좋은 프로그래밍 방법으로 I2C 프로토콜에서 사용되는 7 비트 인 0111000b와는 다른 것이 좋습니다.

** 읽기 작업을하려면 주소 바이트의 비트 0 (읽기 / 쓰기)이 1이어야합니다. 

다음으로 마스터는 읽은 레지스터의 16 비트 주소를 보냅니다.

ADE7880은 SCLK의 Low-to-High 전환에서 레지스터의 마지막 비트 주소를 수신 한 후 
다음 SCLK High-to-Low 전환이 발생할 때 MISO 라인에서 내용을 전송하기 시작합니다. 
따라서 마스터는 SCLK 전환에서 SCLK 전환시 데이터를 샘플링 할 수 있습니다.

마스터는 마지막 비트를 수신 한 후 SS 및 SCLK 라인을 높게 설정하고 통신을 종료합니다.
데이터 라인 MOSI 및 MISO는 높은 임피던스 상태가됩니다.
SPI 읽기 조작에 대한 자세한 내용은 그림 107을 참조하십시오.

2) SPI Read Operation of Harmonic Calculations Registers
The registers containing the harmonic calculation results are located starting at Address 0xE880 and are all 32-bit width.

They can be read in two ways: one register at a time (see the SPI Read Operation section for details) or multiple consecutive registers at a time in a burst mode. 

The burst mode initiates when the master sets the SS/HSA pin low and begins sending one byte, representing the address of the ADE7880, on the MOSI line. 
The address is the same address byte used for reading only one register. The master sets data on the MOSI line starting with the first high-to-low transition of SCLK. 
The SPI of the ADE7880 samples data on the low-to-high transitions of SCLK. 
Next, the master sends the 16-bit address of the first harmonic calculations register that is read. 

After the ADE7880 receives the last bit of the address of the register on a low-tohigh transition of SCLK, 
it begins to transmit its contents on the MISO line when the next SCLK high-to-low transition occurs;
thus, the master can sample the data on a low-to-high SCLK transition. 

After the master receives the last bit of the first register, the ADE7880 sends the harmonic calculations register placed at the next location and so forth until the master sets the SS and SCLK lines high and the communication ends. 
The data lines, MOSI and MISO, go into a high impedance state. 
See Figure 108 for details of the SPI read operation of harmonic calculations registers.

고조파 계산 결과를 포함하는 레지스터는 주소 0xE880에서 시작하여 모두 32 비트 폭입니다.

버스트 모드에서는 
한 번에 하나의 레지스터 (자세한 내용은 SPI 읽기 작업 섹션 참조) 또는 
한 번에 여러 개의 연속 레지스터로 
두 가지 방식으로 읽을 수 있습니다.

버스트 모드는 마스터가 SS / HSA 핀을 낮게 설정하고 
MOSI 라인에서 ADE7880의 주소를 나타내는 1 바이트를 보내기 시작할 때 시작됩니다.

주소는 하나의 레지스터 만 읽는 데 사용되는 것과 동일한 주소 바이트입니다. 

마스터는 SCLK의 첫 번째 높고 낮은 전환으로 시작하여 MOSI 라인에 데이터를 설정합니다.
ADE7880의 SPI는 SCLK의 로우에서 하이 전환에 대한 데이터를 샘플링합니다.

다음으로 마스터는 읽은 첫 번째 고조파 계산 레지스터의 16 비트 주소를 보냅니다.

ADE7880이 SCLK의 저 / 고 전환에서 레지스터 주소의 마지막 비트를 수신 한 후,

다음 SCLK의 하이에서 로우로의 전환이 발생하면 MISO 라인으로 내용을 전송하기 시작합니다.
따라서 마스터는 SCLK 전환에서 SCLK 전환시 데이터를 샘플링 할 수 있습니다.

마스터가 첫 번째 레지스터의 마지막 비트를 수신 한 후 ADE7880은 마스터가 SS 및 SCLK 라인을 높게 설정하고 
통신이 종료 될 때까지 다음 위치에 배치 된 고조파 계산 레지스터를 보냅니다.

데이터 라인 MOSI 및 MISO는 높은 임피던스 상태가됩니다.
고조파 계산 레지스터의 SPI 읽기 작업에 대한 자세한 내용은 그림 108을 참조하십시오.

3) SPI Write Operation
The write operation using the SPI interface of the ADE7880 initiates when the master sets the SS/HSA pin low and begins sending one byte representing the address of the ADE7880 on the MOSI line. 
The master sets data on the MOSI line starting with the first high-to-low transition of SCLK. The SPI of the ADE7880 samples data on the low-to-high transitions of SCLK.
The most significant seven bits of the address byte can have any value, but as a good programming practice, it is recommended they be different from 0111000b, the seven bits used in the I2C protocol. 
Bit 0 (read/write) of the address byte must be 0 for a write operation. 
Next, the master sends the 16-bit address of the register that is written and the 32-, 16-, or 8-bit value of that register without losing any SCLK cycle. 
After the last bit is transmitted, the master sets the SS and SCLK lines high at the end of the SCLK cycle and the communication ends. 
The data lines, MOSI and MISO, go into a high impedance state. 
See Figure 109 for details of the SPI write operation

ADE7880의 SPI 인터페이스를 사용한 쓰기 작업은 마스터가 SS / HSA 핀을 낮게 설정하고 
MOSI 라인에서 ADE7880의 주소를 나타내는 1 바이트를 보내기 시작할 때 시작됩니다.
마스터는 SCLK의 첫 번째 높고 낮은 전환으로 시작하여 MOSI 라인에 데이터를 설정합니다. 
ADE7880의 SPI는 SCLK의 로우에서 하이 전환에 대한 데이터를 샘플링합니다.

주소 바이트의 최상위 7 비트는 값을 가질 수 있지만, 좋은 프로그래밍 방법으로 I2C 프로토콜에서 사용되는 7 비트 인 0111000b와는 다른 것이 좋습니다.

** 쓰기 작업을하려면 주소 바이트의 비트 0 (읽기 / 쓰기)이 0이어야합니다.

다음으로, 마스터는 기록 된 레지스터의 16 비트 주소와 해당 레지스터의 32 비트, 16 비트 또는 8 비트 값을 SCLK주기 손실없이 전송합니다.
마지막 비트가 전송 된 후, 마스터는 SCLK주기의 끝에서 SS 및 SCLK 라인을 높게 설정하고 통신이 종료됩니다.

데이터 라인 MOSI 및 MISO는 높은 임피던스 상태가됩니다.
SPI 쓰기 조작에 대한 자세한 내용은 그림 109를 참조하십시오.

<address 8bit(must bit7 = 0)> + <register address 32bit> + <contents x byte>

=================================================================================================

Table 44. CFMODE Register (Address 0xE610)

CF1SEL[2:0]
000: the CF1 frequency is proportional to the sum of total active powers on each phase identified by Bits[2:0] (TERMSEL1[x]) in the COMPMODE register.
010: the CF1 frequency is proportional to the sum of apparent powers on each phase identified by Bits[2:0] (TERMSEL1[x]) in the COMPMODE register.
011: the CF1 frequency is proportional to the sum of fundamental active powers on each phase identified by Bits[2:0] (TERMSEL1[x]) in the COMPMODE register.
100: the CF1 frequency is proportional to the sum of fundamental reactive powers on each phase identified by Bits[2:0] (TERMSEL1[x]) in the COMPMODE register.
001, 101, 110, 111: reserved.

<default>
- CF1SEL[2:0] : 000
- CF2SEL[2:0] : 100
- CF3SEL[2:0] : 101


CF1DIS
When this bit is set to 1, the CF1 output is disabled. The respective digital to frequency converter remains enabled even if CF1DIS = 1.
When this bit is set to 0, the CF1 output is enabled.

<default>
- CFxDIS : 1


Table 36. STATUS0 Register (Address 0xE502)

CF1
When this bit is set to 1, it indicates a high-to-low transition has occurred at CF1 pin;
that is, an active low pulse has been generated. 
The bit is set even if the CF1 output is disabled by setting Bit 9 (CF1DIS) to 1 in the CFMODE register. 
The type of power used at the CF1 pin is determined by Bits[2:0] (CF1SEL[2:0]) in the CFMODE register (see Table 44).

<default>
- CFx : none (read value)

COMPMODE Register (Address 0xE60E)
TERMSEL1[0]
Setting all TERMSEL1[2:0] to 1 signifies the sum of all three phases is included in the CF1 output. 
Phase A is included in the CF1 outputs calculations.
TERMSEL1[1] 
Phase B is included in the CF1 outputs calculations.
TERMSEL1[2] 
Phase C is included in the CF1 outputs calculations.

<default>
-all : 1