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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.