MPUEMLIB

Detailed Description

Memory Protection Unit (MPU) Peripheral API.

This module contains functions to enable, disable and setup the MPU. The MPU is used to control access attributes and permissions in the memory map. The settings that can be controlled are:

  • Executable attribute.
  • Cachable, bufferable and shareable attributes.
  • Cache policy.
  • Access permissions: Priviliged or User state, read or write access, and combinations of all these.

The MPU can be activated and deactivated with functions:

*  MPU_Enable(..);
*  MPU_Disable();

The MPU can control 8 memory regions with individual access control settings. Section attributes and permissions are set with:

*  MPU_ConfigureRegion(..);

It is advisable to disable the MPU when altering region settings.

Data Structures

struct  MPU_RegionInit_TypeDef
 

Macros

#define MPU_CTRL_HFNMIENA   MPU_CTRL_HFNMIENA_Msk
 
#define MPU_CTRL_PRIVDEFENA   MPU_CTRL_PRIVDEFENA_Msk
 
#define MPU_INIT_FLASH_DEFAULT
 
#define MPU_INIT_PERIPHERAL_DEFAULT
 
#define MPU_INIT_SRAM_DEFAULT
 

Enumerations

enum  MPU_RegionAp_TypeDef {
  mpuRegionNoAccess = 0,
  mpuRegionApPRw = 1,
  mpuRegionApPRwURo = 2,
  mpuRegionApFullAccess = 3,
  mpuRegionApPRo = 5,
  mpuRegionApPRo_URo = 6
}
 
enum  MPU_RegionSize_TypeDef {
  mpuRegionSize32b = 4,
  mpuRegionSize64b = 5,
  mpuRegionSize128b = 6,
  mpuRegionSize256b = 7,
  mpuRegionSize512b = 8,
  mpuRegionSize1Kb = 9,
  mpuRegionSize2Kb = 10,
  mpuRegionSize4Kb = 11,
  mpuRegionSize8Kb = 12,
  mpuRegionSize16Kb = 13,
  mpuRegionSize32Kb = 14,
  mpuRegionSize64Kb = 15,
  mpuRegionSize128Kb = 16,
  mpuRegionSize256Kb = 17,
  mpuRegionSize512Kb = 18,
  mpuRegionSize1Mb = 19,
  mpuRegionSize2Mb = 20,
  mpuRegionSize4Mb = 21,
  mpuRegionSize8Mb = 22,
  mpuRegionSize16Mb = 23,
  mpuRegionSize32Mb = 24,
  mpuRegionSize64Mb = 25,
  mpuRegionSize128Mb = 26,
  mpuRegionSize256Mb = 27,
  mpuRegionSize512Mb = 28,
  mpuRegionSize1Gb = 29,
  mpuRegionSize2Gb = 30,
  mpuRegionSize4Gb = 31
}
 

Functions

void MPU_ConfigureRegion (const MPU_RegionInit_TypeDef *init)
 Configure an MPU region.
 
__STATIC_INLINE void MPU_Disable (void)
 Disable the MPU.
 
__STATIC_INLINE void MPU_Enable (uint32_t flags)
 Enable the MPU.
 

Macro Definition Documentation

#define MPU_CTRL_HFNMIENA   MPU_CTRL_HFNMIENA_Msk

Argument to MPU_enable(). Enables MPU during hard fault, NMI, and FAULTMASK handlers.

Definition at line 65 of file em_mpu.h.

#define MPU_CTRL_PRIVDEFENA   MPU_CTRL_PRIVDEFENA_Msk

Argument to MPU_enable(). Enables priviledged access to default memory map.

Definition at line 60 of file em_mpu.h.

#define MPU_INIT_FLASH_DEFAULT
Value:
{ \
true, /* Enable MPU region. */ \
0, /* MPU Region number. */ \
FLASH_MEM_BASE, /* Flash base address. */ \
mpuRegionSize1Mb, /* Size - Set to max. */ \
mpuRegionApFullAccess, /* Access permissions. */ \
false, /* Execution allowed. */ \
false, /* Not shareable. */ \
true, /* Cacheable. */ \
false, /* Not bufferable. */ \
0, /* No subregions. */ \
0 /* No TEX attributes. */ \
}

Default configuration of MPU region init structure for flash memory.

Definition at line 137 of file em_mpu.h.

#define MPU_INIT_PERIPHERAL_DEFAULT
Value:
{ \
true, /* Enable MPU region. */ \
0, /* MPU Region number. */ \
0, /* Region base address. */ \
mpuRegionSize32b, /* Size - Set to minimum */ \
mpuRegionApFullAccess, /* Access permissions. */ \
true, /* Execution not allowed. */ \
true, /* Shareable. */ \
false, /* Not cacheable. */ \
true, /* Bufferable. */ \
0, /* No subregions. */ \
0 /* No TEX attributes. */ \
}

Default configuration of MPU region init structure for onchip peripherals.

Definition at line 169 of file em_mpu.h.

#define MPU_INIT_SRAM_DEFAULT
Value:
{ \
true, /* Enable MPU region. */ \
1, /* MPU Region number. */ \
RAM_MEM_BASE, /* SRAM base address. */ \
mpuRegionSize128Kb, /* Size - Set to max. */ \
mpuRegionApFullAccess, /* Access permissions. */ \
false, /* Execution allowed. */ \
true, /* Shareable. */ \
true, /* Cacheable. */ \
false, /* Not bufferable. */ \
0, /* No subregions. */ \
0 /* No TEX attributes. */ \
}

Default configuration of MPU region init structure for sram memory.

Definition at line 153 of file em_mpu.h.

Enumeration Type Documentation

MPU region access permission attributes.

Enumerator
mpuRegionNoAccess 

No access what so ever.

mpuRegionApPRw 

Priviledged state R/W only.

mpuRegionApPRwURo 

Priviledged state R/W, User state R only.

mpuRegionApFullAccess 

R/W in Priviledged and User state.

mpuRegionApPRo 

Priviledged R only.

mpuRegionApPRo_URo 

R only in Priviledged and User state.

Definition at line 108 of file em_mpu.h.

Size of an MPU region.

Enumerator
mpuRegionSize32b 

32 byte region size.

mpuRegionSize64b 

64 byte region size.

mpuRegionSize128b 

128 byte region size.

mpuRegionSize256b 

256 byte region size.

mpuRegionSize512b 

512 byte region size.

mpuRegionSize1Kb 

1K byte region size.

mpuRegionSize2Kb 

2K byte region size.

mpuRegionSize4Kb 

4K byte region size.

mpuRegionSize8Kb 

8K byte region size.

mpuRegionSize16Kb 

16K byte region size.

mpuRegionSize32Kb 

32K byte region size.

mpuRegionSize64Kb 

64K byte region size.

mpuRegionSize128Kb 

128K byte region size.

mpuRegionSize256Kb 

256K byte region size.

mpuRegionSize512Kb 

512K byte region size.

mpuRegionSize1Mb 

1M byte region size.

mpuRegionSize2Mb 

2M byte region size.

mpuRegionSize4Mb 

4M byte region size.

mpuRegionSize8Mb 

8M byte region size.

mpuRegionSize16Mb 

16M byte region size.

mpuRegionSize32Mb 

32M byte region size.

mpuRegionSize64Mb 

64M byte region size.

mpuRegionSize128Mb 

128M byte region size.

mpuRegionSize256Mb 

256M byte region size.

mpuRegionSize512Mb 

512M byte region size.

mpuRegionSize1Gb 

1G byte region size.

mpuRegionSize2Gb 

2G byte region size.

mpuRegionSize4Gb 

4G byte region size.

Definition at line 74 of file em_mpu.h.

Function Documentation

void MPU_ConfigureRegion ( const MPU_RegionInit_TypeDef init)

Configure an MPU region.

Writes to MPU RBAR and RASR registers. Refer to Cortex-M3 Reference Manual, MPU chapter for further details. To disable a region it is only required to set init->regionNo to the desired value and init->regionEnable = false.

Parameters
[in]initPointer to a structure containing MPU region init information.

Definition at line 87 of file em_mpu.c.

References MPU_RegionInit_TypeDef::accessPermission, MPU_RegionInit_TypeDef::baseAddress, MPU_RegionInit_TypeDef::bufferable, MPU_RegionInit_TypeDef::cacheable, MPU_RegionInit_TypeDef::disableExec, MPU_RegionInit_TypeDef::regionEnable, MPU_RegionInit_TypeDef::regionNo, MPU_RegionInit_TypeDef::shareable, MPU_RegionInit_TypeDef::size, MPU_RegionInit_TypeDef::srd, and MPU_RegionInit_TypeDef::tex.

__STATIC_INLINE void MPU_Disable ( void  )

Disable the MPU.

Disable MPU and MPU fault exceptions.

Definition at line 196 of file em_mpu.h.

__STATIC_INLINE void MPU_Enable ( uint32_t  flags)

Enable the MPU.

Enable MPU and MPU fault exceptions.

Parameters
[in]flagsUse a logical OR of MPU_CTRL_PRIVDEFENA and MPU_CTRL_HFNMIENA as needed.

Definition at line 213 of file em_mpu.h.