Warten auf Interrupt

Gast #283400
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
Gast #283401
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.
Moderator Persönliche Seite #283402
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren