Hallo, nachdem ich schon länger mit den STM32 arbeite, wollte ich mich mal näher mit der Materie Cortex M3 auseinandersetzen. Dank IDE und Libs ist das zwar nicht unbeding nötig, aber wohl schon ganz gut wenn man mal vor einem Problem steht... Ich durchforste dazu die ARM Ref Manuals und komme an der Stelle Priority Grouping nicht ganz zurecht. Ich vermute das Thema verstanden zu haben. Allerdings verstehe ich den Sinn dahinter nicht. Es heißt ja, dass das PRI_N-Feld in Prioritäten und Subprioritäten aufgeteilt werden kann. Haben zwei Exeptions die gleiche Prio, enstscheidet die Subprio. Wie die Aufteilung ist wird im PRIGROUP[2:0]-Feld eingestellt. Im Prinzip habe ich durch das PRI_N-Feld doch IMMER 256 Möglichkeiten, egal wie ich es aufteile. Wozu also das Ganze? Ich übersehe doch irgendetwas. http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337e/ch05s03s02.html Danke und Gruß
Eine Priorität hat immer 4 Bit. Diese können dynamisch auf Primary und Sub unterteilt werden. Beispiel: Gruppenvergabe 2 zu 2 Bit Somit kann Pirimary den Wert 0..3 und Sub auch 0..3 erhalten. Beispiel: ISR1 Pri 1 / Sub 1 ISR2 Pri 2 / Sub 1 ISR3 Pri 2 / Sub 2 Wenn jetzt ISR1 kommt, dann wird der aufgerufen. Kommt während dem ein ISR2 dann darf der den ISR1 unterbrechen, da er eine höhere Primary Wertigkeit hat. Wenn ISR2 bereits aktiv ist, so darf ISR3 diesen nicht unterbrechen, ISR1 ebenfalls nicht. Wenn ISR2 und ISR3 gleichzeitig kommen, so wird zu erst ISR3 bearbeitet, anschließend ISR2.
Wenn innerhalb einer Gruppe mehrere Request gleichzeitig anstehen, dann gewinnt beim Aufruf der ISR derjenige mit numerisch kleinster Prio. Der Rest folgt hintereinander in der von der Prio vorgegebenen Reihenfolge. Es wird keine ISR von einem anderen Interrupt innerhalb dieser Gruppe unterbrochen. Auch dann nicht, wenn die Subprio numerisch kleiner ist. Hingegen wird eine ISR von einem anderen Interrupt unterbrochen, wenn der einer numerisch kleineren Gruppe angehört (preemption priority).
:
Bearbeitet durch User
Markus Müller schrieb: > Wenn jetzt ISR1 kommt, dann wird der aufgerufen. Kommt während dem ein > ISR2 dann darf der den ISR1 unterbrechen, da er eine höhere Primary > Wertigkeit hat. Die Prios sind wie so oft auch bei den Cortexen numerisch invers zur Bedeutung, d.h. eine kleinere Zahl steht für höhere Priorität.
:
Bearbeitet durch User
OK... danke das war das Fitzelchen, was mir gefehlt hat. Nur eine hühere Prio nicht aber eine höhere Sbprio darf unterbrechen... danke leute
Nur als Anmerkung: An dieser Stelle unterscheiden sich auch die Implementierungen der Hersteller. Hier hat ARM etwas Flexibiliät eingeräumt. Der STM32 z.B. hat 16 Prio-level (also 4 Bit), die Infineon XMC4000 haben 64 Level.
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.