   Returned value is 2s complemented 16 bit integer.
   */
 int16_t read_analog(uint8_t next_chan) {
-  // we really don't need any interrupts messing the timings in here up
-  noInterrupts();
 
   // select the channel for the next read
   digitalWrite(_A0, next_chan&0x1?HIGH:LOW);
   digitalWrite(_A1, next_chan&0x2?HIGH:LOW);
 
+  // we really don't need any interrupts messing the timings in here up
+  noInterrupts();
+  
   // begin a conversion
   digitalWrite(_RC, LOW);
   delayMicroseconds(1);
   digitalWrite(_RC, HIGH);
 
+  interrupts();
+
   // wait for busy to go high
   wait_busy();
 

#define     _D6       (31)
#define     _D7       (30)

#define     _LED       (13)

#define     _TRIGGER   (40)

void setup() {
  uint8_t outputs[] = {_A0, _A1, _BYTE, _RC, _LED};
  uint8_t inputs[] = {_BUSY, _D0, _D1, _D2, _D3, _D4, _D5, _D6, _D7, _TRIGGER};

  for (int idx = 0; idx < sizeof outputs; ++idx) {
    pinMode(outputs[idx], OUTPUT);


  wait_busy();

  // attach an interrupt to our trigger
  attachInterrupt(_TRIG_INT, trig_ISR, FALLING);

  Serial.begin(115200);
  Serial.println("Ready");
  Serial.println(millis());
}

/**
