|
20 | 20 | */ |
21 | 21 |
|
22 | 22 | #pragma once |
| 23 | +#include <stdint.h> |
23 | 24 |
|
24 | 25 | // ----- Defines ----- |
25 | 26 |
|
26 | | -/* Auxiliary Control Register Definitions */ |
27 | | -#define SCnSCB_ACTLR *(volatile uint32_t *)0xE000E008 // Auxiliary control |
| 27 | +#include <core_cm4.h> |
28 | 28 |
|
| 29 | +#define PERIPH_START ((uint32_t*)0x40000000) |
| 30 | +#define PERIPH_END ((uint32_t*)0x40200000) |
29 | 31 |
|
30 | | -#define SCnSCB_ACTLR_DISOOFP_Pos 9 /*!< ACTLR: DISOOFP Position */ |
31 | | -#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ |
| 32 | +#define SYSTEM_START ((uint32_t*)0xE0000000) |
| 33 | +#define SYSTEM_END ((uint32_t*)0xE000F000) |
32 | 34 |
|
33 | | -#define SCnSCB_ACTLR_DISFPCA_Pos 8 /*!< ACTLR: DISFPCA Position */ |
34 | | -#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ |
| 35 | +/* MPU Aliases */ |
35 | 36 |
|
36 | | -#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ |
37 | | -#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ |
| 37 | +#define MPU_ATTR_XN (( 1 << MPU_RASR_XN_Pos) & MPU_RASR_XN_Msk) |
| 38 | +#define MPU_ATTR_AP(ap) ((ap << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) |
38 | 39 |
|
39 | | -#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ |
40 | | -#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ |
| 40 | +#define MPU_ACCESS_NONE ((0b000 << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) |
| 41 | +#define MPU_ACCESS_RW_PRIV ((0b001 << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) |
| 42 | +#define MPU_ACCESS_PRIV_WRITE ((0b010 << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) |
| 43 | +#define MPU_ACCESS_RW_ALL ((0b011 << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) |
| 44 | +#define MPU_ACCESS_RO_PRIV ((0b101 << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) |
| 45 | +#define MPU_ACCESS_RO_ALL ((0b110 << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) |
41 | 46 |
|
42 | | -#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ |
43 | | -#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ |
| 47 | +// Normal memory, non-shareable, write-through |
| 48 | +#define MPU_ATTR_FLASH (((0b000 << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) \ |
| 49 | + | ((1 << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) \ |
| 50 | + | ((0 << MPU_RASR_B_Pos) & MPU_RASR_B_Msk) \ |
| 51 | + | ((0 << MPU_RASR_S_Pos) & MPU_RASR_S_Msk)) |
44 | 52 |
|
| 53 | +// Normal memory, shareable, write-through |
| 54 | +#define MPU_ATTR_INTERNAL_SRAM (((0b000 << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) \ |
| 55 | + | ((1 << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) \ |
| 56 | + | ((0 << MPU_RASR_B_Pos) & MPU_RASR_B_Msk) \ |
| 57 | + | ((1 << MPU_RASR_S_Pos) & MPU_RASR_S_Msk)) |
| 58 | + |
| 59 | +// Normal memory, shareable, write-back, write-allocate |
| 60 | +#define MPU_ATTR_EXTERNAL_SRAM (((0b000 << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) \ |
| 61 | + | ((1 << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) \ |
| 62 | + | ((1 << MPU_RASR_B_Pos) & MPU_RASR_B_Msk) \ |
| 63 | + | ((1 << MPU_RASR_S_Pos) & MPU_RASR_S_Msk)) |
| 64 | + |
| 65 | +// Device memory, shareable |
| 66 | +#define MPU_ATTR_PERIPHERALS (((0b000 << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) \ |
| 67 | + | ((0 << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) \ |
| 68 | + | ((1 << MPU_RASR_B_Pos) & MPU_RASR_B_Msk) \ |
| 69 | + | ((1 << MPU_RASR_S_Pos) & MPU_RASR_S_Msk)) |
| 70 | + |
| 71 | +// Device memory, shareable |
| 72 | +#define MPU_ATTR_SYSTEM (((0b000 << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) \ |
| 73 | + | ((0 << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) \ |
| 74 | + | ((0 << MPU_RASR_B_Pos) & MPU_RASR_B_Msk) \ |
| 75 | + | ((0 << MPU_RASR_S_Pos) & MPU_RASR_S_Msk)) |
45 | 76 |
|
46 | 77 | // ----- Types ----- |
47 | 78 |
|
@@ -145,10 +176,18 @@ typedef struct __attribute__((packed)) { |
145 | 176 | } DFSR_t; |
146 | 177 |
|
147 | 178 |
|
| 179 | +// ----- Variables ----- |
| 180 | + |
| 181 | +extern uint32_t _sidata, _sdata, _edata, _sbss, _ebss, _app_rom, _app_rom_end, _bootloader; |
| 182 | + |
| 183 | + |
148 | 184 | // ----- Functions ----- |
149 | 185 |
|
150 | 186 | extern void __attribute__((naked)) debug_isr ( void ); |
151 | 187 |
|
152 | 188 | Cortex_IRQ get_current_isr(); |
153 | 189 | void read_stacked_fault_frame( uint32_t *faultStackedAddress ); |
154 | 190 | void disable_write_buffering(); |
| 191 | + |
| 192 | +void mpu_setup_region(uint8_t region, uint32_t *start, uint32_t *end, uint32_t attr); |
| 193 | +void mpu_enable(); |
0 commit comments