Hello Community,
I have a question regarding the STMIA instruction in an ARM926EJ-S.
We build a SOC with this core and one of our own modules connected to the DATA-AHB has a bug.
One workaround for this bug is to access four adjacent registers (e.g. 0xB0000050, 0xB0000054, 0xB0000058 and 0xB000005C) of this module with a 32bit wide four beat burst.
(The module must see an address change from 0xB0000050 to 0xB0000054 immediatly after the access to 0xB0000050 and normally a four beat burst to 0xB0000050 should do this.)
Is there a possibility that the STMIA in the code example below is executed as four single NONSEQ accesses from the ARM926EJ-S instead as a four beat burst with HTRANS = NONSEQ, SEQ, SEQ , SEQ?
LDR r0, =0xB0000050
LDR r1, =0x12345678
LDR r2, =0x00000000
LDR r3, =0x00000000
LDR r4, =0x00000000
STMIA r0!, {r1 – r4}
Is there a difference between the code above and the code below regarding the possibility that the STMIA is executed as four single accesses?
LDR r12, =0x00000000
STMIA r0!, {r1 – r3, r12}
Every help welcome.
Thank you.
Best regards
Daniel
Hello,
at least I found one possibility by my own: When the burst is terminated early because the Core looses ownership of the bus.
Losing access to the bus (removal of HGRANT) would certainly cause the transaction to be interrupted and then completed as a sequence of single transfers.
This would also happen if the slave returned a SPLIT or RETRY response.
Chris