Forum: Mikrocontroller und Digitale Elektronik Interrupt-Koinzidenz PIC18F


von Atter S. (attersee)


Lesenswert?

Im Datenblatt des PIC18F4525 finde ich die Aussage „Low-priority 
interrupts are not processed while high-priority interrupts are in 
progress.” Streng genommen, sagt der Satz, dass ein Low-Priority 
Interrupt ins Leere geht, wenn gerade ein High-Priority Interrupt 
abgearbeitet wird. Wenn der LP-Interrupt ein Sekunden-Timer ist, dann 
kann es also passieren, dass eine Sekunde ausfällt. Ist das korrekt?

Oder, - wird der HP-Interrupt abgearbeitet und unmittelbar anschließend 
der LP-Interrupt nachgeholt?

Grüße, attersee

von (prx) A. K. (prx)


Lesenswert?

Atter See schrieb:
> Oder, - wird der HP-Interrupt abgearbeitet und unmittelbar anschließend
> der LP-Interrupt nachgeholt?

Exakt.

von Atter S. (attersee)


Lesenswert?

A.K., herzlichen Dank. Schneller und präziser kann man nicht antworten.

Mit diesem kleinen Zeitfehler kann ich leben.

Grüße, attersee

von Jens P. (picler)


Lesenswert?

Du solltest nur beachten, dass die Abarbeitung des HP-Interupts nicht 
länger als die Zeitspanne des LP-Interupts dauert. Andernfalls verlierst 
du die entprechenden Events da das jeweilige IF nur auf den Interupt 
hinweist, nicht jedoch auf die Anzahl. Ausnahme ist der UART, der Buffer 
ist 2 Byte tief, kann also quasi 2 Interupts speichern und das IF wird 
erst zurückgesetzt wenn der UART-Buffer komplett leer ist.

von Atter S. (attersee)


Lesenswert?

Danke Jens für den Hinweis. Es ist gut, das zu wissen. Im aktuellen Fall 
entsteht dieser Konflikt also nicht, denn der HP-Interrupt ist mit ca. 
50 ms viel kürzer als der LP-Sekundentakt.
Grüße, attersee

von spontan (Gast)


Lesenswert?

Eine Interrupt-Dauer von 50 msec ???
Da ist doch was faul? Oder was macht die ISR so wichiges, solanges ?????

von Teo (Gast)


Lesenswert?

Da wird doch wohl kein "Wait" in der ISR sein :-/

von Atter S. (attersee)


Lesenswert?

Hallo spontan. Das ist ok. Systemspezifische 'Terminals' lesen über 
einen allseitig optogekoppelten Bus einen längeren von einer 'Zentrale' 
gesendeten Daten-Burst. Private Anwendung. Selbst gemachtes Protokoll. 
Lange Leitungen. Mir geht es um robuste Kommunikation. Nochmals danke.
Grüße, attersee

von chris (Gast)


Lesenswert?

Es gibt zwei Sachen, processed and signalized. Ein Interrupt wird 
signalized
wenn das entsprechende Flag ausgelöst wird. Dies ist in HW und 
unabhängig
von der CPU. Dann gibt es processed, also daß ein Interrupt angesprungen
wird. Wenn das Flag ausgelöst wird, während ein low priority interrupt
in Gange ist, und dann wird dieser von einem High priority Interrupt 
unterbrochen, wenn dieser beendet wird dann der low priority interrupt
weitergearbeitet wird, beendet wird, und erst dann könnte der inzwischen
eingetroffene low priority Interrupt abgearbeitet werden. Da kann unter
Umständen ein Interrupt verloren gehen, oder das Timing ausser spec 
sein.

von Atter S. (attersee)


Lesenswert?

Kurzer Abschlussbericht. Die SW läuft nun mehr als 48 Stunden im 
Dauerbetrieb und es kam zu keinem Übertragungsfehler. Eine Verzögerung 
beim LP Sekundentakt konnte ich nicht feststellen. Die Impuls-Zählung 
liegt weit innerhalb der Quarztoleranz. Ist auch kein Wunder, bei einer 
Wahrscheinlichkeit von etwa 0,7 Kollisionen pro 24 h, des (ach so 
langen) HP Interrupts mit dem LP Zeitgeber. Also, alles bestens.

Danke für alle Beiträge, attersee

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