Forum: Mikrocontroller und Digitale Elektronik STM32F4 Interrupt Prioritäten


von M. Н. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute.

Ich habe ien Verständnisproblem mit den Interruptprioritäten des 
Stm32F4xx

Laut ARM steht in den CortexM4 Kernen jedem Interrupt eine 8bit Priority 
zu. Doch im Programming Manual von STM steht nur was von 16 Prioritäten 
(4 bit).
Was ist da los?


Ebenfalls kann man die Prioritäten in Sub- und normale Prioritäten 
aufspalten. Dafür gibt es einen wert, der angibt, wie vile bits zur Sub- 
und wie viele zur normalen Priorität gehören (Binary Point und Priority 
Grouping). (siehe Anhang)
Es ist hier so, dass es hier ebenfalls nur für eine 4 bit Priorität 
ausgelegt ist. Zusätzlich ist der Initialzustand des Registers so, dass 
das Grouping kein in der Tabelle angegebener Wert ist.  Nämlich 0 für 
diese Bits.

Was verstehe ich hier nicht?

wenn es tatsächlich nur 4 Priority-Bits gibt, was passiert dann mit den 
anderen 4? Die müssen ja auch da sein. STM wird doch sicherlich keinen 
speziell abgewandelten Core verwenden.

Hoffe das sich das schnell klären lässt :)

von Jim M. (turboj)


Lesenswert?

M. H. schrieb:
> Laut ARM steht in den CortexM4 Kernen jedem Interrupt eine 8bit Priority
> zu. Doch im Programming Manual von STM steht nur was von 16 Prioritäten
> (4 bit).
> Was ist da los?

Da steht sicher bis zu 8-Bit Priority. Die genaue Anzahl ist nämlich 
"Implementation defined", üblich sind 3, 4 oder 5 Bits.

M. H. schrieb:
> STM wird doch sicherlich keinen speziell abgewandelten Core verwenden.

ARM bietet den Cortex-M4 Core mit variabler Priority Bitzahl an.

von Christopher J. (christopher_j23)


Lesenswert?

Seite 200 Tabelle 47 aus dem programming manual 
(http://www.st.com/web/en/resource/technical/document/programming_manual/DM00046982.pdf) 
sagt:

Each priority field holds a priority value, 0-255. The lower the value,
the greater the priority of the corresponding interrupt. The processor
implements only bits[7:4] of each field, bits[3:0] read as zero and
ignore writes.


Bei den NVICs kochen die Hersteller gerne ihr eigenes Süppchen, weil 
eine höhere Komplexität z.B. mit einem höheren Stromverbrauch 
einhergeht. Soweit ich weiß haben die Cortex M3 bzw. M4 meistens 4 Bit 
implementiert. Bei den Cortex M0 gibt es nur 3 Bit. Ausnahmen bestätigen 
natürlich die Regel: Die Tiva-Chips von TI (M4) haben auch nur 3 Bit.

von M. Н. (Gast)


Lesenswert?

Ok. vielen Dank.

Ich hab noch eine Frage:

da die bits für das Priority grouping nach dem Reset auf 0 stehen, 
wüsste ich gerne, was passiert, wenn man diese Bits nicht initialisiert 
und den NVIC trotzdem verwendet. Wie werden dann Prioritäten gehandhabt?

von ♪Geist (Gast)


Lesenswert?

M. H. schrieb:
> Wie werden dann Prioritäten gehandhabt?

Der zuerst auftretende Interrupt hat dann gerade die Priorität und der 
Rest wird ignoriert.


Hier noch Info zum STM32

NVIC_PriorityGroup_0: 0 Pre-emption priorities, 16 Sub-priorities
NVIC_PriorityGroup_1: 2 Pre-emption priorities, 8 Sub-priorities
NVIC_PriorityGroup_2: 4 Pre-emption priorities, 4 Sub-priorities
NVIC_PriorityGroup_3: 8 Pre-emption priorities, 2 Sub-priorities
NVIC_PriorityGroup_4: 16 Pre-emption priorities, 0 Sub-priorities


Beispiel:

void SysTick_Init(void) {

  RCC_ClocksTypeDef RCC_Clocks;

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
  NVIC_SetPriority(SysTick_IRQn, 
NVIC_EncodePriority(NVIC_GetPriorityGrouping(),10, 0));

  RCC_GetClocksFreq(&RCC_Clocks);
  SysTick_Config(RCC_Clocks.HCLK_Frequency / 100);
}

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.