C Microkernel Realtime eXecutive
Realtime Operating System for Cortex-M based microcontrollers
 
Loading...
Searching...
No Matches
mpu_priv.h
1#pragma once
2
3#include <RTE_Components.h>
4#include CMSIS_device_header
5
6#include <kernel/arch/mpu.h>
7
15#if defined(__ARM_ARCH_6M__) || defined(__ARM_ARCH_8M_BASE__)
16
17// ARMv6M and ARMv8M-Baseline don't have detailed fault status registers
18// provide some defaults which will make the code happy
19
20#define SCB_CFSR 0
21#define SCB_CFSR_IACCVIOL 1
22#define SCB_CFSR_DACCVIOL 1
23#define SCB_CFSR_MMARVALID 1
24#define SCB_MMFAR 0
25
26#endif
27
30#define MPU_RNR_REGION (MPU_RNR_REGION_Msk)
31#define MPU_RNR_REGION_LSB (MPU_RNR_REGION_Pos)
32
36#if !defined(__ARM_ARCH_8M_BASE__) && !defined(__ARM_ARCH_8M_MAIN__)
37#define MPU_RASR_ENABLE (MPU_RASR_ENABLE_Msk)
38#define MPU_RASR_SIZE (MPU_RASR_SIZE_Msk)
39#define MPU_RASR_SIZE_LSB (MPU_RASR_SIZE_Pos)
40#define MPU_RASR_SRD (MPU_RASR_SRD_Msk)
41#define MPU_RASR_SRD_LSB (MPU_RASR_SRD_Pos)
42#define MPU_RASR_ATTR_C (MPU_RASR_C_Msk)
43#define MPU_RASR_ATTR_XN (MPU_RASR_XN_Msk)
44#define MPU_RASR_ATTR_AP (MPU_RASR_AP_Msk)
45#define MPU_RASR_ATTR_AP_PRW_URO (ARM_MPU_AP_URO << MPU_RASR_AP_Pos)
46#define MPU_RASR_ATTR_AP_PRW_URW (ARM_MPU_AP_FULL << MPU_RASR_AP_Pos)
47#endif
53#if defined(__ARM_ARCH_8M_BASE__) || defined(__ARM_ARCH_8M_MAIN__)
54#define MPU_RLAR_ENABLE (MPU_RLAR_EN_Msk)
55#define MPU_RLAR_LIMIT (MPU_RLAR_LIMIT_Msk)
56#define MPU_RLAR_LIMIT_LSB (MPU_RLAR_LIMIT_Pos)
57#define MPU_RLAR_ATTRINDX (MPU_RLAR_AttrIndx_Msk)
58#define MPU_RLAR_ATTRINDX_LSB (MPU_RLAR_AttrIndx_Pos)
59
60/* Memory attribute indices for MAIR */
61#define MPU_ATTR_DEVICE_nGnRnE 0 /* Device memory, non-gathering, non-reordering, no early write ack */
62#define MPU_ATTR_NORMAL_WT 1 /* Normal memory, write-through, read-allocate */
63#define MPU_ATTR_NORMAL_WB 2 /* Normal memory, write-back, read/write-allocate */
64#define MPU_ATTR_NORMAL_NC 3 /* Normal memory, non-cacheable */
65
66/* Access permission encoding for RBAR */
67#define MPU_RBAR_AP (MPU_RBAR_AP_Msk)
68#define MPU_RBAR_AP_LSB (MPU_RBAR_AP_Pos)
69#define MPU_RBAR_AP_RW_RW (0x1 << MPU_RBAR_AP_LSB) /* Privileged RW, Unprivileged RW */
70#define MPU_RBAR_AP_RW_RO (0x3 << MPU_RBAR_AP_LSB) /* Privileged RW, Unprivileged RO */
71#define MPU_RBAR_AP_RW_NONE (0x2 << MPU_RBAR_AP_LSB) /* Privileged RW, Unprivileged None */
72
73#define MPU_RBAR_XN (MPU_RBAR_XN_Msk) /* Execute Never */
74#define MPU_RBAR_SH (MPU_RBAR_SH_Msk) /* Shareability */
75#define MPU_RBAR_SH_LSB (MPU_RBAR_SH_Pos)
76#endif
82#define MPU_RBAR_VALID (MPU_RBAR_VALID_Msk)
83#define MPU_RBAR_ADDR (MPU_RBAR_ADDR_Msk)
84#define MPU_RBAR_REGION (MPU_RBAR_REGION_Msk)
85#define MPU_RBAR_REGION_LSB (MPU_RBAR_REGION_Pos)
91#define MPU_CTRL_ENABLE (MPU_CTRL_ENABLE_Msk)
92#define MPU_CTRL_PRIVDEFENA (MPU_CTRL_PRIVDEFENA_Msk)
95#define MPU_AP_MASK 0b0111
96#define MPU_EXECUTE_SHIFT 3
97
105#define OS_MPU_REGION_DATA 0
107#define OS_MPU_REGION_BSS 1
109#define OS_MPU_REGION_MMIO 2
111#define OS_MPU_REGION_MMIO2 3
113#define OS_MPU_REGION_SHARED 4
115#define OS_MPU_REGION_UNUSED2 5
117#define OS_MPU_REGION_STACK 6
119#define OS_MPU_REGION_EXECUTABLE 7
120
134int mpu_set_region(uint8_t region, const void * base, uint32_t size, uint8_t cls);
135
140int mpu_configure_region(uint8_t region, const void * base, uint32_t size, uint8_t flags, struct MPU_Registers * region_def);
141
148int mpu_clear_region(uint8_t region);
149
150
151int mpu_load(const MPU_State * state, uint8_t base, uint8_t count);
152
Definition mpu.h:3
ARMv6M/ARMv7M MPU registers for one region (base + size model)
Definition mpu.h:26