NVIC Priority grouping CORTEX M3

Gast #3469233
Lesenswert?

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ß
(Firma: EleLa - www.elela.de) #3469252
Lesenswert?

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.
#3469253
Lesenswert?

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).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren