Difference between revisions of "embOS MPU on CortexM"

From SEGGER Wiki
Jump to: navigation, search
(ARMv7-M Memory Attributes)
m
Line 48: Line 48:
   
 
{| class="wikitable"
 
{| class="wikitable"
  +
|-
  +
! colspan="4" | Settings || rowspan="58" | || colspan="3" | Resulting attributes
 
|-
 
|-
 
! TEX || C || B || S || Memory Type || Shareability || Other attributes
 
! TEX || C || B || S || Memory Type || Shareability || Other attributes
Line 72: Line 74:
 
| rowspan="6" | Normal
 
| rowspan="6" | Normal
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer and inner write through, no write allocate.
+
| rowspan="2" | Outer write through, no write allocate<br />Inner write through, no write allocate
 
|- style="vertical-align:middle;"
 
|- style="vertical-align:middle;"
 
| 1
 
| 1
Line 80: Line 82:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer and inner write back, no write allocate.
+
| rowspan="2" | Outer write back, no write allocate<br />Inner write back, no write allocate
 
|- style="vertical-align:middle;"
 
|- style="vertical-align:middle;"
 
| 1
 
| 1
Line 90: Line 92:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer and inner noncacheable.
+
| rowspan="2" | Outer noncacheable<br />Inner noncacheable
 
|- style="vertical-align:middle;"
 
|- style="vertical-align:middle;"
 
| 1
 
| 1
Line 97: Line 99:
 
| rowspan="2" | 1
 
| rowspan="2" | 1
 
| 0
 
| 0
| rowspan="2" colspan="3" | Reserved encoding
+
| rowspan="2" colspan="3" style="text-align:center;" | Reserved encoding
 
|- style="vertical-align:middle;"
 
|- style="vertical-align:middle;"
 
| 1
 
| 1
Line 104: Line 106:
 
| rowspan="2" | 0
 
| rowspan="2" | 0
 
| 0
 
| 0
| rowspan="2" colspan="3" | Implementation defined
+
| rowspan="2" colspan="3" style="text-align:center;" | Implementation defined encoding
 
|- style="vertical-align:middle;"
 
|- style="vertical-align:middle;"
 
| 1
 
| 1
Line 112: Line 114:
 
| rowspan="2" | Normal
 
| rowspan="2" | Normal
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer and inner write back, write and read allocate.
+
| rowspan="2" | Outer write back, write and read allocate<br />Inner write back, write and read allocate
 
|- style="vertical-align:middle;"
 
|- style="vertical-align:middle;"
 
| 1
 
| 1
Line 123: Line 125:
 
| rowspan="2" | Device
 
| rowspan="2" | Device
 
| rowspan="2" | Not shareable<ref name="SBit" />
 
| rowspan="2" | Not shareable<ref name="SBit" />
| rowspan="2" | Nonshared device.
+
| rowspan="2" | -
 
|- style="vertical-align:middle;"
 
|- style="vertical-align:middle;"
 
| 1
 
| 1
Line 129: Line 131:
 
| rowspan="2" | 1
 
| rowspan="2" | 1
 
| 0
 
| 0
| rowspan="6" colspan="3" | Reserved encoding
+
| rowspan="6" colspan="3" style="text-align:center;" | Reserved encoding
 
|- style="vertical-align:middle;"
 
|- style="vertical-align:middle;"
 
| 1
 
| 1
Line 150: Line 152:
 
| rowspan="32" | Normal
 
| rowspan="32" | Normal
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer noncacheable.<br />Inner noncacheable.
+
| rowspan="2" | Outer noncacheable<br />Inner noncacheable
 
|-
 
|-
 
| 1
 
| 1
Line 158: Line 160:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer noncacheable. <br />Inner write back, write and read allocate.
+
| rowspan="2" | Outer noncacheable<br />Inner write back, write and read allocate
 
|-
 
|-
 
| 1
 
| 1
Line 167: Line 169:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer noncacheable. <br />Inner write through, no write allocate.
+
| rowspan="2" | Outer noncacheable<br />Inner write through, no write allocate
 
|-
 
|-
 
| 1
 
| 1
Line 175: Line 177:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer noncacheable. <br />Inner write back, no write allocate.
+
| rowspan="2" | Outer noncacheable<br />Inner write back, no write allocate
 
|-
 
|-
 
| 1
 
| 1
Line 185: Line 187:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer write back, write and read allocate.<br />Inner noncacheable.
+
| rowspan="2" | Outer write back, write and read allocate<br />Inner noncacheable
 
|-
 
|-
 
| 1
 
| 1
Line 193: Line 195:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer write back, write and read allocate.<br />Inner write back, write and read allocate.
+
| rowspan="2" | Outer write back, write and read allocate<br />Inner write back, write and read allocate
 
|-
 
|-
 
| 1
 
| 1
Line 202: Line 204:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer write back, write and read allocate.<br />Inner write through, no write allocate.
+
| rowspan="2" | Outer write back, write and read allocate<br />Inner write through, no write allocate
 
|-
 
|-
 
| 1
 
| 1
Line 210: Line 212:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer write back, write and read allocate.<br />Inner write back, no write allocate.
+
| rowspan="2" | Outer write back, write and read allocate<br />Inner write back, no write allocate
 
|-
 
|-
 
| 1
 
| 1
Line 220: Line 222:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer write through, no write allocate.<br />Inner noncacheable.
+
| rowspan="2" | Outer write through, no write allocate<br />Inner noncacheable
 
|-
 
|-
 
| 1
 
| 1
Line 228: Line 230:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer write through, no write allocate.<br />Inner write back, write and read allocate.
+
| rowspan="2" | Outer write through, no write allocate<br />Inner write back, write and read allocate
 
|-
 
|-
 
| 1
 
| 1
Line 237: Line 239:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer write through, no write allocate.<br />Inner write through, no write allocate.
+
| rowspan="2" | Outer write through, no write allocate<br />Inner write through, no write allocate
 
|-
 
|-
 
| 1
 
| 1
Line 245: Line 247:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer write through, no write allocate.<br />Inner write back, no write allocate.
+
| rowspan="2" | Outer write through, no write allocate<br />Inner write back, no write allocate
 
|-
 
|-
 
| 1
 
| 1
 
| Shareable
 
| Shareable
 
|-
 
|-
| rowspan="8" | 111<br />
+
| rowspan="8" | 111
 
| rowspan="4" | 0
 
| rowspan="4" | 0
 
| rowspan="2" | 0
 
| rowspan="2" | 0
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer write back, no write allocate.<br />Inner noncacheable.
+
| rowspan="2" | Outer write back, no write allocate<br />Inner noncacheable
 
|-
 
|-
 
| 1
 
| 1
Line 263: Line 265:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer write back, no write allocate.<br />Inner write back, write and read allocate.
+
| rowspan="2" | Outer write back, no write allocate<br />Inner write back, write and read allocate
 
|-
 
|-
 
| 1
 
| 1
Line 272: Line 274:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer write back, no write allocate.<br />Inner write through, no write allocate.
+
| rowspan="2" | Outer write back, no write allocate<br />Inner write through, no write allocate
 
|-
 
|-
 
| 1
 
| 1
Line 280: Line 282:
 
| 0
 
| 0
 
| Not shareable
 
| Not shareable
| rowspan="2" | Outer write back, no write allocate.<br />Inner write back, no write allocate.
+
| rowspan="2" | Outer write back, no write allocate<br />Inner write back, no write allocate
 
|-
 
|-
 
| 1
 
| 1

Revision as of 15:22, 24 March 2021

With embOS-MPU different memory regions with separate access rights and memory attributes can be defined. A memory region can be added with OS_MPU_AddRegion().

OS_MPU_AddRegion()

OS_MPU_AddRegion() has the following prototype:

void OS_MPU_AddRegion(OS_TASK* pTask,
                      OS_U32   BaseAddr,
                      OS_U32   Size,
                      OS_U32   Permissions,
                      OS_U32   Attributes);

ARMv7-M Memory Attributes

embOS-MPU includes defines for the permissions (e.g. OS_MPU_READONLY), but not for the attributes since they are core specific.

The Cortex-M memory attributes include the following bits:

Bufferable Write to memory can be carried out by a write buffer while the processor continues on next instruction execution.
Cacheable Data obtained from memory read can be copied to a memory cache so that next time it is accessed the value can be obtained from the cache to speed up the program execution.
Sharable Data in this memory region could be shared by multiple bus masters. Memory system needs to ensure coherency of data between different bus masters in shareable memory region.
TEX Type Extension field

These bits are implemented in the Cortex-M MPU Region Base Attribute and Size Register (0xE000EDA0):

31:29       Reserved
28          XN            R/W         — Instruction Access Disable (1 = disable instruction fetch from this region; an attempt to do so will result in a memory management fault)
27          Reserved
26:24       AP            R/W         — Data Access Permission field
23:22       Reserved
21:19       TEX           R/W         — Type Extension field
18          S             R/W         — Shareable
17          C             R/W         — Cacheable
16          B             R/W         — Bufferable
15:8        SRD           R/W         — Subregion disable
7:6         Reserved
5:1         REGION SIZE   R/W         — MPU Protection Region size
0           ENABLE        R/W         — Region enable

Possible values are:

Settings Resulting attributes
TEX C B S Memory Type Shareability Other attributes
000 0 0 0 Strongly ordered Shareable[1] -
1
1 0 Device
1
1 0 0 Normal Not shareable Outer write through, no write allocate
Inner write through, no write allocate
1 Shareable
1 0 Not shareable Outer write back, no write allocate
Inner write back, no write allocate
1 Shareable
001 0 0 0 Not shareable Outer noncacheable
Inner noncacheable
1 Shareable
1 0 Reserved encoding
1
1 0 0 Implementation defined encoding
1
1 0 Normal Not shareable Outer write back, write and read allocate
Inner write back, write and read allocate
1 Shareable
010 0 0 0 Device Not shareable[1] -
1
1 0 Reserved encoding
1
1 0 0
1
1 0
1
100 0 0 0 Normal Not shareable Outer noncacheable
Inner noncacheable
1 Shareable
1 0 Not shareable Outer noncacheable
Inner write back, write and read allocate
1 Shareable
1 0 0 Not shareable Outer noncacheable
Inner write through, no write allocate
1 Shareable
1 0 Not shareable Outer noncacheable
Inner write back, no write allocate
1 Shareable
101 0 0 0 Not shareable Outer write back, write and read allocate
Inner noncacheable
1 Shareable
1 0 Not shareable Outer write back, write and read allocate
Inner write back, write and read allocate
1 Shareable
1 0 0 Not shareable Outer write back, write and read allocate
Inner write through, no write allocate
1 Shareable
1 0 Not shareable Outer write back, write and read allocate
Inner write back, no write allocate
1 Shareable
110 0 0 0 Not shareable Outer write through, no write allocate
Inner noncacheable
1 Shareable
1 0 Not shareable Outer write through, no write allocate
Inner write back, write and read allocate
1 Shareable
1 0 0 Not shareable Outer write through, no write allocate
Inner write through, no write allocate
1 Shareable
1 0 Not shareable Outer write through, no write allocate
Inner write back, no write allocate
1 Shareable
111 0 0 0 Not shareable Outer write back, no write allocate
Inner noncacheable
1 Shareable
1 0 Not shareable Outer write back, no write allocate
Inner write back, write and read allocate
1 Shareable
1 0 0 Not shareable Outer write back, no write allocate
Inner write through, no write allocate
1 Shareable
1 0 Not shareable Outer write back, no write allocate
Inner write back, no write allocate
1 Shareable
  1. 1.0 1.1 The value of the S-bit is ignored in this encoding.

With embOS-MPU Cortex-M the Attributes parameter is shifted by 16 bits and set in the Cortex-M Region Base Attribute and Size Register.

Example

Setting the memory attribute of a region to Write back, no write allocate:

#define TEX_100    (4u << 3)
#define CACHEABLE  (1u << 1)
#define BUFFERABLE (1u << 0)

OS_MPU_AddRegion(&HPTask, 0x00, 0x2000, OS_MPU_READONLY, TEX_100 | BUFFERABLE | CACHEABLE);