In the Zynq port of FreeRTOS (V8.1.2) the value of portLOWEST_USABLE_INTERRUPT_PRIORITY is defined as:
#define portLOWEST_USABLE_INTERRUPT_PRIORITY ( portLOWEST_INTERRUPT_PRIORITY - 1UL )
As I understand it, the Zynq supports 32 levels of interrupt priority, from 0 (highest) to 31 (lowest).
However FreeRTOS defines the lowest usable priority as 30, not 31. Why is this?
The FreeRTOS_Tick_Handler is driven by the CPU Private Timer, which generates a Private Peripheral Interrupt with IRQ #29, and the interrupt controller (GIC) is then configured to assign a priority of portLOWEST_USABLE_INTERRUPT_PRIORITY (30) to this interrupt. I don’t understand why this has to be priority 30 and not priority 31?
I tried changing the priorty to 31 and, not suprisingly, the FreeRTOS scheduler didn’t run.
I’ve read the Zynq Technical Reference Manual chapters on Interrupts and Timers and I don’t see any mention of the interrupt priorty 31 being unusable.
It’s just an academic quesion, but I’d like to understand why priority 31 is unusable?