Forum: Mikrocontroller und Digitale Elektronik STM32 NVIC Priority Grouping


von Jay (Gast)


Lesenswert?

Hallo,

ich beschäftige mich gerade etwas mit dem STM32F105 und FreeRTOS. Ich 
wollte vorallem etwas mit der UART herumprobieren. Also habe ich alles 
nötige aus dem beigelegten Demoprogramm "CORTEX_STM32F103_GCC_Rowley" 
kopiert. Dachte ich zumindest.
Das Programm funktionierte anfangs auch ganz ordentlich. Nur wenn man 
längere Zeit grössere Datenmengen über die UART geschickt hatte kam es 
zu Problemen, dass sich Lese- und Schreibpointer der Queues verschoben 
haben.
Also nochmal von vorne angefangen und das komplette Beispielprogramm 
geladen. Hier hat es funktioniert. Offensichtlich habe ich doch etwas 
vergessen aus dem Quellcode mitzunehmen. Nach dem ich den Quellcode 
intensiver durchgeschaut hatte, fiel mir folgende Zeile auf:
NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );
Nach dem ich die Zeile in mein Projekt übernommen hatte, funktioniert 
nun auch mein zusammgebasteltes Demoprojekt.
Um zu verstehen, was die Zeile macht habe ich mir den Quellcode 
angeschaut und anschliessen PM0056 ( 
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/CD00228163.pdf 
). Dort wird auf Seite 134 das Register beschrieben. Es wird festgelegt, 
dass es 16 Priotiäten und 0 Subprioritäten gibt.
Abschliessend wollte ich wissen, wie der Reset Zustand ist um zu 
verstehen, was genau bei meinem ersten Versuch schiefgelaufen ist. Hier 
kommt nun die eigentliche Frage:

tl;dr

Laut PM0056 ( 
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/CD00228163.pdf 
) ist der Standardwert des Registers SCB_AIRCR 0xFA050000. => 
PRIGROUP[2:0] = 0b000. Laut Table 45 sind die gültigen Werte aber 
zwischen 0b011 und 0b111.
Was bedeutet 0b000 bzw. wie vehält sich die MCU bzw. wie interpretiert 
es die Prioritäten (welche Aufteilung)?

CU,
Jay

von Dr. Sommer (Gast)


Lesenswert?

Schau ins ARMv7M Architecture Reference Manual, da ist das alles 
detailliert dokumentiert. zB Seite 636 und 717.

von Jay (Gast)


Lesenswert?

Hallo,

erstmal danke.

Mal sehen, ob ich das richtig verstehe:
STM32 benutzt 4bits für die Prioritäten. Laut dem Reference Manual sind 
die anderen 4bits als 0 zu behandeln.
Daraus folgere ich, dass die PRIGROUP 0 bis 3 für STM32 quasi identisch 
sind, da die subpriority bits in allen Fällen 0 sind. Zwar ändert sich 
die Anzahl der group priority bits, aber die Reihenfolge/Priorität 
bleibt erhalten.

Wenn das, was ich geschrieben habe, stimmt dann liegt das "Problem" 
irgendwo im Quellcode. Irgendwo wird also wahrscheinlich auf das 
Register zugegriffen um irgendwas berechnen.
Da ich nicht direkt mit den Registern arbeite sondern die SPL verwende 
werde ich wohl dort fündig. Wahrscheinlich steht irgendwo in einem 
Kommentar: "Achja wenn du vorher nicht 'NVIC_PriorityGroupConfig' 
aufgerufen hast funktioniert das hier nicht richtig."

CU,
Jay

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.