52 uint8_t rtc_flag = 0, key_flag=0;
53 uint8_t magnetic_tamper_flag = 0;
54 uint8_t cover_open_flag = 0;
60 uint16_t Irms_tamper_low, Irms_tamper_high;
61 static uint8_t rev_current = 0, earth_fault = 0;
64 Irms_tamper_low = Irms[0] - ((Irms[0]*64)>>8);
65 Irms_tamper_high = Irms[0] + ((Irms[0]*64)>>8);
66 if ((Nrms < Irms_tamper_low) | (Nrms > Irms_tamper_high))
77 PORTB.OUTSET = TAMPER_EARTH_FAULT;
82 PORTB.OUTCLR = TAMPER_EARTH_FAULT;
86 if (active_energy_signed < -5 || neutral_power < -5)
92 { PORTB.OUTTGL = TAMPER_CURRENT_REVERSAL; }
94 { PORTB.OUTCLR = TAMPER_CURRENT_REVERSAL; }
96 if ((Vrms[0] == 0) && (Irms[0] > 500))
97 { PORTB.OUTSET = TAMPER_NEUTRAL_CUT; }
99 { PORTB.OUTCLR = TAMPER_NEUTRAL_CUT; }
101 if(magnetic_tamper_flag == 1)
116 SLEEP.CTRL &= ~SLEEP_SEN_bm;
117 PORTB.INT0MASK = 0x00;
124 PORTB.INTFLAGS = 0x00;
125 PORTB.INT0MASK = PIN2_bm;
136 SLEEP.CTRL &= ~SLEEP_SEN_bm;
138 PORTC.INT0MASK = 0x00;
142 if((pin_val & PIN2_bm) == 0)
144 cover_open_flag ^= 0x1;
147 else if((pin_val & PIN4_bm) == 0x10)
149 magnetic_tamper_flag = 1;
152 else if((pin_val & PIN5_bm) == 0)
160 PORTC.INTFLAGS = 0x00;
161 PORTC.INT0MASK = PIN2_bm |PIN4_bm |PIN5_bm;
173 SLEEP.CTRL &= ~SLEEP_SEN_bm;
174 PORTD.PIN4CTRL = PORT_OPC_WIREDAND_gc;