Part Number: AM2434
Hello,
I'm running FreeRTOS from ind_comms_sdk_am243x_11_00_00_08 on an AM2434. On one of the R5 cores I get in about 50% of the cases a data abort for the first context switch, which happens to be the timer task.
I've already read out the corresponding registers:
- DFAR: 0x00000000
- DFSR: 0x00001C06
According to the documentation of the fault registers (https://developer.arm.com/documentation/ddi0460/c/System-Control/Register-descriptions/Fault-Status-and-Address-Registers) this seems to be an Asynchronous External Abort.
When the abort occurs, it always happens during execution of the RFEIA instruction at the end of the context switch. Which should mean I end up in the data abort handler (in ~50% of the cases) if I step forward with PC=7010ace4. After this step forward I am either in the timer task function or the vector table for the data abort.
vPortRestoreTaskContext():7010acb0: F102001F cps #0x1f7010acb4: E59F01C8 ldr r0, [pc, #0x1c8]7010acb8: E5901000 ldr r1, [r0]7010acbc: E591D000 ldr r13, [r1]7010acc0: E59F01C0 ldr r0, [pc, #0x1c0]7010acc4: E49D1004 pop {r1}7010acc8: E5801000 str r1, [r0]7010accc: E3510000 cmp r1, #07010acd0: 149D0004 popne {r0}7010acd4: 1CBD0B20 vpopne {d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15}7010acd8: 1EE10A10 vmsrne fpscr, r07010acdc: F57FF01F clrex 7010ace0: E8BD5FFF pop {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r14}7010ace4: F8BD0A00 rfeia r13!
As it is an asynchronous external abort I'm assuming that the actual trigger might be coming from another instruction, which just happens to be executed in the pipeline at the same time? For this purpose I have already tried to move the stack of this task from the external DDR into the MSRAM, with no success.
What could be causing this issue? Are there any additional fault registers or something similar which could explain in more detail what is triggering this issue?