This issue occurs with the 2014.x version of FreeRTOS and manifests as processor lockup on ~30% of the devices when running at low temp.
The issue is related to FreeRTOS not initializing the SPSR which is a register not affected by reset, so its un-initialized state varies based on conditions.
The SPSRs are UNKNOWN on reset. Per the ARMv7 Architecture Reference Manual, DDI 0406C.c ID05414, Pg. B1-1148. SPSR settles to non-zero at cold and zero at warm temperatures.
The assembly instruction fails under the following conditions:
- Returning from a FreeRTOS function hangs the system.
- The CPU incorrectly set to Big Endian mode.
Newer versions of FreeRTOS address the issue.
FreeRTOS v7.0.2 did not initialize SPSR before read-modify-write. There is no official FreeRTOS port for the Cortex-A9 in FreeRTOS V7.0.2. The first official port appeared in V8.0.0.
The first Xilinx Supported and tested FreeRTOS port is version 8.2.1.
Note: Xilinx software uses CPSR instead of SPSR so the issue is not seen for those cases.
If using FreeRTOS versions prior to v8.1.2, search all code for any SPSR commands and Modify/Initialize the SPSR bits.