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 :)
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.
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
