www.mikrocontroller.net

Forum: Compiler & IDEs Warten auf Interrupt


Autor: TnT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!
Ich habe einen Zähler, der externe Ereignisse zählt. Ist ein bestimmter
Wert erreicht, wird ein Interrupt ausgelößt.
Mein Programm muss warten, bis dieser Int ausgelößt wurde. wie läßt
sich dies realisieren? loop_until_bit_is_set(Timer3, COMP3); läuft
nicht! :-(
Ich verwende den Timer 3 des AT128.
Danke für Hilfe

Autor: Jürgen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warten auf Interrupt = Warten auf Godot!
Sinn und Zweck der Interruptgeschichte ist, daß ein Proramm NICHT
warten muss. Das klassische Hauptprogramm rattert asynchron seine
Schleife(n) ab und prüft regelmäßig das Vorhandensein eines
Ereignisses, z.B. das Kippen eines Flags, daß Du in der
Interruptroutine gesetzt hast.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, wenn er sowieso nix anderes zu tun hat, kann man natürlich auch
auf dieses Interrupt-Flag warten -- aber dann sollte man eben gerade
keine Interruptroutine dafür haben.

Wenn man eine hat, setzt man in dieser einfach ein Bit und wartet im
Hauptprogramm auf dieses:
#include <stdint.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/io.h>

volatile struct {
  uint8_t comp3a_int: 1;
} intbits;

SIGNAL(SIG_OUTPUT_COMPARE3A)
{
  intbits.comp3a_int = 1;
}

...
int
main(void)
{
...
  for (;;) {
    if (intbits.comp3a_int) {
      intbits.comp3a_int = 0;
      /* handle it */
    }
    ...
  }

  return 0;
}

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf welchem Controller programmierst du ? Manche uC unterstuetzen ein
entsprechendes Assembler Kommando. Ich finde das uebrigens sehr
sinnvoll, um z.B. mit dieser Methode Strom zu sparen.

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aeh, hab gerade nochmal nachgelesen : AT128. Ok, ich schau mal. Sorry.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SLEEP. Muss aber extra eingeschaltet werden.

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Kommando is SLEEP. Hier ist ein link auf das AVR GCC Tutorial :
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.