Using FreeRTOS on ARM Cortex-A9 Embedded Processors That incorporate a Generic Interrupt Controller (GIC)

eperie wrote on Thursday, November 17, 2016:

Hi,

I just successfully completed porting vConfigureTickInterrupt(), vClearTickInterrupt() vApplicationFPUSafeIRQHandler(), vParTestInitialise(), vParTestSetLED(), vParTestToggleLED() from the Cyclone V demo to a Cortex-A7, and your documentation "Using FreeRTOS on ARM Cortex-A9 Embedded Processors That incorporate a Generic Interrupt Controller (GIC) " was great and extremely useful for this purpose - thanks.

I would have a suggestion however: may be you could explicit that the interrupt priority for the timer interrupt shall be set in the GIC to portLOWEST_USABLE_INTERRUPT_PRIORITY << portPRIORITY_SHIFT, i.e. something like:

Special Note 4: The priority level for the interrupt IRQn used for the timer tick shall be set to (portLOWEST_USABLE_INTERRUPT_PRIORITY << portPRIORITY_SHIFT) in its Interrupt Priority Register (ICDIPRn).

Since I was using the ARM GIC for the very first time, I missed this part until vPortValidateInterruptPriority() trigered a configASSERT() while validating portICCRPR_RUNNING_PRIORITY_REGISTER and revisited port.c and the Cyclone V demo code for vConfigureTickInterrupt().

Best regards,

rtel wrote on Thursday, November 17, 2016:

Thanks for taking the time to provide your feedback.

eperie wrote on Tuesday, November 22, 2016:

You are welcome.

I forgot to mention that I had to slightly modify portASM.s from:

.text
.arm

to:

.text
.cpu cortex-a7
.fpu neon-vfpv4
.arm

I am compiling with the following options:
-march=armv7-a -mtune=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 -mthumb

All the best,