Papst-Lüfter Drehzahlerfassung!

So, habe da Thema nochmal aufgegriffen,

ich arbeite jetzt mit folgendem Code, mit Interrupts. Die Timermanipulation schien mir jetzt zu aufwändig, weil es sich so schwierig in andere Projekte integrieren lässt.

unsigned long time_puls = 0;
unsigned long pre_time_puls = 0;
long previousMillis_vent = 0;
unsigned long currentMillis = 0;
int interval_vent = 3000;

void setup() {
  Serial.begin(115200);
  attachInterrupt(3, countup, FALLING); // Interrupt 3 Eingang ist beim Mega2560 Pin D20

}
void loop() {

  currentMillis = millis();
  if(currentMillis - previousMillis_vent > interval_vent) {
    previousMillis_vent = currentMillis;
    int drehzahl = (30000000/time_puls)+1;
    Serial.print("microsekunden pro Umdrehung: ");
    Serial.println(time_puls*2);
    Serial.print("U/min :");
    Serial.println(drehzahl);
  }
}
void countup(){
  noInterrupts();
  unsigned long m = micros();                // Microsekundenzähler auslesen
  unsigned long v = m - pre_time_puls;       // Differenz zum letzten Durchlauf berechnen
  time_puls = v;                           
  pre_time_puls = m;
  if (time_puls > 60000){                    // counter bei Stillstand zurücksetzen (Impulsdauer > 60000)
    time_puls = 0;
  }
  interrupts();
}

Ich habe aber noch ein paar Verständnissfragen.

Also, der Atmega läuft mit 16Mhz, d.h der Intterupt Eingang wird alle 16µs abgefragt, pro Takt?
Da wäre eine Impulsrate von 20ms ja unkritisch, oder wie schnell darf ich sein?
In der Funktion "countup" ist der Interrupt für die berechnung der Zeit ja ausgeschaltet, aber was passiert im "loop"? Wird da sozusagen bei jeden Interrupt in "countup" gesprungen und dann wieder zurück und an gleicher Stelle weitergemacht?