On ADE7880, ZXVA, ZXVB, and ZXVC are on IRQ1 line. The MCU I used is PIC32. The ADE7880's IRQ1 line is connected to external interrupt pin on PIC32, which is edge triggered, I set it to trigger at the falling edge. I set bit ZXVA, ZXVB, and ZXVC to '1' at MASK1 register. MCU will read phase voltage and current RMS value when corresponding ZXVx flag to trigger IRQ1 line from high to low. The problem I have is that after running for a while, like 5 minutes, MCU won't be able to get ZXVx flag any more. MCU won't read those phase voltage and current registers. But if I only enabled ZXVA ( I assume ZXVB or ZXVC will be the same, but I didn't try it), then there were no any problem, I could continues reading all phases voltage / current rms values.
So I wonder if I miss anything here:
1. I think the time interval between these ZXVx should be around 5.6 ms with 60 HZ line voltage. e.g. ZXVA flag triggers MCU to read STATUS1 register, but when MCU write '1' to clear ZXVA bit at STATUS1, if ZXVB bit at STATUS 1 was set (after reading STATUS1), will IRQ1 line stays at low after ZXVB flag is cleared. Then MCU won't recognize ZXVB flag since it is only edge triggered, not level triggered.
2. Upon the data sheet, section "Using the Interrupts with an MCU" and Figure 98, does it mean I must read and write back STATUS1 inside my ISR routine? I also use ADE7763 and ADE7953 on other projects, With ADE7953 and ADE7763, my ISR routine was short, verify that IRQ line is low, set my global flag. It works fine with these two metering IC. Now using ADE7880, I want to know what is the proper way to handle ZXVx if all these three are enabled and my MCu.
Thank you very much for the help.