www.mikrocontroller.net

Forum: GCC interrupt in routine abschalten?

Autor: anfänger (Gast)
Datum: 04.07.2008 20:05

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);
}
Autor: Ernst Bachmann (ernst)
Datum: 04.07.2008 20:26

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:
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.

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net