This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM2434: AM2434: Data Abort on ldrexd during 64-bit atomic write to Shared MSRAM

Part Number: AM2434

Hi,

I am working on a multicore application using the AM2434 (FreeRTOS) and am running into a hardware exception regarding atomic memory accesses.

The Architecture:

  • Core-1 (Server): Writes a 64-bit variable to a shared MSRAM region.

  • Other Cores (Clients): Constantly polling/reading this exact same 64-bit memory address.

The Memory Configuration: The shared MSRAM region is configured in the MPU with the following attributes:

Memory Type: Normal

Cache Policy: Non-Cacheable, Non-Bufferable (TEX=001, C=0, B=0)

Shareability: Shareable (S=1)

Permissions: Supervisor RW, User RW, Execute Never

The Problem: To prevent torn reads across the cores, I am using the standard ATOMIC_STORE macro for the 64-bit write. The compiler correctly generates the ldrexd and strexd instructions.

However, when stepping through the disassembly in Code Composer Studio, the CPU throws a Data Abort exception the exact moment it tries to execute the ldrexd command on this shared memory pointer.

My Questions:

1.Does the AM2434 interconnect/AXI bus support the Global Exclusive Monitor for the shared MSRAM region to allow ldrexd/strexd instructions?

2.If the Exclusive Monitor is not supported here, what is the recommended TI solution for locking shared memory or safely passing 64-bit variables between cores without torn reads? 

Thanks, 

Regards,

Eli