Part Number: TMS570LC4357
Hi,
I am getting a data abort that does not make sense to me.
I am using a TMDX570LC4357HDK board, CCS v11.1.0.0.00012, and the TI 20.2.5.LTS compiler.
I recently created a forum post about an undef abort in the ESM FIQ. I was helped with that issue, buy ensuring the ECC data was correct for Flash using my linker script. I no longer get any ESM interrupts. This problem I am describing here happens at approximately the same time in the same application. My application has two of the same HDK boards communicating with each other over SPI. If I do not connect their SPI pins, so there is no communication and no SPI interrupts, I do not get this issue. Perhaps the lack of these interrupts just makes the problem more rare and so I just have not seen it yet, or perhaps the interrupts are the culprit somehow. I have two applications - Peer0 and Peer1 - the problem is only present on one of these applications, regardless of which HDK each Peer runs on.
Within an IRQ interrupt I am getting a data abort. I have executed this ISR many times before it fails. This is supposedly the instruction that fails, according to both the debug call stack and the R14_ABT register:
00000846: 4913 ldr r1, [pc, #0x4c] ;reads 0x08001C8C into R1
00000848: 9803 ldr r0, [r13, #0xc]
0000084a: 6008 str r0, [r1]
0000084c: 4914 ldr r1, [pc, #0x50] ;reads 0x08001C90 into R1
0000084e: 9803 ldr r0, [r13, #0xc]
00000850: 43C0 mvns r0, r0
00000852: 6008 str r0, [r1]
Clearly this does not make sense as that is not a read/write operation. The values of r0 and r1 suggest that it has not yet executed line 0x84C, as the value or R1 is 0x08001C8C.
The value of the DFSR is 0x00001008, which indicates a 'synchronous external abort' - meaning the MVNS instruction was the culprit - so either this is wrong, or r14_ABT is wrong?
The value of the DFAR is 0x07FFFFEC, which is not the value of any of the registers at the point of the abort occuring.
According to the ARMv7-R TRM, table B5-8, DFSR[10, 3:0] being 01000b means that the DFAR is valid, which does not appear true to me.
According to section B5.4.3, an external abort on an instruction fetch is reported using a Data abort. This leads me to believe that something has gone wrong unrelated to the currently executing code and that most of the above information is a red herring.
How can I debug this data abort, or am I missing something?
Many thanks,
Adam