mpu.h

Cortex-M Memory Protection Unit (MPU) Driver Header File.

MPU_NUM_REGIONS

Number of MPU regions available (will vary depending on the Cortex-M version)

1
( (MPU->TYPE & MPU_TYPE_DREGION_Msk) >> MPU_TYPE_DREGION_Pos )
MPU_SIZE_TO_BYTES( size)

convert a region size code to a size in bytes

1
( (uintptr_t)1 << ((size) + 1) )

Parameters

size:region size code, e.g. MPU_SIZE_32B

Return values

  • region size in bytes
enum @67
AP_NO_NO = 0
no access for all levels
AP_RW_NO = 1
read/write for privileged level, no access from user level
AP_RW_RO = 2
read/write for privileged level, read-only for user level
AP_RW_RW = 3
read/write for all levels
AP_RO_NO = 5
read-only for privileged level, no access from user level
AP_RO_RO = 6
read-only for all levels
enum @68
MPU_SIZE_32B =  4
32 bytes
MPU_SIZE_64B =  5
64 bytes
MPU_SIZE_128B =  6
128 bytes
MPU_SIZE_256B =  7
256 bytes
MPU_SIZE_512B =  8
512 bytes
MPU_SIZE_1K =  9
1 kilobytes
MPU_SIZE_2K = 10
2 kilobytes
MPU_SIZE_4K = 11
4 kilobytes
MPU_SIZE_8K = 12
8 kilobytes
MPU_SIZE_16K = 13
16 kilobytes
MPU_SIZE_32K = 14
32 kilobytes
MPU_SIZE_64K = 15
64 kilobytes
MPU_SIZE_128K = 16
128 kilobytes
MPU_SIZE_256K = 17
256 kilobytes
MPU_SIZE_512K = 18
512 kilobytes
MPU_SIZE_1M = 19
1 megabytes
MPU_SIZE_2M = 20
2 megabytes
MPU_SIZE_4M = 21
4 megabytes
MPU_SIZE_8M = 22
8 megabytes
MPU_SIZE_16M = 23
16 megabytes
MPU_SIZE_32M = 24
32 megabytes
MPU_SIZE_64M = 25
64 megabytes
MPU_SIZE_128M = 26
128 megabytes
MPU_SIZE_256M = 27
256 megabytes
MPU_SIZE_512M = 28
512 megabytes
MPU_SIZE_1G = 29
1 gigabytes
MPU_SIZE_2G = 30
2 gigabytes
MPU_SIZE_4G = 31
4 gigabytes
uint32_t MPU_ATTR(uint32_t xn, uint32_t ap, uint32_t tex, uint32_t c, uint32_t b, uint32_t s, uint32_t size)

generate an MPU attribute word suitable for writing to the RASR register

Parameters

xn:eXecute Never flag (forbids instruction fetches)
ap:Access Permission word, e.g. AP_RO_RO
tex:Type Extension Field
c:Cacheable bit
b:Bufferable bit
s:Sub-Region Disable (SRD) field
size:region size code, e.g. MPU_SIZE_32B

Return values

  • combined region attribute word
int mpu_disable(void)

disable the MPU

Return values

  • 0 on success
  • <0 on failure or no MPU present
int mpu_enable(void)

enable the MPU

Return values

  • 0 on success
  • <0 on failure or no MPU present
bool mpu_enabled(void)

test if the MPU is enabled

Return values

  • true if enabled
  • false if disabled
int mpu_configure(uint_fast8_t region, uintptr_t base, uint_fast32_t attr)

configure the base address and attributes for an MPU region

Parameters

region:MPU region to configure (0 <= region < MPU_NUM_REGIONS)
base:base address in RAM (aligned to the size specified within attr)
attr:attribute word generated by mpu.h::MPU_ATTR()

Return values

  • 0 on success
  • <0 on failure or no MPU present