
Cortex-M4 Peripherals
ARM DUI 0553A
Copyright © 2010 ARM. All rights reserved.
4-46
ID121610
Non-Confidential
You can do this in two words for pre-packed information. This means that the MPU_RBAR
contains the required region number and had the VALID bit set to 1, see
. Use this when the data is statically packed, for example in a boot
loader:
; R1 = address and region number in one
; R2 = size and attributes in one
LDR R0, =MPU_RBAR
; 0xE000ED9C, MPU Region Base register
STR R1, [R0, #0x0]
; Region base address and
; region number combined with VALID (bit 4) set to 1
STR R2, [R0, #0x4]
; Region Attribute, Size and Enable
Subregions
Regions of 256 bytes or more are divided into eight equal-sized subregions. Set the
corresponding bit in the SRD field of the MPU_RASR to disable a subregion, see
. The least significant bit of SRD controls the first
subregion, and the most significant bit controls the last subregion. Disabling a subregion means
another region overlapping the disabled range matches instead. If no other enabled region
overlaps the disabled subregion the MPU issues a fault.
Regions of 32, 64, and 128 bytes do not support subregions, With regions of these sizes, you
must set the SRD field to
0x00
, otherwise the MPU behavior is Unpredictable.
Example of SRD use
Two regions with the same base address overlap. Region one is 128KB, and region two is
512KB. To ensure the attributes from region one apply to the first 128KB region, set the SRD
field for region two to
0b00000011
to disable the first two subregions, as the figure shows.
4.5.9
MPU usage hints and tips
To avoid unexpected behavior, disable the interrupts before updating the attributes of a region
that the interrupt handlers might access.
Ensure software uses aligned accesses of the correct size to access MPU registers:
•
except for the MPU_RASR, it must use aligned word accesses
•
for the MPU_RASR it can use byte or aligned halfword or word accesses.
The processor does not support unaligned accesses to MPU registers.
When setting up the MPU, and if the MPU has previously been programmed, disable unused
regions to prevent any previous region settings from affecting the new MPU setup.
Region 1
Disabled subregion
Disabled subregion
Region 2, with
subregions
Base address of both regions
Offset from
base address
0
64KB
128KB
192KB
256KB
320KB
384KB
448KB
512KB