Hallo, hab mal eine Anfängerfrage zum CLI. Angenommen man hat zwei Timer (Timer1 + Timer0) in einem Programm. Timer1 ist für die Zeit zuständig und Timer0 für die Entprellung von Tasten. In der ISR von Timer0 wird immer die Befehlsfolge cli mov temp1, key_press clr key_press sei aufgerufen. Wird durch CLI nicht auch der Timer1 angehalten, der dadurch immer mehr Abweichung (ppm fehlen) erhält? Peter
>In der ISR von Timer0 wird immer die Befehlsfolge >cli >mov temp1, key_press >clr key_press >sei > >aufgerufen. Dann mach die mal ganz schnell weg, denn die haben dort nichts zu suchen. CLI hält keine Timer an.
> Wird durch CLI nicht auch der Timer1 angehalten, > der dadurch immer mehr Abweichung (ppm fehlen) erhält? Jein. Der Timer wird nicht 'angehalten', sondern seine Unterbrechungsanfragen werden nicht bearbeitet. Wenn Du also die Interruptbehandlung so lange sperrst, dass der andere Teilnehmer eine Anfrage verpasst, dann summiert sich bei ihm ein Fehler. Die Behandlung der Anfrage wird ggf. natürlich auch etwas verzögert, das kann Jitter zur Folge haben. Bei diversen Architekturen (z.B. AVR) ist die Behandlung weiterer Unterbrechungsanfragen während der der Ausführung einer solchen übrigens automatisch deaktiviert (sofern man sie nicht wieder zulässt). Bei anderen (z.B. diverse ARM) kann nur ein Interrupt mit höherer Priorität (oder ein nicht-maskierbarer welcher) unterbrechen. Wie üblich lohnt es sich also, das zugehörige Datenplatt zu lesen ;-) HTH
Innerhalb einer ISR sind SEI/CLI meist unangebracht. Diese Befehle werden ausserhalb davon verwendet, um eine Befehlssequenz gegen einen Interrupt mittendrin abzusichern.
:
Bearbeitet durch User
Sorry, mein Fehler. Die Reihenfolge cli mov temp1, key_press clr key_press sei ist nicht in der ISR sondern im main (wo es hingehört). Wird durch das anhalten des Interrputs der Timer1 nicht genau um die Anzahl der Takte in Verzögerung gebracht und kann sich das nicht erheblich aufaddieren, so dass die Einstellungen des Timer1 der im CTC läuft nicht mehr passen? Peter
Peter schrieb: > Wird durch das anhalten des Interrputs der Timer1 nicht > genau um die Anzahl der Takte in Verzögerung gebracht Nein.
Peter schrieb: > Wird durch das anhalten des Interrputs der Timer1 nicht > genau um die Anzahl der Takte in Verzögerung gebracht und > kann sich das nicht erheblich aufaddieren, so dass die > Einstellungen des Timer1 der im CTC läuft nicht mehr passen Wenn der Befehl CLI den Timer anhalten würde, tut er aber nicht. Ein Interrupt ist kein Timer, wie schon der Name sagt. MfG Klaus
A. K. schrieb: > Peter schrieb: >> Wird durch das anhalten des Interrputs der Timer1 nicht >> genau um die Anzahl der Takte in Verzögerung gebracht > > Nein. Korrekt. Verzögert wird allerdings die Ausführung der ISR. Wenn der Timer den Interrupt zwischem dem CLI und dem SEI auslöst, dann geht der Interrupt nicht verloren sondern wird verzögert (nach dem SEI) bearbeitet.
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.