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?
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.
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?
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.
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?
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?
>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.
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.
>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.
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...
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.
Und wie sieht's innerhalb einer Gruppe aus? Darf man da gleiche Prioritäten haben?
>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".
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.