Forum: Mikrocontroller und Digitale Elektronik STM32F2: Priorität von Interrupt


von stuser (Gast)


Lesenswert?

Hi, ich habe folgendes Verständnisproblem bezüglich Priorität von 
Interrupt auf dem STM32F2 Mikrocontroller. In der Initialisierung wird 
der Interrupt zum Beispiel für den CAN wie in Block 1 initialisiert. 
Hier wird auch die Priorität vergeben. Nun gibt es noch zwei weitere 
Funktionen, mit denen lässt sich ebenfalls die Priorität von dem 
Interrupt vergeben (siehe Block 2). Wenn ich mit der Funktion 
NVIC_SetPriority die Priorität 2 vergebe, ist dann 
NVIC_IRQChannelPreemptionPriority ebenfalls auf 2?


Block 1:
1
NVIC_InitStructure.NVIC_IRQChannel                   = CAN1_RX0_IRQn;
2
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
3
NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;
4
NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;

Block 2:
1
NVIC_SetPriority(CAN1_RX0_IRQn,2);
2
NVIC_SetPriorityGrouping(0);

von Ingo L. (corrtexx)


Lesenswert?

Hast du mal geguckt was die dazugehöre Funktion, der du die Strukt 
übergibst tut und was die Einzelfunktion? Ich könnte mir denken sie 
greifen beide aufs Selbe Register zu...


Ingo

von stuser (Gast)


Lesenswert?

Hab da auch schon nachgeschaut. Leider habe ich bisher keine 
Gemeinsamkeiten finden können.

Wenn NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority auf den Wert 2 
gesetzt wird, dann ist dies das gleiche, als würde ich der Funktion 
NVIC_SetPriority den zweiten Wert 2 übergeben?

von Sina A. (sinapse)


Lesenswert?

jeder interrupt hat nur ein register, das seine priorität bestimmt. 
NVIC_SetPriority schreibt in dieses register.

jetzt kann man dieses register unterteilen, wenn man möchte. ein paar 
der oberen bits kann man einer groupprio zuordnen und die restlichen 
bits einer subprio. an welcher bit-stelle dieser schnitt stattfindet 
wird mit NVIC_SetPriorityGrouping eingestellt. nur die interrupts mit 
hoeherer groupprio sind preemptionfähig.


ich hab mich jetzt nicht mit der stm lib auseinandergesetzt... aber den 
namen nach in der init struktur zu urteilen, kannst du jedem interrupt 
nun eine groupprio (=preemption prio) und eine subprio zuordenen.  beim 
setzen der werte wird dann die lib funktion nachgucken welches grouping 
eingestellt ist und automatisch die prio auf die richtigen bits im 
register verteilen

lg

von Dr. Sommer (Gast)


Lesenswert?

Zum Glück ist so etwas alles dokumentiert!

ARMv7M Architecture Reference Manual, S. 635.

von Karsten F. (Firma: von Dänemark) (bingo600)


Lesenswert?


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.