AnsweredAssumed Answered

Priorities of Interruptions (Systick has the same priority as LTDC and other peripherals?)

Question asked by Ivan Ivan on Aug 31, 2017
Latest reply on Sep 1, 2017 by Ivan Ivan

Hello. I'm using STM32F429I-DISC1 board and implementing a complex project with plenty of peripherals including a built-in screen using a provided HAL code.


I have stumbled upon some problem regarding the order of operations. While solving it I have wrote such experimental code: 

uint32_t Systick_foundPriority = NVIC_GetPriority(SysTick_IRQn);
uint32_t SPI5_foundPriority = NVIC_GetPriority(SPI5_IRQn);
uint32_t LTDC_foundPriority = NVIC_GetPriority(LTDC_IRQn);
uint32_t LTDC_ER_foundPriority = NVIC_GetPriority(LTDC_ER_IRQn);
uint32_t DMA2D_foundPriority = NVIC_GetPriority(DMA2D_IRQn);


I have expected these variables to have values defined in table 62 (Vector table for STM32F42xxx and STM32F43xxx), on p.376 of Reference Manual for STM32F429 but they all appear to be equal to zero. NVIC_GetPriority refers to undocumented registers which look like NVIC->IPR (there are several of these). 

I have checked out these registers in debugger, and only IPR14 had value of 0x000000F0 (IPR_N0), other were all zeros.

Is this a real place where IRQ priorities are stored?

Why the developers of screen-handling (BSP, HAL) code decided to put a maximal priority for screen-related activities?

Is it OK to change these priorities after screen has been initialized?