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
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
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?
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
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..
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.