mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupts und Flags


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich will es kurz machen.
Also angenommen ich starte einen Timer, aktiviere das Overflow-Flag in
TIMSK und setze das I -Flag im Statusregister.
Wenn jetzt der Timer von 0xFF nach 0x00 kippt wird
das TOV-Flag in TIFR gesetzt und ein INT  ausgelöst...
Jetzt meine Frage: wird durch den Eintritt der Int_Routine das
Overflow-Flag in TIMSK zurückgesetzt oder muss ich das selbst tun?


DANKE MARKUS

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
welcher uP?, bei den AVRs wird das Flag bei Anspringen der Int-Routine
gelöscht. Wo hast du eigentlich die Info über die anderen Bits her? im
Datenblatt würde nämlich deine Frage auch beantwortet.

grüsse leo9

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also der µc ist ein Atmel AT90S8515...
na welches flag wird gelöscht? nur das TOV0 in "TIFR" oder auch das
TOIE0 im "TIMSK" Register?

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind Datenblätter wirklich so schwierig zu lesen ;-)

Das I-Flag legt fest ob überhaupt auf einen Interrupt reagiert wird
Die jeweiligen IE-Flag in den MASK-Register bestimmen welche der
verfügbaren Ints einen Int. auslösen dürfen und
die zugehörigen FLAG signalisieren ob  ein Interrupt anliegt.

Bei deinem Timer setzt JEDER Overflow das Interrupt-Flag, dieses
signalisiert vorerst nur dass ein overflow stattgefunden hat. Somit
könntest du auch mit Polling auf einen Interrupt reagieren.
Wenn sowohl General Interrupt Enable als auch das TOIE0 gesetzt sind so
wird nach Setzen des Flags die Interrupt Routine angesprungen.
Gleichzeitig wird das GIE gelöscht (damit kein zweiter Int in die
Arbeitung des ersten pfuscht, und bei Ausführen von reti wieder
gesetzt). Das TOIE0 bleibt während der ganzen Verarbeitung unverändert.
Das TOV0 wird bei Sprung zum Int-Vektor von der Hardware automatsch
gelöscht.

Wenn du in einer Applikation Interrupts öfters enablest und disablest
empfiehlt es sich vorm enable (TOIE0 setzen) das zugehörige flag (TOV0)
zu löschen sonst kann es zu "eigenartigen" Fehlern kommen. Ist
nämlich vor langer Zeit ein Overflow aufgetreten so würde nach enablen
des Ints dieser sofort ausgeführt werden (wäre ja im Flag gespeichert
gewesen).

Ich hoff die Zusammenhänge sind jetzt etwas klarer und ich hab nicht zu
viel zur Verwirrung beigetragen.

grüsse leo9

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Besten Dank alles... Dann hab ich mit meiner Vermutung ja richtig
gelegen...Wollte gern nochmal eine Bestätigung von jemandem
haben...Danke Grüße  Markus..

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.