Specifications
  Cortex-M3 / Cortex-M3 with ETM (AT420/AT425) 
 Date of Issue: 12-Nov-2008  ARM Errata Notice  Document Revision 2.0 
PR326-PRDC-009450 v2.0 
© Copyright ARM Limited 2008. All rights reserved.  Page 10 of 20 
Non Confidential 
Implications 
The base register will not be restored as expected preventing the instruction from being restarted correctly upon 
return from the interrupt service routine or from the fault handler. 
Workaround 
There are two workarounds for this erratum. However, if the instructions are always executed from the code 
space and faults cannot occur then a workaround is not required. 
The first workaround is to replace the LDRD instruction affected by this erratum with other suitable instructions. 
 LDRD Ra, Rb, [Ra, #imm]  
may be directly replaced by two LDR instructions which will produce exactly the same functionality: 
 LDR Rb, [Ra, #imm + 4]  
 LDR Ra, [Ra, #imm]  
Alternatively, an LDRD with base in list may still be used if the base register is the second register in the list: 
 LDRD Rb, Ra, [Ra, #imm]  
However, in order to achieve the same functionality this requires that the data at the two addresses are 
swapped, or that the following instructions using Ra or Rb swap their source registers. 
The second workaround can be applied when using Cortex-M3 r2p0. It is possible to prevent this erratum 
occurring for the interrupt case by setting DISMCYCINT (bit[0]) in the Auxiliary Control Register which is located 
at address 0xE000E008. This bit prevents the interruption of multi-cycle instructions and will therefore increase 
the interrupt latency of Cortex-M3. 
Setting DISMCYCINT does not prevent the second load being faulted which means that the base will still be 
incorrect for bus faults or MPU faults. 
Due to the performance impact of workaround two, and because workaround two does not address the fault 
conditions of this erratum, ARM recommends that workaround one is used. 










