ICARUS OS (Intelligent Cooperative Architecture for Real-time Unified Systems) 0.1.0
Preemptive Real-Time Operating System for ARM Cortex-M7
Loading...
Searching...
No Matches
mpu.h
Go to the documentation of this file.
1
2#ifndef BSP_MPU_H
3#define BSP_MPU_H
4
5#ifdef __cplusplus
6extern "C" {
7#endif
8
9/* Include HAL only when not testing */
10#ifndef HOST_TEST
11#include "stm32h7xx_hal.h"
12#endif
13
14/* ============================================================================
15 * MEMORY MAP (STM32H750)
16 * ========================================================================= */
17
24#include "icarus/config.h"
25
27#define BSP_ITCM_BASE 0x00000000UL
28#define BSP_ITCM_SIZE (64 * 1024)
29
31#define BSP_DTCM_BASE 0x20000000UL
32#define BSP_DTCM_SIZE (128 * 1024)
33
35#define BSP_DTCM_OBC_BASE 0x20010000UL
36#define BSP_DTCM_OBC_SIZE (64 * 1024)
38#define BSP_RAM_D1_BASE 0x24000000UL
39#define BSP_RAM_D1_SIZE (512 * 1024)
40
42#define BSP_RAM_D2_BASE 0x30000000UL
43#define BSP_RAM_D2_SIZE (288 * 1024)
44
46#define BSP_RAM_D3_BASE 0x38000000UL
47#define BSP_RAM_D3_SIZE (64 * 1024)
48
50#define BSP_FLASH_BASE 0x08000000UL
51#define BSP_FLASH_SIZE (128 * 1024)
52
54#define BSP_QSPI_BASE 0x90000000UL
55#define BSP_QSPI_SIZE (8 * 1024 * 1024)
56
58#define BSP_PERIPH_BASE 0x40000000
59#define BSP_PERIPH_SIZE (512 * 1024 * 1024)
60
61
64#define MPU_REGION_ITCM_BASE MPU_REGION_NUMBER0
65#define MPU_REGION_QSPI_FLASH MPU_REGION_NUMBER1
66#define MPU_REGION_FLASH MPU_REGION_NUMBER2
67#define MPU_REGION_DTCM_OBC MPU_REGION_NUMBER3
68#define MPU_REGION_TASK_DATA MPU_REGION_NUMBER4
69#define MPU_REGION_DTCM MPU_REGION_NUMBER5
70#define MPU_REGION_RAM_D1 MPU_REGION_NUMBER6
71#define MPU_REGION_PERIPH MPU_REGION_NUMBER7
72
73
78#define BYTES_TO_MPU_SIZE(bytes) ( \
79 (bytes) == 32 ? MPU_REGION_SIZE_32B : \
80 (bytes) == 64 ? MPU_REGION_SIZE_64B : \
81 (bytes) == 128 ? MPU_REGION_SIZE_128B : \
82 (bytes) == 256 ? MPU_REGION_SIZE_256B : \
83 (bytes) == 512 ? MPU_REGION_SIZE_512B : \
84 (bytes) == 1024 ? MPU_REGION_SIZE_1KB : \
85 (bytes) == 2048 ? MPU_REGION_SIZE_2KB : \
86 (bytes) == 4096 ? MPU_REGION_SIZE_4KB : \
87 (bytes) == 8192 ? MPU_REGION_SIZE_8KB : \
88 (bytes) == 16384 ? MPU_REGION_SIZE_16KB : \
89 (bytes) == 32768 ? MPU_REGION_SIZE_32KB : \
90 (bytes) == 65536 ? MPU_REGION_SIZE_64KB : \
91 (bytes) == 131072 ? MPU_REGION_SIZE_128KB : \
92 (bytes) == 262144 ? MPU_REGION_SIZE_256KB : \
93 (bytes) == 524288 ? MPU_REGION_SIZE_512KB : \
94 MPU_REGION_SIZE_1MB)
95
100#define TASK_DATA_SIZE_BYTES ((ICARUS_DATA_WORDS) * 4u)
101#define TASK_DATA_SIZE_MPU MPU_REGION_SIZE_2KB
102
103#ifndef SKIP_STATIC_ASSERTS
104_Static_assert(TASK_DATA_SIZE_BYTES == 2048u,
105 "TASK_DATA_SIZE_BYTES changed — update TASK_DATA_SIZE_MPU");
106#endif
107
140void MPU_Config(void);
141
157void MPU_ConfigureTaskData(uint32_t task_data_base);
158
159#ifdef __cplusplus
160}
161#endif
162
163#endif
ICARUS OS Configuration Header.
void MPU_ConfigureTaskData(uint32_t task_data_base)
Configure MPU Region 4 for current task's data region.
Definition mpu.c:204
void MPU_Config(void)
Configure Memory Protection Unit regions.
Definition mpu.c:64
#define TASK_DATA_SIZE_BYTES
Task data region size for MPU configuration.
Definition mpu.h:100