www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik interupts


Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab da mal fragen zu interupts.
1. wenn in einer interupt-routine ein interrupt mit geringerer priorität 
auftritt, wird dann die interupt-routine mit der höheren priorität 
unterbrochen?
2. was passiert, wenn beim verlassen einer interupt-routine ein anderer 
interupt auftritt? wird dieser ausgeführt?
3. wie lange sind die flags in GIFR & TIFR gesetz, wenn ein interupt 
auftritt? hab gehört, daß sie nur bis zum eintritt in die 
interupt-routine gesetzt sind. beinhaltet das die 4 zyklen, in der die 
rücksprungadresse auf dem stack gespeichert wird?
4. wenn ich einen OCIE1-interupt habe und einen vorteiler für den TC1 
habe, bleibt der interupt über mehrere taktzyklen erhalten?
Danke im vorraus für alle antworten.
Gruß Patrick

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Angenommen du sprichst von den AVRs:
Beim Aufruf eines Interrupthandlers werde Interrupts global deaktiviert, 
ein dazwischen auftretender Int muss sich bis zu reti hinten anstellen.

Gruß
Andreas

Autor: Günter König (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es sei denn ich setze nach Eintritt in die IRQ Routine das Freigabe - 
Bit mit SEI. Und immer auf das SREG achten!!!

Gruß,
Günter

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich meinte die AVRs.
wenn ich es richtig verstanden habe bildet sich eine warteschlange von 
interupts, die dann abgearbeitet wird oder was ist mit hinten anstellen 
gemeint?

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn ein interrupt während der ausführung eines anderen interrupts 
auftritt und das I-bit nicht gesetzt ist (das ist der normalfall), so 
wird das zum Interrupt gehörige bit im jeweiligen register gesetzt.

z.B. also das bit für TimerOvf0 in TIFR oder das für den externen 
interrupt im GIFR.

Diese bits bleiben solange gestetzt bis

a) der avr die entsprechende ISR (interrupt service routine) anspringt, 
oder
b) du in das jeweilige bit eine 1 schreibst.

wenn das I bit dann wieder gesetzt ist (per SEI oder spätestens nach 
rückkehr aus der interrupt service routine per RETI) wird die 
entsprechende ISR angesprungen.

sollten mehrere Interrupts eintreten, werden sie der priorität nach 
abgearbeitet (priorität = reihenfolge der interruptvektoren im flash).

hoffe das hilft.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jap, das war eindeutig. danke für alle antworten ihr habt mir sehr 
weiter geholfen.
Gruß Patrick

Autor: S. S. (celt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich bin neu hier (newbie) und habe dementsprechend eine vielleicht 
komische Frage. Mein Mc ist von der 8051 Baureihe und nun habe ich die 
Ports ensprechend verteilt. Jetzt wollte ich ein paar Endschalter und 
ein Notaus über diesen Mc anschließen. Bevor ich diese Platine jetzt 
aufbaue, sollte man für diese Endschalter/Notaus-Eingänge die 
Hardwareinterupts von den jeweiligen Ports lieber wählen?

Ist wohl beim Programmieren später sicherlich einfacher oder?

Ich bedanke mich im voraus für eure Antworten :).

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
S. S. schrieb:

> Ist wohl beim Programmieren später sicherlich einfacher oder?

Wenn man es richtig programmiert: nein, ist auch nicht einfacher.

Ein Notaus übder den Rechner zu führen ist sowieso problematisch. Was, 
wenn sich der Rechner aufgehängt hat? Dann reagiert er auch auf den 
Interrupt nicht mehr -> Notaus ist funktionslos.

Und für den Rest: Man programmiert den Rechner ja sowieso nicht so, dass 
er sekundenlang in irgendwelchen Berechnungen hängt. Im Idealfall baut 
mein sein Programm so auf, dass keine Aktion den Rechner lange blockiert 
und arbeitet reihum alle Arbeiten ab. Immer ein kleines Stückchen jeder 
Arbeit. Dann sieht es so aus, als ob der Rechner mehrere Dinge 
'gleichzeitig' macht. Und da passen dann auch die Schalter gut rein. 
Wenn ein Schalter anspricht und du weißt, dass dein Rechner spätestens 
nach 1ms wieder die Schalter abfragt, kannst du ja ausrechnen, wie weit 
der Motor (oder was auch immer) fahren kann.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich bedanke mich im voraus für eure Antworten :).
Mach doch bitte für eine komplett andere Aufgabenstellung einen neuen 
Thread auf, und reanimiere nicht einen 7 Jahre alten Zombie  :-/

Zusammenfassend:
Mechanische Schalter gehören nicht als Interruptquelle verwendet. Du 
bist besser dran, wenn du die Dinger in einem Timer-Interrupt jede ms 
pollst.

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.