Forum: Mikrocontroller und Digitale Elektronik Interrupt Group Level?


von poiu (Gast)


Lesenswert?

Hi Leute,

was ist ein Interrupt Group Level? Wie ich mittlerweile verstanden habe, 
hat ein Interrupt Prioritäten; bspw. von 0-15. Wenn nun mehrere Geräte 
eines µC das gleiche Interrupt-Level haben, legt man diese 
gleichpriorisierten Geräte auf einen Group Level.

Aber was hab ich davon? Was muss ich mir darunter vorstellen, wenn ich 
jetzt bspw. 4 Geräte die auf Interrupt Level 7 reagieren sollen und ich 
diese 4 Geräte zu einem Group Level zusammenfasse und ich nun wirklich 
einen Interrupt mit Level 7 bekomme, lösen dann alle 4 Geräte auf einmal 
aus? Was passiert wenn ich von diesen 4 Geräten nur 3 zu einem Group 
Level hinzufüge? Welches Gerät löst dann bei einem Interrupt Level = 7 
wann aus?

von Noname (Gast)


Lesenswert?

Wie das im einzelnen geregelt ist hängt von dem jeweiligen Prozessor ab.
Schau mal im Manual resp. Datenblatt nach. Nenne uns den Prozessor.

Beim STM32F1 resp. Cortex M3 ist es so:

>Wenn nun mehrere Geräte eines µC das gleiche Interrupt-Level haben, legt >man 
diese gleichpriorisierten Geräte auf einen Group Level.

"Interrupt-Level" und "Gruppen-Level" gibt es nicht. Man spricht von 
"Gruppen-Priorität" (Group-Priortity) und "Unterpriorität" 
(Subpriority).
Die Gesamtheit aller Interrupts mit der selben Gruppen-Priorität bildet 
eine Gruppe. Diese Gruppe kann mit den Unterprioritäten weiter 
unterteilt werden.

>... lösen dann alle 4 Geräte auf einmal aus?

Falsche Grammatik. Das Verb "lösen" oder besser "auslösen" ist 
transitiv, erfordert also Subjekt und Objekt. Die Geräte lösen 
Interrupts aus.

Jedenfalls ist die Antwort:

Nein. Die Geräte (Peripherie-Einheiten) lösen Interrupts nur dann aus, 
wenn das entsprechende Ereignis eintritt (und der Interrupt aktiviert 
ist). Ob die entsprechenden Interrupts nun gleiche Priorität haben oder 
nicht ist dabei irrelevant. D.h. wird ein Interrupt ausgelöst der eine 
Priorität hat den auch ein anderer Interrupt hat, so wird dieser andere 
Interrupt nicht zusätzlich ausgelöst.

>Was passiert wenn ich von diesen 4 Geräten nur 3 zu einem Group
>Level hinzufüge? Welches Gerät löst dann bei einem Interrupt Level = 7
>wann aus?

Wieder falsche Grammatik. (Transitives Verb). Nicht die Geräte lösen 
aus. Die Geräte lösen Interrupts aus.

Jedenfalls ist die Anwort:

1. Jeder Interrupt gehört zu einer Gruppe (falls der NVIC so 
konfiguriert ist). Auch wenn Du ihn nicht ausdrücklich einer Gruppe 
zuweist.

2. Wenn ein Interrupt einer anderen Sub-Priorität zugewiesen ist, als 
drei andere der gleichen Gruppe (also gleicher Interruptpriorität) dann 
beeinflusst das die Ausführungsreihenfolge, mit der die Ausführung 
fortgesetzt wird, nachdem ein gerade laufender Interrupt beendet wurde. 
Hingegen kann damit nicht geregelt werden, das sich Interrupts mit der 
selben Priorität und unterschiedlichen oder gleichen Subprioritäten 
gegenseitig unterbrechen.

3. Die auf den genauen Wortlaut Deiner Frage ("Welches Gerät löst...") 
bezogene Antwort lautet dann (abgesehen davon das nicht "ein Gerät 
auslöst" sondern ein Gerät (besser eine Peripherieeinheit) einen 
Interrupt auslöst: Es wird genau ein Interrupt, nämlich derjenige der 
genau der Peripherieeinheit zugeordnet ist, aus.


Wohlgemerkt, diese Aussagen gelten für einen bestimmten 
Prozessor(-kern), den Cortex M3. Die Terminologie und die Funktionsweise 
kann bei anderen Prozessoren anders lauten resp. ausgeprägt sein.

von poiu (Gast)


Lesenswert?

Noname schrieb:
> Nein. Die Geräte (Peripherie-Einheiten) lösen Interrupts nur dann aus,
> wenn das entsprechende Ereignis eintritt (und der Interrupt aktiviert
> ist). Ob die entsprechenden Interrupts nun gleiche Priorität haben oder
> nicht ist dabei irrelevant. D.h. wird ein Interrupt ausgelöst der eine
> Priorität hat den auch ein anderer Interrupt hat, so wird dieser andere
> Interrupt nicht zusätzlich ausgelöst.

Diesen Absatz verstehe ich nicht.



>>Was passiert wenn ich von diesen 4 Geräten nur 3 zu einem Group
>>Level hinzufüge? Welches Gerät löst dann bei einem Interrupt Level = 7
>>wann aus?
>
> Wieder falsche Grammatik. (Transitives Verb). Nicht die Geräte lösen
> aus. Die Geräte lösen Interrupts aus.
>
> Jedenfalls ist die Anwort:
>
> 1. Jeder Interrupt gehört zu einer Gruppe (falls der NVIC so
> konfiguriert ist). Auch wenn Du ihn nicht ausdrücklich einer Gruppe
> zuweist.

Ehrlich gesagt verstehe ich auch diesen Absatz nicht.


> 2. Wenn ein Interrupt einer anderen Sub-Priorität zugewiesen ist, als
> drei andere der gleichen Gruppe (also gleicher Interruptpriorität) dann
> beeinflusst das die Ausführungsreihenfolge, mit der die Ausführung
> fortgesetzt wird, nachdem ein gerade laufender Interrupt beendet wurde.
> Hingegen kann damit nicht geregelt werden, das sich Interrupts mit der
> selben Priorität und unterschiedlichen oder gleichen Subprioritäten
> gegenseitig unterbrechen.

Hier leider das gleiche (Trauer-)Spiel.


> 3. Die auf den genauen Wortlaut Deiner Frage ("Welches Gerät löst...")
> bezogene Antwort lautet dann (abgesehen davon das nicht "ein Gerät
> auslöst" sondern ein Gerät (besser eine Peripherieeinheit) einen
> Interrupt auslöst: Es wird genau ein Interrupt, nämlich derjenige der
> genau der Peripherieeinheit zugeordnet ist, aus.

Verstehe ich hier richtig, dass ein Interrupt mit Priorität 7 auch nur 
das Gerät auslöst welches im zugeordnet ist?

von Noname (Gast)


Lesenswert?

Au weia. Ich nehme wahr, das Du nicht korrekt formulierst und habe mich 
bemüht meine Anwort so genau wie möglich zu formulieren, damit Du Dir 
ein korrektes Denkschema angewöhnst und auch richtig formulieren kannst.
Aber das ist wohl schief gegangen.

Leider schreibst Du nicht, was Du nicht verstanden hast.

Ich versuch es nochmal:

>...lösen dann alle 4 Geräte auf einmal aus?
Nein.


>>>Was passiert wenn ich von diesen 4 Geräten nur 3 zu einem Group
>>>Level hinzufüge? Welches Gerät löst dann bei einem Interrupt Level = 7
>>>wann aus?

Keines, da es in einem Mikrocontroller keine "Geräte" gibt.

>Verstehe ich hier richtig, dass ein Interrupt mit Priorität 7 auch nur
>das Gerät auslöst welches im zugeordnet ist?

Nein. Geräte gibt es nicht in einem Mikrocontroller, daher könne sie 
auch nicht von Interrupts ausgelöst werden. Interrupts lösen auch nichts 
aus. Sie werden ausgelöst.

von poiu (Gast)


Lesenswert?

So, ok. Soweit bin ich dabei. Interrupts werden von Peripherie-Einheiten 
ausgelöst. Richtig?

Was hat dann Interrupt-Priorität auf sich? Und was ist ein Group-Level 
(oder in deinem Terminus: Group-Priority)?

Und wenn du mir jetzt noch den Unterschied zwischen Interrupt-Priorität 
und der Group-Priorität erklärst, dann bin ich zufrieden, denn das ist 
ja eigentlich das was ich wissen will.

Also quasi drei Sachen:

Was ist eine Interrupt-Priorität und für was benötigt man das?
Was ist eine Group-Priorität und für was benötigt man das?
Was ist der Unterschied zwischen Interrupt-Priorität und 
Group-Priorität?

von Noname (Gast)


Lesenswert?

Ich weiss ja, ich bin anstrengend.
Aber wenn Du nicht korrekt formulierst und falsche Voraussetzungen 
machst und falsche Terminologie anwendest, dann gibt es eben nicht nur 
Deine Frage.

Man muss erstmal korrekt formulieren. Dann korrekte Terminologie 
verwenden (wozu die Nennung des konkreten Prozessors als Voraussetzung 
gehört). Und dann kann man die falschen Voraussetzungen korrigieren. Und 
dann (falls nicht durch den vorherigen Punkt erledigt) Deine Fragen 
beantworten.

Andernfalls gibt es Missverständnisse über Missverständnisse.

Stell Dir vor jemand fragt: "Wann füllt sich grüne, geschmolzene 
Mayonaise in den Tank eines Audi 80"? Montags oder wenn es dunkel ist? 
Was ist mit einem VW-Käfer? Drückt die Mayonaise warm?
Wo fängst Du an dem Fragesteller die Welt zu erklären?

von Noname (Gast)


Lesenswert?

>Was ist eine Interrupt-Priorität und für was benötigt man das?

Die "Interrupt-Priorität" regelt allgemein, was der Prozessor macht, 
wenn einer von zwei möglichen Fällen auftritt.

1. Interupts treten gleichzeitig auf.
2. Ein Interrupt tritt auf (wird ausgelöst) während der Prozessor einen 
anderen Interrupt abarbeitet.

Für die Gruppen-Priorität gilt das selbe.
1. Interrupts aus zwei verschiedenen Gruppen treten auf.
2. Interrupts aus der selben Gruppe treten auf.

>Was ist der Unterschied zwischen Interrupt-Priorität und
Group-Priorität?
Die Interrupt-Priorität bezieht sich auf einzelen Interrupts. Die 
Gruppen-Priorität auf Gruppen von Interrupts.

Was das aber nun konkret bewirkt hängt von dem Prozessor ab. Es gibt 
keine allgemeinverbindliche Regel oder sogar Norm.

Bitte nenne doch jetzt endlich einmal den konkreten Prozessor.

von (prx) A. K. (prx)


Lesenswert?

Ich gehe mal davon aus, dass das Interrupt-System der Cortex-M 
Controller gemeint ist. Andernfalls => Ablage P.

Wenn keine Gruppen definiert sind (0 Bits), dann kann jeder Interrupt 
höherer Priorität einen Interrupthandler unterbrechen.

Wenn Gruppen konfiguriert sind, dann sieht das etwas anders aus. 
Interrupts innerhalb der gleichen Gruppe können einander nicht 
unterbrechen. Das kann nur ein Interrupt, dessen Gruppe eine höhere 
Priorität als der aktuell laufende Handler hat.

Die Prioritäten innerhalb einer Gruppe sind nur relevant, wenn mehrere 
Interrupts der gleichen Gruppe zur Verarbeitung anstehen. Dann 
entscheidet sie darüber, in welcher Reihenfolge diese abgearbeitet 
werden.

von poiu (Gast)


Lesenswert?

Sorry Leute, ich meine den XE167.

von Noname (Gast)


Lesenswert?

>XE167

Na toll. Endlich!

Da sieht man konkret das es Unterschiede nicht nur in der Funktion 
sondern auch in der Terminologie gibt.

Cortex-M                   Infineon                 AVR/TI(MSP430)

Gruppen-Priorität          Interrupt-Priorität      Interrupt-Priorität

Subpriorität               Gruppen-Ebene            nicht vorhanden


Beim STM können Interrupts, die zur selben Gruppe gehören, weil sie die 
selbe Gruppenpriorität haben, identische Subprioritäten haben.

Beim Infineon müssen die Gruppen-Ebenen bei gleicher Interrupt-Priorität 
paarweise disjunkt sein.


Deswegen, lieber poiu, bei solchen Fragen IMMER das konkrete Papier 
nennen, das Du gerade liest, den konkreten Prozessor.

von Noname (Gast)


Lesenswert?

Sonst rät man hier verda.... nochmal stundenlang herum.

von poiu (Gast)


Lesenswert?

Noname schrieb:
> Beim Infineon müssen die Gruppen-Ebenen bei gleicher Interrupt-Priorität
> paarweise disjunkt sein.

Das könntest du mir bitte noch genauer erklären. Paarweise disjunkt, 
übersetze ich als paarweise durchschnittsfremd. Und das verstehe ich 
nicht...

von Noname (Gast)


Lesenswert?

Das hast Du genau richtig "übersetzt".

Es darf beim XE167 bei Interrupts mit gleicher Interrupt-Priorität, 
keine zwei oder mehr identische Gruppen-Ebenen geben.

von poiu (Gast)


Lesenswert?

Und wie sieht's innerhalb einer Gruppe aus? Darf man da gleiche 
Prioritäten haben?

von Noname (Gast)


Lesenswert?

>Und wie sieht's innerhalb einer Gruppe aus? Darf man da gleiche
>Prioritäten haben?

Wenn zwei Interrupts gleicher Priorität nicht die gleiche Gruppenebene 
haben dürfen, dann dürfen zwei Interrupts mit gleicher Gruppenebene 
umgekehrt nicht die selbe Interrupt-Priorität haben.

Näheres erklärt ein Mathe-Buch. Siehe: "Der Satz vom ausgeschlossenen 
Dritten".

von Guido B. (guido-b)


Lesenswert?

Der ILVL legt die Priorität des Interrupts fest. Mehrere Interrupts
können dieselbe Priorität haben. was bedeutet, dass sie sich nicht
gegenseitig unterbrechen können. Dann müssen sie sich aber im GLVL
unterscheiden.

Der GLVL entscheidet welcher gleichzeitig angeforderte Interrupt
derselben Priorität zuerst abgearbeitet wird. Es ist aber sehr
unwahrscheinlich, dass mehrere Ints. gleichzeitig auftreten. Die
Bedeutung des GLVLs ist mehr im Zusammenhang mit den PEC-Transfers
interessant.

von XE2000 (Gast)


Lesenswert?

poiu schrieb:
> Und wie sieht's innerhalb einer Gruppe aus? Darf man da gleiche
> Prioritäten haben?

Die ganze Gruppe liegt immer auf dem gleichen Level.

Also, zuerst wird die Priorität nach dem Level bestimmt. Ist der Level 
gleich, bestimmt der Gruppenwert die Reihenfolge.

Das ist im User Manual auch mit Bildchen erklärt.

Aber warum der Kram mit Level und Groups? Der aktuellen CPU Task ist 
immer ein Level zugeordnet. Nur Interrupts mit höherem Level können die 
aktuelle Task unterbrechen.        Steht alles ganz genau im Manual.

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.