ISR(TIMER1_COMPA_vect) {
//~ void interr(void) {
reg_t data = read_pins();
reg[pos++] = data;
if (triggered) {
count++;
if (count == 0) { // reached 256 samples, yay!
end_capture();
}
} else {
if (count < before) {
// do not trigger until at least `before` samples
count++;
// remember potential triggers
may_rise = ~data & rising;
may_fall = data & falling;
} else if ((data & may_rise) | (~data & may_fall)) {
count = before;
triggered = true;
} else {
// remember potential triggers
may_rise = ~data & rising;
may_fall = data & falling;
}
}
}