Frage zum CLI befehl

Gast #4097513
Lesenswert?
• ▲
▼
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
Gast #4097518
Lesenswert?
• ▲
▼
>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.
Gast #4097525
Lesenswert?
• ▲
▼
> 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
Gast #4097564
Lesenswert?
• ▲
▼
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
Gast #4097569
Lesenswert?
• ▲
▼
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
#4097925
Lesenswert?
• ▲
▼
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.

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