Forum: Compiler & IDEs interrupt in routine abschalten?


von anfänger (Gast)


Lesenswert?

kann man so den int0 und int1 kurzfristig sperren?

danke.

mfg


ISR(INT0_vect)
{
  GIMSK &= ~((1<<INT0) | (1<<INT1));
  encoder_li = encoder_li+1;

  print_wert_li();

  if(encoder_li >= enc_wert)
  {
    print_ausgabe();
  }

  GIMSK |= (1<<INT0) | (1<<INT1);
}

von Εrnst B. (ernst)


Lesenswert?

Kann man wohl schon, aber warum?
Während der ISR sind interrupts eh deaktiviert.
Was vielleicht eher dem gewünschten Ergebniss nahekommt wäre die 
IRQ-Flags vor dem Verlassen nochmal zu löschen:
1
GIFR=_BV(INTF1)|_BV(INTF0);

Dein Hauptproblem ist aber eher das vermurkste Design. ISRs sollten 
möglichst kurz gehalten werden, print_wert_li() und print_ausgabe() 
hören sich aber eher nach langsamen, grossen Brocken an.
Besser: in der ISR nur ein Flag setzen, Ausgabe dann in der 
Main-Schleife.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.