]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_IAR_Keil/libchip_samv7/include/mpu.h
Final V8.2.1 release ready for tagging:
[freertos] / FreeRTOS / Demo / CORTEX_M7_SAMV71_Xplained_IAR_Keil / libchip_samv7 / include / mpu.h
1 /* ----------------------------------------------------------------------------\r
2  *         SAM Software Package License \r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2012, Atmel Corporation\r
5  *\r
6  * All rights reserved.\r
7  *\r
8  * Redistribution and use in source and binary forms, with or without\r
9  * modification, are permitted provided that the following conditions are met:\r
10  *\r
11  * - Redistributions of source code must retain the above copyright notice,\r
12  * this list of conditions and the disclaimer below.\r
13  *\r
14  * Atmel's name may not be used to endorse or promote products derived from\r
15  * this software without specific prior written permission.\r
16  *\r
17  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
20  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
23  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
24  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
25  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
26  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
27  * ----------------------------------------------------------------------------\r
28  */\r
29 \r
30 #ifndef _MPU_H_\r
31 #define _MPU_H_\r
32 \r
33 /*----------------------------------------------------------------------------\r
34  *        Definitions\r
35  *----------------------------------------------------------------------------*/\r
36 #define ARM_MODE_USR            0x10\r
37 \r
38 #define PRIVILEGE_MODE 0\r
39 #define USER_MODE      1\r
40 \r
41 //#define ITCM_SIZE\r
42 //#define DTCM_SIZE\r
43 //#define FLASH_SIZE\r
44 //#define ISRAM_SIZE\r
45 \r
46 #define MPU_UNPRIVILEGED_RAM_REGION       ( 0 )\r
47 #define MPU_PRIVILEGE_RAM_REGION          ( 1 )\r
48 #define MPU_UNPRIVILEGED_FLASH_REGION     ( 2 )\r
49 #define MPU_PRIVILEGED_FLASH_REGION       ( 3 )\r
50 #define MPU_PRIVILEGED_PERIPHERALS_REGION ( 4 )\r
51 #define MPU_UART_REGION_REGION            ( 5 )\r
52 #define MPU_SDRAM_REGION                  ( 6 )\r
53 \r
54 #if 1\r
55 #define MPU_DEFAULT_ITCM_REGION           ( 1 )\r
56 #define MPU_DEFAULT_IFLASH_REGION         ( 2 )\r
57 #define MPU_DEFAULT_DTCM_REGION           ( 3 )\r
58 #define MPU_DEFAULT_PRAM_REGION           ( 4 )\r
59 #define MPU_DEFAULT_UPRAM_REGION          ( 5 )\r
60 #define MPU_PERIPHERALS_REGION            ( 6 )\r
61 #define MPU_USBHSRAM_REGION               ( 7 )\r
62 #define MPU_QSPIMEM_REGION                ( 8 )\r
63 #endif\r
64 \r
65 #if 0\r
66 #define MPU_QSPIMEM_REGION                ( 0 )\r
67 #define MPU_USBHSRAM_REGION               ( 1 )\r
68 #define MPU_PERIPHERALS_REGION            ( 2 )\r
69 #define MPU_DEFAULT_DTCM_REGION           ( 3 )\r
70 #define MPU_DEFAULT_ITCM_REGION           ( 4 )\r
71 #define MPU_DEFAULT_UPRAM_REGION          ( 5 )\r
72 #define MPU_DEFAULT_IFLASH_REGION         ( 6 )\r
73 #define MPU_DEFAULT_PRAM_REGION           ( 7 )\r
74 #endif\r
75 \r
76 \r
77 \r
78 \r
79 \r
80 \r
81 #define MPU_REGION_VALID                    ( 0x10 )\r
82 #define MPU_REGION_ENABLE                   ( 0x01 )\r
83 #define MPU_REGION_DISABLE                  ( 0x0 )\r
84 \r
85 #define MPU_ENABLE                      ( 0x1 )\r
86 #define MPU_BGENABLE                    ( 0x1 << 2 )\r
87 \r
88 #define PROTECT_PIO_SUBREGION           ( 0x1 << 4 ) \r
89 \r
90 #define MPU_REGION_BUFFERABLE               ( 0x01 << MPU_RASR_B_Pos )\r
91 #define MPU_REGION_CACHEABLE                ( 0x01 << MPU_RASR_C_Pos )\r
92 #define MPU_REGION_SHAREABLE                ( 0x01 << MPU_RASR_S_Pos )\r
93 \r
94 #define MPU_REGION_EXECUTE_NEVER            ( 0x01 << MPU_RASR_XN_Pos )\r
95 \r
96 #define MPU_AP_NO_ACCESS                    ( 0x00 << MPU_RASR_AP_Pos )\r
97 #define MPU_AP_PRIVILEGED_READ_WRITE        ( 0x01 << MPU_RASR_AP_Pos )\r
98 #define MPU_AP_UNPRIVILEGED_READONLY        ( 0x02 << MPU_RASR_AP_Pos )\r
99 #define MPU_AP_FULL_ACCESS                  ( 0x03 << MPU_RASR_AP_Pos )\r
100 #define MPU_AP_RES                          ( 0x04 << MPU_RASR_AP_Pos )\r
101 #define MPU_AP_PRIVILEGED_READONLY          ( 0x05 << MPU_RASR_AP_Pos )\r
102 #define MPU_AP_READONLY                     ( 0x06 << MPU_RASR_AP_Pos )\r
103 #define MPU_AP_READONLY2                    ( 0x07 << MPU_RASR_AP_Pos )\r
104 \r
105 #define MPU_TEX_NON_CACHE                   ( 0x04 << MPU_RASR_TEX_Pos )\r
106 #define MPU_TEX_WRITE_BACK_ALLOCATE         ( 0x05 << MPU_RASR_TEX_Pos )\r
107 #define MPU_TEX_WRITE_THROUGH               ( 0x06 << MPU_RASR_TEX_Pos )\r
108 #define MPU_TEX_WRITE_BACK_NOALLOCATE       ( 0x07 << MPU_RASR_TEX_Pos )\r
109 \r
110 /* Default memory map \r
111 Address range          Memory region          Memory type      Shareability   Cache policy\r
112 0x00000000- 0x1FFFFFFF Code                   Normal           Non-shareablea WTb\r
113 0x20000000- 0x3FFFFFFF SRAM                   Normal           Non-shareablea WBWAb\r
114 0x40000000- 0x5FFFFFFF Peripheral             Device           Non-shareablea -\r
115 0x60000000- 0x7FFFFFFF External RAM           Normal           Non-shareablea WBWAb\r
116 0x80000000- 0x9FFFFFFF WTb\r
117 0xA0000000- 0xBFFFFFFF External device Devicea Shareable\r
118 0xC0000000- 0xDFFFFFFF Non-shareablea\r
119 0xE0000000- 0xE00FFFFF Private Peripheral Bus Strongly ordered Shareablea -\r
120 0xE0100000- 0xFFFFFFFF Vendor-specific device Device           Non-shareablea -\r
121 */\r
122 \r
123 /********* IFLASH memory macros *********************/\r
124 #define ITCM_START_ADDRESS                  0x00000000UL\r
125 #define ITCM_END_ADDRESS                    0x00400000UL\r
126 #define IFLASH_START_ADDRESS                0x00400000UL\r
127 #define IFLASH_END_ADDRESS                  0x00600000UL\r
128 #define IFLASH_HALF                         ((IFLASH_END_ADDRESS - IFLASH_START_ADDRESS) >> 1)\r
129 \r
130 #define IFLASH_PRIVILEGE_START_ADDRESS      (IFLASH_START_ADDRESS)\r
131 #define IFLASH_PRIVILEGE_END_ADDRESS        (IFLASH_START_ADDRESS + IFLASH_HALF)\r
132 \r
133 #define IFLASH_UNPRIVILEGE_START_ADDRESS    (IFLASH_START_ADDRESS + IFLASH_HALF + 1)\r
134 #define IFLASH_UNPRIVILEGE_END_ADDRESS      (IFLASH_END_ADDRESS)\r
135 \r
136 /**************** DTCM  *******************************/\r
137 #define DTCM_START_ADDRESS                  0x20000000UL\r
138 #define DTCM_END_ADDRESS                    0x20400000UL\r
139 \r
140 \r
141 /******* SRAM memory macros ***************************/\r
142 \r
143 #define SRAM_START_ADDRESS                  0x20400000UL\r
144 #define SRAM_END_ADDRESS                    0x2045FFFFUL\r
145 #define SRAM_HALF                           ((SRAM_END_ADDRESS - SRAM_START_ADDRESS) >>1)\r
146 \r
147 \r
148 #define SRAM_PRIVILEGE_START_ADDRESS        (SRAM_START_ADDRESS)\r
149 #define SRAM_PRIVILEGE_END_ADDRESS          (SRAM_START_ADDRESS + 0x3FFFF)\r
150 \r
151 #define SRAM_UNPRIVILEGE_START_ADDRESS      (SRAM_PRIVILEGE_END_ADDRESS + 1)\r
152 #define SRAM_UNPRIVILEGE_END_ADDRESS        (SRAM_END_ADDRESS)\r
153 \r
154 /************** Peripherials memory region macros ********/\r
155 \r
156 #define PERIPHERALS_START_ADDRESS               0x40000000UL\r
157 #define PERIPHERALS_END_ADDRESS                 0x400E2000UL\r
158 \r
159 #define UART_REGION_START_ADDRESS               0x400E1C00UL\r
160 #define UART_REGION_END_ADDRESS                 0x400E2000UL\r
161 \r
162 /************** Peripherials memory region macros ********/\r
163 \r
164 #define PERIPHERALS_START_ADDRESS               0x40000000UL\r
165 #define PERIPHERALS_END_ADDRESS                 0x400E2000UL\r
166 \r
167 /************** QSPI region macros ******************/\r
168 \r
169 #define QSPI_START_ADDRESS                      0x80000000UL\r
170 #define QSPI_END_ADDRESS                        0x9FFFFFFFUL\r
171 \r
172 /************** USBHS_RAM region macros ******************/\r
173 \r
174 #define USBHSRAM_START_ADDRESS                  0xA0100000UL\r
175 #define USBHSRAM_END_ADDRESS                    0xA0200000UL\r
176 \r
177 /******* Ext-SRAM memory macros ***************************/\r
178 \r
179 #define SDRAM_START_ADDRESS                     0x70000000UL\r
180 #define SDRAM_END_ADDRESS                       0x7FFFFFFFUL\r
181 \r
182    /** Flag to indicate whether the svc is done */\r
183 extern volatile uint32_t dwRaisePriDone;\r
184 /*----------------------------------------------------------------------------\r
185  *        Export functions\r
186  *----------------------------------------------------------------------------*/\r
187 void MPU_Enable( uint32_t dwMPUEnable );\r
188 void MPU_SetRegion( uint32_t dwRegionBaseAddr, uint32_t dwRegionAttr );\r
189 void MPU_SetRegionNum( uint32_t dwRegionNum );\r
190 void MPU_DisableRegion( void );\r
191 uint32_t MPU_CalMPURegionSize( uint32_t dwActualSizeInBytes );\r
192 void MPU_UpdateRegions( uint32_t dwRegionNum, uint32_t dwRegionBaseAddr,\r
193                                 uint32_t dwRegionAttr);\r
194 \r
195 #endif /* #ifndef _MMU_ */\r
196 \r