Forum: Compiler & IDEs Warten auf Interrupt


von TnT (Gast)


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

von Jürgen Schuhmacher (Gast)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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:
1
#include <stdint.h>
2
#include <avr/interrupt.h>
3
#include <avr/signal.h>
4
#include <avr/io.h>
5
6
volatile struct {
7
  uint8_t comp3a_int: 1;
8
} intbits;
9
10
SIGNAL(SIG_OUTPUT_COMPARE3A)
11
{
12
  intbits.comp3a_int = 1;
13
}
14
15
...
16
int
17
main(void)
18
{
19
...
20
  for (;;) {
21
    if (intbits.comp3a_int) {
22
      intbits.comp3a_int = 0;
23
      /* handle it */
24
    }
25
    ...
26
  }
27
28
  return 0;
29
}

von The Daz (Gast)


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.

von The Daz (Gast)


Lesenswert?

Aeh, hab gerade nochmal nachgelesen : AT128. Ok, ich schau mal. Sorry.

von A.K. (Gast)


Lesenswert?

SLEEP. Muss aber extra eingeschaltet werden.

von The Daz (Gast)


Lesenswert?

Das Kommando is SLEEP. Hier ist ein link auf das AVR GCC Tutorial :
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Sleep-Modes

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.