]> git.gir.st - tmk_keyboard.git/blob - tool/mbed/mbed-sdk/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_KPSDK_CODE/hal/mpu/fsl_mpu_hal.h
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[tmk_keyboard.git] / tool / mbed / mbed-sdk / libraries / mbed / targets / hal / TARGET_Freescale / TARGET_KPSDK_MCUS / TARGET_KPSDK_CODE / hal / mpu / fsl_mpu_hal.h
1 /*
2 * Copyright (c) 2013 - 2014, Freescale Semiconductor, Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
7 *
8 * o Redistributions of source code must retain the above copyright notice, this list
9 * of conditions and the following disclaimer.
10 *
11 * o Redistributions in binary form must reproduce the above copyright notice, this
12 * list of conditions and the following disclaimer in the documentation and/or
13 * other materials provided with the distribution.
14 *
15 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
16 * contributors may be used to endorse or promote products derived from this
17 * software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30 #ifndef __FSL_MPU_HAL_H__
31 #define __FSL_MPU_HAL_H__
32
33 #include <assert.h>
34 #include <stdint.h>
35 #include <stdbool.h>
36 #include "fsl_mpu_features.h"
37 #include "fsl_device_registers.h"
38
39 #ifndef MBED_NO_MPU
40
41 #define MPU_REGION_NUMBER 12
42
43 /*!
44 * @addtogroup mpu_hal
45 * @{
46 */
47
48 /*******************************************************************************
49 * Definitions
50 *******************************************************************************/
51
52 /*! @brief MPU region number region0~region11. */
53 typedef enum _mpu_region_num{
54 kMPURegionNum00 = 0U, /*!< MPU region number 0*/
55 kMPURegionNum01 = 1U, /*!< MPU region number 1*/
56 kMPURegionNum02 = 2U, /*!< MPU region number 2*/
57 kMPURegionNum03 = 3U, /*!< MPU region number 3*/
58 kMPURegionNum04 = 4U, /*!< MPU region number 4*/
59 kMPURegionNum05 = 5U, /*!< MPU region number 5*/
60 kMPURegionNum06 = 6U, /*!< MPU region number 6*/
61 kMPURegionNum07 = 7U, /*!< MPU region number 7*/
62 kMPURegionNum08 = 8U, /*!< MPU region number 8*/
63 kMPURegionNum09 = 9U, /*!< MPU region number 9*/
64 kMPURegionNum10 = 10U, /*!< MPU region number 10*/
65 kMPURegionNum11 = 11U, /*!< MPU region number 11*/
66 #if defined(CPU_MK70FN1M0VMF12) || defined(CPU_MK70FX512VMF12) || defined(CPU_MK70FN1M0VMF15) || defined(CPU_MK70FX512VMF15) || \
67 defined(CPU_MK70FN1M0VMJ12) || defined(CPU_MK70FX512VMJ12) || defined(CPU_MK70FN1M0VMJ15) || defined(CPU_MK70FX512VMJ15)
68 kMPURegionNum11 = 12U, /*!< MPU region number 12*/
69 kMPURegionNum11 = 13U, /*!< MPU region number 13*/
70 kMPURegionNum11 = 14U, /*!< MPU region number 14*/
71 kMPURegionNum11 = 15U, /*!< MPU region number 15*/
72 #endif
73 }mpu_region_num;
74
75 /*! @brief MPU error address register0~4. */
76 typedef enum _mpu_error_addr_reg{
77 kMPUErrorAddrReg00 = 0U, /*!< MPU error address register 0*/
78 kMPUErrorAddrReg01 = 1U, /*!< MPU error address register 1*/
79 kMPUErrorAddrReg02 = 2U, /*!< MPU error address register 2*/
80 kMPUErrorAddrReg03 = 3U, /*!< MPU error address register 3*/
81 kMPUErrorAddrReg04 = 4U /*!< MPU error address register 4*/
82 }mpu_error_addr_reg;
83
84 /*! @brief MPU error detail register0~4. */
85 typedef enum _mpu_error_detail_reg{
86 kMPUErrorDetailReg00 = 0U, /*!< MPU error detail register 0*/
87 kMPUErrorDetailReg01 = 1U, /*!< MPU error detail register 1*/
88 kMPUErrorDetailReg02 = 2U, /*!< MPU error detail register 2*/
89 kMPUErrorDetailReg03 = 3U, /*!< MPU error detail register 3*/
90 kMPUErrorDetailReg04 = 4U /*!< MPU error detail register 4*/
91 }mpu_error_detail_reg;
92
93 /*! @brief MPU access error. */
94 typedef enum _mpu_error_access_type{
95 kMPUReadErrorType = 0U, /*!< MPU error type---read*/
96 kMPUWriteErrorType = 1U /*!< MPU error type---write*/
97 }mpu_error_access_type;
98
99 /*! @brief MPU access error attributes.*/
100 typedef enum _mpu_error_attributes{
101 kMPUUserModeInstructionAccess = 0U, /*!< access instruction error in user mode*/
102 kMPUUserModeDataAccess = 1U, /*!< access data error in user mode*/
103 kMPUSupervisorModeInstructionAccess = 2U, /*!< access instruction error in supervisor mode*/
104 kMPUSupervisorModeDataAccess = 3U /*!< access data error in supervisor mode*/
105 }mpu_error_attributes;
106
107 /*! @brief access MPU in which mode. */
108 typedef enum _mpu_access_mode{
109 kMPUAccessInUserMode = 0U, /*!< access data or instruction in user mode*/
110 kMPUAccessInSupervisorMode = 1U /*!< access data or instruction in supervisor mode*/
111 }mpu_access_mode;
112
113 /*! @brief MPU master number. */
114 typedef enum _mpu_master_num{
115 kMPUMaster00 = 0U, /*!< Core.*/
116 kMPUMaster01 = 1U, /*!< Debugger.*/
117 kMPUMaster02 = 2U, /*!< DMA.*/
118 kMPUMaster03 = 3U, /*!< ENET.*/
119 kMPUMaster04 = 4U, /*!< USB.*/
120 kMPUMaster05 = 5U, /*!< SDHC.*/
121 kMPUMaster06 = 6U, /*!< undefined.*/
122 kMPUMaster07 = 7U /*!< undefined.*/
123 }mpu_master_num;
124
125 /*! @brief MPU error access control detail. */
126 typedef enum _mpu_error_access_control{
127 kMPUNoRegionHitError = 0U, /*!< no region hit error*/
128 kMPUNoneOverlappRegionError = 1U, /*!< access single region error*/
129 kMPUOverlappRegionError = 2U /*!< access overlapping region error*/
130 }mpu_error_access_control;
131
132 /*! @brief MPU access rights in supervisor mode for master0~master3. */
133 typedef enum _mpu_supervisor_access_rights{
134 kMPUSupervisorReadWriteExecute = 0U, /*!< R W E allowed in supervisor mode*/
135 kMPUSupervisorReadExecute = 1U, /*!< R E allowed in supervisor mode*/
136 kMPUSupervisorReadWrite = 2U, /*!< R W allowed in supervisor mode*/
137 kMPUSupervisorEqualToUsermode = 3U /*!< access permission equal to user mode*/
138 }mpu_supervisor_access_rights;
139
140 /*! @brief MPU access rights in user mode for master0~master3. */
141 typedef enum _mpu_user_access_rights{
142 kMPUUserNoAccessRights = 0U, /*!< no access allowed in user mode*/
143 kMPUUserExecute = 1U, /*!< E allowed in user mode*/
144 kMPUUserWrite = 2U, /*!< W allowed in user mode*/
145 kMPUUserWriteExecute = 3U, /*!< W E allowed in user mode*/
146 kMPUUserRead = 4U, /*!< R allowed in user mode*/
147 kMPUUserReadExecute = 5U, /*!< R E allowed in user mode*/
148 kMPUUserReadWrite = 6U, /*!< R W allowed in user mode*/
149 kMPUUserReadWriteExecute = 7U /*!< R W E allowed in user mode*/
150 }mpu_user_access_rights;
151
152 /*! @brief MPU process identifier. */
153 typedef enum _mpu_process_identifier_value{
154 kMPUIdentifierDisable = 0U, /*!< processor identifier disable*/
155 kMPUIdentifierEnable = 1U /*!< processor identifier enable*/
156 }mpu_process_identifier_value;
157
158 /*! @brief MPU access control for master4~master7. */
159 typedef enum _mpu_access_control{
160 kMPUAccessDisable = 0U, /*!< Read or Write not allowed*/
161 kMPUAccessEnable = 1U /*!< Read or Write allowed*/
162 }mpu_access_control;
163
164 /*! @brief MPU access type for master4~master7. */
165 typedef enum _mpu_access_type{
166 kMPUAccessRead = 0U, /*!< Access type is read*/
167 kMPUAccessWrite = 1U /*!< Access type is write*/
168 }mpu_access_type;
169
170 /*! @brief MPU access region valid. */
171 typedef enum _mpu_region_valid{
172 kMPURegionInvalid = 0U, /*!< region invalid*/
173 kMPURegionValid = 1U /*!< region valid*/
174 }mpu_region_valid;
175
176 /*! @brief MPU status return codes.*/
177 typedef enum _MPU_status {
178 kStatus_MPU_Success = 0x0U, /*!< Succeed. */
179 kStatus_MPU_NotInitlialized = 0x1U, /*!< MPU is not initialized yet. */
180 kStatus_MPU_NullArgument = 0x2U, /*!< Argument is NULL.*/
181 } mpu_status_t;
182
183 /*******************************************************************************
184 ** Variables
185 *******************************************************************************/
186
187 /*******************************************************************************
188 * API
189 *******************************************************************************/
190
191 #if defined(__cplusplus)
192 extern "C" {
193 #endif
194
195 /*!
196 * @name MPU HAL.
197 * @{
198 */
199
200 /*!
201 * @brief Enables the MPU module operation
202 *
203 * @param baseAddr The MPU peripheral base address
204 */
205 static inline void MPU_HAL_Enable(uint32_t baseAddr)
206 {
207 BW_MPU_CESR_VLD(baseAddr, (uint8_t)true);
208 }
209
210 /*!
211 * @brief Disables the MPU module operation
212 *
213 * @param baseAddr The MPU peripheral base address
214 */
215 static inline void MPU_HAL_Disable(uint32_t baseAddr)
216 {
217 BW_MPU_CESR_VLD(baseAddr, (uint8_t)false);
218 }
219
220 /*!
221 * @brief Checks whether the MPU module is enabled
222 *
223 * @param baseAddr The MPU peripheral base address
224 * @retval true MPU module is enabled
225 * @retval false MPU module is disabled
226 */
227 static inline bool MPU_HAL_IsEnabled(uint32_t baseAddr)
228 {
229 return BR_MPU_CESR_VLD(baseAddr);
230 }
231
232 /*!
233 * @brief Returns the total region number
234 *
235 * @param baseAddr The MPU peripheral base address
236 * @retval the number of regions
237 */
238 static inline uint32_t MPU_HAL_GetNumberOfRegions(uint32_t baseAddr)
239 {
240 return (BR_MPU_CESR_NRGD(baseAddr));
241 }
242
243 /*!
244 * @brief Returns MPU slave sports
245 *
246 * @param baseAddr The MPU peripheral base address
247 * @retval the number of slaves
248 */
249 static inline uint32_t MPU_HAL_GetNumberOfSlaves(uint32_t baseAddr)
250 {
251 return (BR_MPU_CESR_NSP(baseAddr));
252 }
253
254 /*!
255 * @brief Returns hardware level info
256 *
257 * @param baseAddr The MPU peripheral base address
258 * @retval hardware revision level
259 */
260 static inline uint32_t MPU_HAL_GetHardwareRevisionLevel(uint32_t baseAddr)
261 {
262 return (BR_MPU_CESR_HRL(baseAddr));
263 }
264
265 /*!
266 * @brief Returns hardware level info
267 *
268 * @param baseAddr The MPU peripheral base address
269 * @param regNum Error address register number
270 * @retval error access address
271 */
272 static inline uint32_t MPU_HAL_GetErrorAccessAddr(uint32_t baseAddr, mpu_error_addr_reg regNum)
273 {
274 assert(regNum < HW_MPU_EARn_COUNT);
275 return (BR_MPU_EARn_EADDR(baseAddr, regNum));
276 }
277
278 /*!
279 * @brief Returns error access slaves sports
280 *
281 * @param baseAddr The MPU peripheral base address
282 * @retval error slave sports
283 */
284 static inline uint8_t MPU_HAL_GetErrorSlaveSports(uint32_t baseAddr)
285 {
286 return (BR_MPU_CESR_SPERR(baseAddr));
287 }
288
289 /*!
290 * @brief Returns error access address
291 *
292 * @param baseAddr The MPU peripheral base address
293 * @param errorDetailRegNum Error detail register number
294 * @retval error access type
295 */
296 static inline mpu_error_access_type MPU_HAL_GetErrorAccessType(uint32_t baseAddr, mpu_error_detail_reg errorDetailRegNum)
297 {
298 assert(errorDetailRegNum < HW_MPU_EDRn_COUNT);
299 return (mpu_error_access_type)(BR_MPU_EDRn_ERW(baseAddr, errorDetailRegNum));
300 }
301
302 /*!
303 * @brief Returns error access attributes
304 *
305 * @param baseAddr The MPU peripheral base address
306 * @param errorDetailRegNum Detail error register number
307 * @retval error access attributes
308 */
309 static inline mpu_error_attributes MPU_HAL_GetErrorAttributes(uint32_t baseAddr, mpu_error_detail_reg errorDetailRegNum)
310 {
311 assert(errorDetailRegNum < HW_MPU_EDRn_COUNT);
312 return (mpu_error_attributes)(BR_MPU_EDRn_EATTR(baseAddr, errorDetailRegNum));
313 }
314
315 /*!
316 * @brief Returns error access master number
317 *
318 * @param baseAddr The MPU peripheral base address
319 * @param errorDetailRegNum Error register number
320 * @retval error master number
321 */
322 static inline mpu_master_num MPU_HAL_GetErrorMasterNum(uint32_t baseAddr, mpu_error_detail_reg errorDetailRegNum)
323 {
324 assert(errorDetailRegNum < HW_MPU_EDRn_COUNT);
325 return (mpu_master_num)(BR_MPU_EDRn_EMN(baseAddr, errorDetailRegNum));
326 }
327
328 /*!
329 * @brief Returns error process identifier
330 *
331 * @param baseAddr The MPU peripheral base address
332 * @param errorDetailRegNum Error register number
333 * @retval error process identifier
334 */
335 static inline uint32_t MPU_HAL_GetErrorProcessIdentifier(uint32_t baseAddr, mpu_error_detail_reg errorDetailRegNum)
336 {
337 assert(errorDetailRegNum < HW_MPU_EDRn_COUNT);
338 return(BR_MPU_EDRn_EPID(baseAddr, errorDetailRegNum));
339 }
340
341 /*!
342 * @brief Returns error access control
343 *
344 * @param baseAddr The MPU peripheral base address
345 * @param errorDetailRegNum Error register number
346 * @retval error access control
347 */
348 static inline mpu_error_access_control MPU_HAL_GetErrorAccessControl(uint32_t baseAddr, mpu_error_detail_reg errorDetailRegNum)
349 {
350 assert(errorDetailRegNum < HW_MPU_EDRn_COUNT);
351
352 uint32_t i = BR_MPU_EDRn_EACD(baseAddr, errorDetailRegNum);
353
354 if(0 == i)
355 {
356 return (kMPUNoRegionHitError);
357 }
358 else if(!(i&(i-1)))
359 {
360 return (kMPUNoneOverlappRegionError);
361 }
362 else
363 {
364 return (kMPUOverlappRegionError);
365 }
366 }
367
368 /*!
369 * @brief Returns the region start address
370 *
371 * @param baseAddr The MPU peripheral base address
372 * @param regionNum MPU region number
373 * @retval region start address
374 */
375 static inline uint32_t MPU_HAL_GetRegionStartAddr(uint32_t baseAddr, mpu_region_num regionNum)
376 {
377 assert(regionNum < HW_MPU_RGDn_WORD0_COUNT);
378 return (BR_MPU_RGDn_WORD0_SRTADDR(baseAddr, regionNum)<<BP_MPU_RGDn_WORD0_SRTADDR);
379 }
380
381 /*!
382 * @brief Sets region start address
383 *
384 * @param baseAddr The MPU peripheral base address
385 * @param regionNum MPU region number
386 * @param startAddr Region start address
387 */
388 static inline void MPU_HAL_SetRegionStartAddr(uint32_t baseAddr, mpu_region_num regionNum, uint32_t startAddr)
389 {
390 assert(regionNum < HW_MPU_RGDn_WORD0_COUNT);
391 startAddr >>= BP_MPU_RGDn_WORD0_SRTADDR;
392 BW_MPU_RGDn_WORD0_SRTADDR(baseAddr, regionNum, startAddr);
393 }
394
395 /*!
396 * @brief Returns region end address
397 *
398 * @param baseAddr The MPU peripheral base address
399 * @param regionNum MPU region number
400 * @retval region end address
401 */
402 static inline uint32_t MPU_HAL_GetRegionEndAddr(uint32_t baseAddr, mpu_region_num regionNum)
403 {
404 assert(regionNum < HW_MPU_RGDn_WORD1_COUNT);
405 return (BR_MPU_RGDn_WORD1_ENDADDR(baseAddr, regionNum)<<BP_MPU_RGDn_WORD0_SRTADDR);
406 }
407
408 /*!
409 * @brief Sets region end address
410 *
411 * @param baseAddr The MPU peripheral base address
412 * @param regionNum MPU region number
413 * @param endAddr Region end address
414 */
415 static inline void MPU_HAL_SetRegionEndAddr(uint32_t baseAddr, mpu_region_num regionNum, uint32_t endAddr)
416 {
417 assert(regionNum < HW_MPU_RGDn_WORD1_COUNT);
418 endAddr >>= BP_MPU_RGDn_WORD0_SRTADDR;
419 BW_MPU_RGDn_WORD1_ENDADDR(baseAddr, regionNum, endAddr);
420 }
421
422 /*!
423 * @brief Returns all masters access permission for a specific region
424 *
425 * @param baseAddr The MPU peripheral base address
426 * @param regionNum MPU region number
427 * @retval all masters access permission
428 */
429 static inline uint32_t MPU_HAL_GetAllMastersAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
430 {
431 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
432 return (HW_MPU_RGDn_WORD2_RD(baseAddr, regionNum));
433 }
434
435 /*!
436 * @brief Sets all masters access permission for a specific region
437 *
438 * @param baseAddr The MPU peripheral base address
439 * @param regionNum MPU region number
440 * @param accessRights All masters access rights
441 */
442 static inline void MPU_HAL_SetAllMastersAccessRights(uint32_t baseAddr, mpu_region_num regionNum, uint32_t accessRights)
443 {
444 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
445 HW_MPU_RGDn_WORD2_WR(baseAddr, regionNum, accessRights);
446 }
447
448 /*!
449 * @brief Gets M0 access permission in supervisor mode
450 *
451 * @param baseAddr The MPU peripheral base address
452 * @param regionNum MPU region number
453 * @retval Master0 access permission
454 */
455 static inline mpu_supervisor_access_rights MPU_HAL_GetM0SupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
456 {
457 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
458 return (mpu_supervisor_access_rights)(BR_MPU_RGDn_WORD2_M0SM(baseAddr, regionNum));
459 }
460
461 /*!
462 * @brief Gets M0 access permission in user mode
463 *
464 * @param baseAddr The MPU peripheral base address
465 * @param regionNum MPU region number
466 * @retval Master0 access permission
467 */
468 static inline mpu_user_access_rights MPU_HAL_GetM0UserAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
469 {
470 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
471 return (mpu_user_access_rights)(BR_MPU_RGDn_WORD2_M0UM(baseAddr, regionNum));
472 }
473
474 /*!
475 * @brief Sets M0 access permission in supervisor mode
476 *
477 * @param baseAddr The MPU peripheral base address
478 * @param regionNum MPU region number
479 * @param accessRights Master0 access permission
480 */
481 static inline void MPU_HAL_SetM0SupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_supervisor_access_rights accessRights)
482 {
483 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
484 BW_MPU_RGDn_WORD2_M0SM(baseAddr, regionNum, accessRights);
485 }
486
487 /*!
488 * @brief Sets M0 access permission in user mode
489 *
490 * @param baseAddr The MPU peripheral base address
491 * @param regionNum MPU region number
492 * @param accessRights Master0 access permission
493 */
494 static inline void MPU_HAL_SetM0UserAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_user_access_rights accessRights)
495 {
496 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
497 BW_MPU_RGDn_WORD2_M0UM(baseAddr, regionNum, accessRights);
498 }
499
500 /*!
501 * @brief Checks whether the M0 process identifier is enabled in region hit evaluation
502 *
503 * @param baseAddr The MPU peripheral base address
504 * @param regionNum MPU region number
505 * @retval true m0 process identifier is enabled
506 * @retval false m0 process identifier is disabled
507 */
508
509 static inline bool MPU_HAL_IsM0ProcessIdentifierEnabled(uint32_t baseAddr, mpu_region_num regionNum)
510 {
511 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
512 return (1 == BR_MPU_RGDn_WORD2_M0PE(baseAddr, regionNum));
513 }
514
515 /*!
516 * @brief Sets the M0 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable
517 *
518 * @param baseAddr The MPU peripheral base address
519 * @param regionNum MPU region number
520 * @param identifierValue Process identifier value
521 */
522 static inline void MPU_HAL_SetM0ProcessIdentifierValue(uint32_t baseAddr, mpu_region_num regionNum, mpu_process_identifier_value identifierValue)
523 {
524 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
525 BW_MPU_RGDn_WORD2_M0PE(baseAddr, regionNum, identifierValue);
526 }
527
528 /*!
529 * @brief Gets M1 access permission in supervisor mode
530 *
531 * @param baseAddr The MPU peripheral base address
532 * @param regionNum MPU region number
533 * @retval Master1 access permission
534 */
535 static inline mpu_supervisor_access_rights MPU_HAL_GetM1SupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
536 {
537 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
538 return (mpu_supervisor_access_rights)(BR_MPU_RGDn_WORD2_M1SM(baseAddr, regionNum));
539 }
540
541 /*!
542 * @brief Gets M1 access permission in user mode
543 *
544 * @param baseAddr The MPU peripheral base address
545 * @param regionNum MPU region number
546 * @retval Master1 access permission
547 */
548 static inline mpu_user_access_rights MPU_HAL_GetM1UserAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
549 {
550 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
551 return (mpu_user_access_rights)(BR_MPU_RGDn_WORD2_M1UM(baseAddr, regionNum));
552 }
553
554 /*!
555 * @brief Sets M1 access permission in supervisor mode
556 *
557 * @param baseAddr The MPU peripheral base address
558 * @param regionNum MPU region number
559 * @param accessRights Master1 access permission
560 */
561 static inline void MPU_HAL_SetM1SupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_supervisor_access_rights accessRights)
562 {
563 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
564 BW_MPU_RGDn_WORD2_M1SM(baseAddr, regionNum, accessRights);
565 }
566
567 /*!
568 * @brief Sets M1 access permission in user mode
569 *
570 * @param baseAddr The MPU peripheral base address
571 * @param regionNum MPU region number
572 * @param accessRights Master1 access permission
573 */
574 static inline void MPU_HAL_SetM1UserAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_user_access_rights accessRights)
575 {
576 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
577 BW_MPU_RGDn_WORD2_M1UM(baseAddr, regionNum, accessRights);
578 }
579
580 /*!
581 * @brief Checks whether M1 process identifier enabled in region hit evaluation
582 *
583 * @param baseAddr The MPU peripheral base address
584 * @param regionNum MPU region number
585 * @retval true m1 process identifier is enabled
586 * @retval false m1 process identifier is disabled
587 */
588 static inline bool MPU_HAL_IsM1ProcessIdentifierEnabled(uint32_t baseAddr, mpu_region_num regionNum)
589 {
590 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
591 return (1 == BR_MPU_RGDn_WORD2_M1PE(baseAddr, regionNum));
592 }
593
594 /*!
595 * @brief Sets the M1 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable
596 *
597 * @param baseAddr The MPU peripheral base address
598 * @param regionNum MPU region number
599 * @param identifierValue Process identifier value
600 */
601 static inline void MPU_HAL_SetM1ProcessIdentifierValue(uint32_t baseAddr, mpu_region_num regionNum, mpu_process_identifier_value identifierValue)
602 {
603 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
604 BW_MPU_RGDn_WORD2_M1PE(baseAddr, regionNum, identifierValue);
605 }
606
607 /*!
608 * @brief Gets M2 access permission in supervisor mode
609 *
610 * @param baseAddr The MPU peripheral base address
611 * @param regionNum MPU region number
612 * @retval Master2 access permission
613 */
614 static inline mpu_supervisor_access_rights MPU_HAL_GetM2SupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
615 {
616 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
617 return (mpu_supervisor_access_rights)(BR_MPU_RGDn_WORD2_M2SM(baseAddr, regionNum));
618 }
619
620 /*!
621 * @brief Gets M2 access permission in user mode
622 *
623 * @param baseAddr The MPU peripheral base address
624 * @param regionNum MPU region number
625 * @retval Master2 access permission
626 */
627 static inline mpu_user_access_rights MPU_HAL_GetM2UserAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
628 {
629 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
630 return (mpu_user_access_rights)(BR_MPU_RGDn_WORD2_M2UM(baseAddr, regionNum));
631 }
632
633 /*!
634 * @brief Sets M2 access permission in supervisor mode
635 *
636 * @param baseAddr The MPU peripheral base address
637 * @param regionNum MPU region number
638 * @param accessRights Master2 access permission
639 */
640 static inline void MPU_HAL_SetM2SupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_supervisor_access_rights accessRights)
641 {
642 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
643 BW_MPU_RGDn_WORD2_M2SM(baseAddr, regionNum, accessRights);
644 }
645
646 /*!
647 * @brief Sets M2 access permission in user mode
648 *
649 * @param baseAddr The MPU peripheral base address
650 * @param regionNum MPU region number
651 * @param accessRights Master2 access permission
652 */
653 static inline void MPU_HAL_SetM2UserAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_user_access_rights accessRights)
654 {
655 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
656 BW_MPU_RGDn_WORD2_M2UM(baseAddr, regionNum, accessRights);
657 }
658
659 /*!
660 * @brief Checks whether the M2 process identifier enabled in region hit evaluation
661 *
662 * @param baseAddr The MPU peripheral base address
663 * @param regionNum MPU region number
664 * @retval true m2 process identifier is enabled
665 * @retval false m2 process identifier is disabled
666 */
667
668 static inline bool MPU_HAL_IsM2ProcessIdentifierEnabled(uint32_t baseAddr, mpu_region_num regionNum)
669 {
670 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
671 return (1 == BR_MPU_RGDn_WORD2_M2PE(baseAddr, regionNum));
672 }
673
674 /*!
675 * @brief Sets the M2 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable.
676 *
677 * @param baseAddr The MPU peripheral base address.
678 * @param regionNum MPU region number.
679 * @param identifierValue Process identifier value.
680 */
681 static inline void MPU_HAL_SetM2ProcessIdentifierValue(uint32_t baseAddr, mpu_region_num regionNum, mpu_process_identifier_value identifierValue)
682 {
683 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
684 BW_MPU_RGDn_WORD2_M2PE(baseAddr, regionNum, identifierValue);
685 }
686
687 /*!
688 * @brief Gets M3 access permission in supervisor mode
689 *
690 * @param baseAddr The MPU peripheral base address
691 * @param regionNum MPU region number
692 * @retval Master3 access permission
693 */
694 static inline mpu_supervisor_access_rights MPU_HAL_GetM3SupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
695 {
696 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
697 return (mpu_supervisor_access_rights)(BR_MPU_RGDn_WORD2_M3SM(baseAddr, regionNum));
698 }
699
700 /*!
701 * @brief Gets M3 access permission in user mode
702 *
703 * @param baseAddr The MPU peripheral base address
704 * @param regionNum MPU region number
705 * @retval Master3 access permission
706 */
707 static inline mpu_user_access_rights MPU_HAL_GetM3UserAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
708 {
709 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
710 return (mpu_user_access_rights)(BR_MPU_RGDn_WORD2_M3UM(baseAddr, regionNum));
711 }
712
713 /*!
714 * @brief Sets M3 access permission in supervisor mode.
715 *
716 * @param baseAddr The MPU peripheral base address.
717 * @param regionNum MPU region number.
718 * @param accessRights Master3 access permission.
719 */
720 static inline void MPU_HAL_SetM3SupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_supervisor_access_rights accessRights)
721 {
722 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
723 BW_MPU_RGDn_WORD2_M3SM(baseAddr, regionNum, accessRights);
724 }
725
726 /*!
727 * @brief Sets M3 access permission in user mode
728 *
729 * @param baseAddr The MPU peripheral base address
730 * @param regionNum MPU region number
731 * @param accessRights Master3 access permission
732 */
733 static inline void MPU_HAL_SetM3UserAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_user_access_rights accessRights)
734 {
735 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
736 BW_MPU_RGDn_WORD2_M3UM(baseAddr, regionNum, accessRights);
737 }
738
739 /*!
740 * @brief Checks whether the M3 process identifier enabled in region hit evaluation
741 *
742 * @param baseAddr The MPU peripheral base address
743 * @param regionNum MPU region number
744 * @retval true m3 process identifier is enabled
745 * @retval false m3 process identifier is disabled
746 */
747
748 static inline bool MPU_HAL_IsM3ProcessIdentifierEnabled(uint32_t baseAddr, mpu_region_num regionNum)
749 {
750 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
751 return (1 == BR_MPU_RGDn_WORD2_M3PE(baseAddr, regionNum));
752 }
753
754 /*!
755 * @brief Sets M3 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable
756 *
757 * @param baseAddr The MPU peripheral base address
758 * @param regionNum MPU region number
759 * @param identifierValue Process identifier value
760 */
761 static inline void MPU_HAL_SetM3ProcessIdentifierValue(uint32_t baseAddr, mpu_region_num regionNum, mpu_process_identifier_value identifierValue)
762 {
763 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
764 BW_MPU_RGDn_WORD2_M3PE(baseAddr, regionNum, identifierValue);
765 }
766
767 /*!
768 * @brief Gets the M4 access permission.
769 *
770 * @param baseAddr The MPU peripheral base address
771 * @param regionNum MPU region number
772 * @param accessType Access type Read/Write
773 * @retval read or write permission
774 */
775 static inline mpu_access_control MPU_HAL_GetM4AccessControl(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType)
776 {
777 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
778 if(kMPUAccessRead == accessType)
779 {
780 return (mpu_access_control)(BR_MPU_RGDn_WORD2_M4RE(baseAddr, regionNum));
781 }
782 else
783 {
784 return (mpu_access_control)(BR_MPU_RGDn_WORD2_M4WE(baseAddr, regionNum));
785 }
786 }
787
788 /*!
789 * @brief Sets the M4 access permission
790 *
791 * @param baseAddr The MPU peripheral base address
792 * @param regionNum MPU region number
793 * @param accessType Access type Read/Write
794 * @param accessControl Access permission
795 */
796 static inline void MPU_HAL_SetM4AccessControl(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType, mpu_access_control accessControl)
797 {
798 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
799 if(kMPUAccessRead == accessType)
800 {
801 BW_MPU_RGDn_WORD2_M4RE(baseAddr, regionNum, accessControl);
802 }
803 else
804 {
805 BW_MPU_RGDn_WORD2_M4WE(baseAddr, regionNum, accessControl);
806 }
807 }
808
809 /*!
810 * @brief Gets the M5 access permission
811 *
812 * @param baseAddr The MPU peripheral base address
813 * @param regionNum MPU region number
814 * @param accessType Access type Read/Write
815 * @retval read or write permission
816 */
817 static inline mpu_access_control MPU_HAL_GetM5AccessControl(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType)
818 {
819 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
820 if(kMPUAccessRead == accessType)
821 {
822 return (mpu_access_control)(BR_MPU_RGDn_WORD2_M5RE(baseAddr, regionNum));
823 }
824 else
825 {
826 return (mpu_access_control)(BR_MPU_RGDn_WORD2_M5WE(baseAddr, regionNum));
827 }
828 }
829
830 /*!
831 * @brief Sets the M5 access permission
832 *
833 * @param baseAddr The MPU peripheral base address
834 * @param regionNum MPU region number
835 * @param accessType Access type Read/Write
836 * @param accessControl Access permission
837 */
838 static inline void MPU_HAL_SetM5AccessControl(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType, mpu_access_control accessControl)
839 {
840 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
841 if(kMPUAccessRead == accessType)
842 {
843 BW_MPU_RGDn_WORD2_M5RE(baseAddr, regionNum, accessControl);
844 }
845 else
846 {
847 BW_MPU_RGDn_WORD2_M5WE(baseAddr, regionNum, accessControl);
848 }
849 }
850
851 /*!
852 * @brief Gets the M6 access permission
853 *
854 * @param baseAddr The MPU peripheral base address
855 * @param regionNum MPU region number
856 * @param accessType access type Read/Write
857 * @retval read or write permission
858 */
859 static inline mpu_access_control MPU_HAL_GetM6AccessControl(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType)
860 {
861 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
862 if(kMPUAccessRead == accessType)
863 {
864 return (mpu_access_control)(BR_MPU_RGDn_WORD2_M6RE(baseAddr, regionNum));
865 }
866 else
867 {
868 return (mpu_access_control)(BR_MPU_RGDn_WORD2_M6WE(baseAddr, regionNum));
869 }
870 }
871
872 /*!
873 * @brief Sets the M6 access permission
874 *
875 * @param baseAddr The MPU peripheral base address
876 * @param regionNum MPU region number
877 * @param accessType Access type Read/Write
878 * @param accessControl Access permission
879 */
880 static inline void MPU_HAL_SetM6AccessControl(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType, mpu_access_control accessControl)
881 {
882 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
883 if(kMPUAccessRead == accessType)
884 {
885 BW_MPU_RGDn_WORD2_M6RE(baseAddr, regionNum, accessControl);
886 }
887 else
888 {
889 BW_MPU_RGDn_WORD2_M6WE(baseAddr, regionNum, accessControl);
890 }
891 }
892
893 /*!
894 * @brief Gets the M7 access permission
895 *
896 * @param baseAddr The MPU peripheral base address
897 * @param regionNum MPU region number
898 * @param accessType Access type Read/Write
899 * @retval read or write permission
900 */
901 static inline mpu_access_control MPU_HAL_GetM7AccessControl(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType)
902 {
903 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
904 if(kMPUAccessRead == accessType)
905 {
906 return (mpu_access_control)(BR_MPU_RGDn_WORD2_M7RE(baseAddr, regionNum));
907 }
908 else
909 {
910 return (mpu_access_control)(BR_MPU_RGDn_WORD2_M7WE(baseAddr, regionNum));
911 }
912 }
913
914 /*!
915 * @brief Sets the M7 access permission
916 *
917 * @param baseAddr The MPU peripheral base address
918 * @param regionNum MPU region number
919 * @param accessType Access type Read/Write
920 * @param accessControl Access permission
921 */
922 static inline void MPU_HAL_SetM7AccessControl(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType, mpu_access_control accessControl)
923 {
924 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
925 if(kMPUAccessRead == accessType)
926 {
927 BW_MPU_RGDn_WORD2_M7RE(baseAddr, regionNum, accessControl);
928 }
929 else
930 {
931 BW_MPU_RGDn_WORD2_M7WE(baseAddr, regionNum, accessControl);
932 }
933 }
934
935 /*!
936 * @brief Checks whether region is valid
937 *
938 * @param baseAddr The MPU peripheral base address
939 * @param regionNum MPU region number
940 * @retval true region is valid
941 * @retval false region is invalid
942 */
943 static inline bool MPU_HAL_IsRegionValid(uint32_t baseAddr, mpu_region_num regionNum)
944 {
945 assert(regionNum < HW_MPU_RGDn_WORD3_COUNT);
946 return (1 == BR_MPU_RGDn_WORD3_VLD(baseAddr, regionNum));
947 }
948
949 /*!
950 * @brief Sets the region valid value
951 *
952 * @param baseAddr The MPU peripheral base address
953 * @param regionNum MPU region number
954 * @param validValue Region valid value
955 */
956 static inline void MPU_HAL_SetRegionValidValue(uint32_t baseAddr, mpu_region_num regionNum, mpu_region_valid validValue)
957 {
958 assert(regionNum < HW_MPU_RGDn_WORD3_COUNT);
959 BW_MPU_RGDn_WORD3_VLD(baseAddr, regionNum, validValue);
960 }
961
962 /*!
963 * @brief Gets the process identifier mask
964 *
965 * @param baseAddr The MPU peripheral base address
966 * @param regionNum MPU region number
967 * @retval region process identifier mask
968 */
969 static inline uint8_t MPU_HAL_GetProcessIdentifierMask(uint32_t baseAddr, mpu_region_num regionNum)
970 {
971 assert(regionNum < HW_MPU_RGDn_WORD3_COUNT);
972 return (BR_MPU_RGDn_WORD3_PIDMASK(baseAddr, regionNum));
973 }
974
975 /*!
976 * @brief Sets the process identifier mask
977 *
978 * @param baseAddr The MPU peripheral base address
979 * @param regionNum MPU region number
980 * @param processIdentifierMask Process identifier mask value
981 */
982 static inline void MPU_HAL_SetPIDMASK(uint32_t baseAddr, mpu_region_num regionNum, uint8_t processIdentifierMask)
983 {
984 assert(regionNum < HW_MPU_RGDn_WORD3_COUNT);
985 BW_MPU_RGDn_WORD3_PIDMASK(baseAddr, regionNum, processIdentifierMask);
986 }
987
988 /*!
989 * @brief Gets the process identifier
990 *
991 * @param baseAddr The MPU peripheral base address
992 * @param regionNum MPU region number
993 * @retval process identifier
994 */
995 static inline uint8_t MPU_HAL_GetProcessIdentifier(uint32_t baseAddr, mpu_region_num regionNum)
996 {
997 assert(regionNum < HW_MPU_RGDn_WORD3_COUNT);
998 return (BR_MPU_RGDn_WORD3_PID(baseAddr, regionNum));
999 }
1000
1001 /*!
1002 * @brief Sets the process identifier
1003 *
1004 * @param baseAddr The MPU peripheral base address
1005 * @param regionNum MPU region number
1006 * @param processIdentifier Process identifier
1007 */
1008 static inline void MPU_HAL_SetProcessIdentifier(uint32_t baseAddr, mpu_region_num regionNum, uint8_t processIdentifier)
1009 {
1010 assert(regionNum < HW_MPU_RGDn_WORD3_COUNT);
1011 BW_MPU_RGDn_WORD3_PID(baseAddr, regionNum, processIdentifier);
1012 }
1013
1014 /*!
1015 * @brief Gets all masters access permission from alternative register
1016 *
1017 * @param baseAddr The MPU peripheral base address
1018 * @param regionNum MPU region number
1019 * @retval all masters access permission
1020 */
1021 static inline uint32_t MPU_HAL_GetAllMastersAlternateAcessRights(uint32_t baseAddr, mpu_region_num regionNum)
1022 {
1023 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1024 return (HW_MPU_RGDAACn_RD(baseAddr, regionNum));
1025 }
1026
1027 /*!
1028 * @brief Sets all masters access permission through alternative register
1029 *
1030 * @param baseAddr The MPU peripheral base address
1031 * @param regionNum MPU region number
1032 * @param accessRights All masters access permission
1033 */
1034 static inline void MPU_HAL_SetAllMastersAlternateAccessRights(uint32_t baseAddr, mpu_region_num regionNum, uint32_t accessRights)
1035 {
1036 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1037 HW_MPU_RGDAACn_WR(baseAddr, regionNum, accessRights);
1038 }
1039
1040 /*!
1041 * @brief Gets the M0 access rights in supervisor mode
1042 *
1043 * @param baseAddr The MPU peripheral base address
1044 * @param regionNum MPU region number
1045 * @retval Master0 access permission
1046 */
1047 static inline mpu_supervisor_access_rights MPU_HAL_GetM0AlternateSupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
1048 {
1049 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1050 return (mpu_supervisor_access_rights)(BR_MPU_RGDAACn_M0SM(baseAddr, regionNum));
1051 }
1052
1053 /*!
1054 * @brief Gets the M0 access rights in user mode
1055 *
1056 * @param baseAddr The MPU peripheral base address
1057 * @param regionNum MPU region number
1058 * @retval Master0 access permission
1059 */
1060 static inline mpu_user_access_rights MPU_HAL_GetM0AlternateUserAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
1061 {
1062 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1063 return (mpu_user_access_rights)(BR_MPU_RGDAACn_M0UM(baseAddr, regionNum));
1064 }
1065
1066 /*!
1067 * @brief Sets the M0 access rights in supervisor mode
1068 *
1069 * @param baseAddr The MPU peripheral base address
1070 * @param regionNum MPU region number
1071 * @param accessRights Master0 access permission
1072 */
1073 static inline void MPU_HAL_SetM0AlternateSupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_supervisor_access_rights accessRights)
1074 {
1075 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1076 BW_MPU_RGDAACn_M0SM(baseAddr, regionNum, accessRights);
1077 }
1078
1079 /*!
1080 * @brief Sets the M0 access rights in user mode
1081 *
1082 * @param baseAddr The MPU peripheral base address
1083 * @param regionNum MPU region number
1084 * @param accessRights Master0 access permission
1085 */
1086 static inline void MPU_HAL_SetM0AlternateUserAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_user_access_rights accessRights)
1087 {
1088 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1089 BW_MPU_RGDAACn_M0UM(baseAddr, regionNum, accessRights);
1090 }
1091
1092 /*!
1093 * @brief Checks whether the M0 process identifier works in region hit evaluation
1094 *
1095 * @param baseAddr The MPU peripheral base address
1096 * @param regionNum MPU region number
1097 * @retval true m0 process identifier is enabled
1098 * @retval false m0 process identifier is disabled
1099 */
1100 static inline bool MPU_HAL_IsM0AlternateProcessIdentifierEnabled(uint32_t baseAddr, mpu_region_num regionNum)
1101 {
1102 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
1103 return (1 == BR_MPU_RGDAACn_M0PE(baseAddr, regionNum));
1104 }
1105
1106 /*!
1107 * @brief @brief Sets the M0 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable
1108 *
1109 * @param baseAddr The MPU peripheral base address
1110 * @param regionNum MPU region number
1111 * @param identifierValue Process identifier value
1112 */
1113 static inline void MPU_HAL_SetM0AlternateProcessIdentifierValue(uint32_t baseAddr, mpu_region_num regionNum, mpu_process_identifier_value identifierValue)
1114 {
1115 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
1116 BW_MPU_RGDAACn_M0PE(baseAddr, regionNum, identifierValue);
1117 }
1118
1119 /*!
1120 * @brief Gets M1 access rights in supervisor mode
1121 *
1122 * @param baseAddr The MPU peripheral base address
1123 * @param regionNum MPU region number
1124 * @retval Master1 access permission
1125 */
1126 static inline mpu_supervisor_access_rights MPU_HAL_GetM1AlternateSupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
1127 {
1128 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1129 return (mpu_supervisor_access_rights)(BR_MPU_RGDAACn_M1SM(baseAddr, regionNum));
1130 }
1131
1132 /*!
1133 * @brief Gets M1 access rights in user mode
1134 *
1135 * @param baseAddr The MPU peripheral base address
1136 * @param regionNum MPU region number
1137 * @retval Master1 access permission
1138 */
1139 static inline mpu_user_access_rights MPU_HAL_GetM1AlternateUserAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
1140 {
1141 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1142 return (mpu_user_access_rights)(BR_MPU_RGDAACn_M1UM(baseAddr, regionNum));
1143 }
1144
1145 /*!
1146 * @brief Sets M1 access rights in supervisor mode
1147 *
1148 * @param baseAddr The MPU peripheral base address
1149 * @param regionNum MPU region number
1150 * @param accessRights Master1 access permission
1151 */
1152 static inline void MPU_HAL_SetM1AlternateSupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_supervisor_access_rights accessRights)
1153 {
1154 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1155 BW_MPU_RGDAACn_M1SM(baseAddr, regionNum, accessRights);
1156 }
1157
1158 /*!
1159 * @brief Sets M1 access rights in user mode
1160 *
1161 * @param baseAddr The MPU peripheral base address
1162 * @param regionNum MPU region number
1163 * @param accessRights Master1 access permission
1164 */
1165 static inline void MPU_HAL_SetM1AlternateUserAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_user_access_rights accessRights)
1166 {
1167 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1168 BW_MPU_RGDAACn_M1UM(baseAddr, regionNum, accessRights);
1169 }
1170
1171 /*!
1172 * @brief Checks whether the M1 process identifier works in region hit evaluation
1173 *
1174 * @param baseAddr The MPU peripheral base address
1175 * @param regionNum MPU region number
1176 * @retval true m1 process identifier is enabled
1177 * @retval false m1 process identifier is disabled
1178 */
1179 static inline bool MPU_HAL_IsM1AlternateProcessIdentifierEnabled(uint32_t baseAddr, mpu_region_num regionNum)
1180 {
1181 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
1182 return (1 == BR_MPU_RGDAACn_M1PE(baseAddr, regionNum));
1183 }
1184
1185 /*!
1186 * @brief @brief Sets M1 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable
1187 *
1188 * @param baseAddr The MPU peripheral base address
1189 * @param regionNum MPU region number
1190 * @param identifierValue process identifier value
1191 */
1192 static inline void MPU_HAL_SetM1AlternateProcessIdentifierValue(uint32_t baseAddr, mpu_region_num regionNum, mpu_process_identifier_value identifierValue)
1193 {
1194 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
1195 BW_MPU_RGDAACn_M1PE(baseAddr, regionNum, identifierValue);
1196 }
1197
1198 /*!
1199 * @brief Gets M2 access rights in supervisor mode
1200 *
1201 * @param baseAddr The MPU peripheral base address
1202 * @param regionNum MPU region number
1203 * @retval M2 access permission
1204 */
1205 static inline mpu_supervisor_access_rights MPU_HAL_GetM2AlternateSupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
1206 {
1207 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1208 return (mpu_supervisor_access_rights)(BR_MPU_RGDAACn_M2SM(baseAddr, regionNum));
1209 }
1210
1211 /*!
1212 * @brief Gets the M2 access rights in user mode
1213 *
1214 * @param baseAddr The MPU peripheral base address
1215 * @param regionNum MPU region number
1216 * @retval M2 access permission
1217 */
1218 static inline mpu_user_access_rights MPU_HAL_GetM2AlternateUserAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
1219 {
1220 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1221 return (mpu_user_access_rights)(BR_MPU_RGDAACn_M2UM(baseAddr, regionNum));
1222 }
1223
1224 /*!
1225 * @brief Sets M2 access rights in supervisor mode
1226 *
1227 * @param baseAddr The MPU peripheral base address
1228 * @param regionNum MPU region number
1229 * @param accessRights M2 access permission
1230 */
1231 static inline void MPU_HAL_SetM2AlternateSupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_supervisor_access_rights accessRights)
1232 {
1233 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1234 BW_MPU_RGDAACn_M2SM(baseAddr, regionNum, accessRights);
1235 }
1236
1237 /*!
1238 * @brief Sets M2 access rights in user mode
1239 *
1240 * @param baseAddr The MPU peripheral base address
1241 * @param regionNum MPU region number
1242 * @param accessRights M2 access permission
1243 */
1244 static inline void MPU_HAL_SetM2AlternateUserAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_user_access_rights accessRights)
1245 {
1246 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1247 BW_MPU_RGDAACn_M2UM(baseAddr, regionNum, accessRights);
1248 }
1249
1250 /*!
1251 * @brief Checks whether the M2 process identifier works in region hit evaluation
1252 *
1253 * @param baseAddr The MPU peripheral base address
1254 * @param regionNum MPU region number
1255 * @retval true m2 process identifier is enabled
1256 * @retval false m2 process identifier is disabled
1257 */
1258 static inline bool MPU_HAL_IsM2AlternateProcessIdentifierEnabled(uint32_t baseAddr, mpu_region_num regionNum)
1259 {
1260 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
1261 return (1 == BR_MPU_RGDAACn_M2PE(baseAddr, regionNum));
1262 }
1263
1264 /*!
1265 * @brief Sets M2 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable
1266 *
1267 * @param baseAddr The MPU peripheral base address
1268 * @param regionNum MPU region number
1269 * @param identifierValue process identifier value
1270 */
1271 static inline void MPU_HAL_SetM2AlternateProcessIdentifierValue(uint32_t baseAddr, mpu_region_num regionNum, mpu_process_identifier_value identifierValue)
1272 {
1273 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
1274 BW_MPU_RGDAACn_M2PE(baseAddr, regionNum, identifierValue);
1275 }
1276
1277 /*!
1278 * @brief Gets M3 access rights in supervisor mode
1279 *
1280 * @param baseAddr The MPU peripheral base address
1281 * @param regionNum MPU region number
1282 * @retval M3 access permission
1283 */
1284 static inline mpu_supervisor_access_rights MPU_HAL_GetM3AlternateSupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
1285 {
1286 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1287 return (mpu_supervisor_access_rights)(BR_MPU_RGDAACn_M3SM(baseAddr, regionNum));
1288 }
1289
1290 /*!
1291 * @brief Gets M3 access rights in user mode
1292 *
1293 * @param baseAddr The MPU peripheral base address
1294 * @param regionNum MPU region number
1295 * @retval M3 access permission
1296 */
1297 static inline mpu_user_access_rights MPU_HAL_GetM3AlternateUserAccessRights(uint32_t baseAddr, mpu_region_num regionNum)
1298 {
1299 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1300 return (mpu_user_access_rights)(BR_MPU_RGDAACn_M3UM(baseAddr, regionNum));
1301 }
1302
1303 /*!
1304 * @brief Sets M3 access rights in supervisor mode
1305 *
1306 * @param baseAddr The MPU peripheral base address
1307 * @param regionNum MPU region number
1308 * @param accessRights Master3 access permission
1309 */
1310 static inline void MPU_HAL_SetM3AlternateSupervisorAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_supervisor_access_rights accessRights)
1311 {
1312 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1313 BW_MPU_RGDAACn_M3SM(baseAddr, regionNum, accessRights);
1314 }
1315
1316 /*!
1317 * @brief Sets M3 access rights in user mode
1318 *
1319 * @param baseAddr The MPU peripheral base address
1320 * @param regionNum MPU region number
1321 * @param accessRights Master3 access permission
1322 */
1323 static inline void MPU_HAL_SetM3AlternateUserAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_user_access_rights accessRights)
1324 {
1325 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1326 BW_MPU_RGDAACn_M3UM(baseAddr, regionNum, accessRights);
1327 }
1328
1329 /*!
1330 * @brief Checks whether the M3 process identifier works in region hit evaluation.
1331 *
1332 * @param baseAddr The MPU peripheral base address.
1333 * @param regionNum MPU region number.
1334 * @retval true m3 process identifier is enabled.
1335 * @retval false m3 process identifier is disabled.
1336 */
1337 static inline bool MPU_HAL_IsM3AlternateProcessIdentifierEnabled(uint32_t baseAddr, mpu_region_num regionNum)
1338 {
1339 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
1340 return (1 == BR_MPU_RGDAACn_M3PE(baseAddr, regionNum));
1341 }
1342
1343 /*!
1344 * @brief Sets M3 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable.
1345 *
1346 * @param baseAddr The MPU peripheral base address.
1347 * @param regionNum MPU region number.
1348 * @param identifierValue process identifier value.
1349 */
1350 static inline void MPU_HAL_SetM3AlternateProcessIdentifierValue(uint32_t baseAddr, mpu_region_num regionNum, mpu_process_identifier_value identifierValue)
1351 {
1352 assert(regionNum < HW_MPU_RGDn_WORD2_COUNT);
1353 BW_MPU_RGDAACn_M3PE(baseAddr, regionNum, identifierValue);
1354 }
1355
1356 /*!
1357 * @brief Gets M4 access permission from alternate register.
1358 *
1359 * @param baseAddr The MPU peripheral base address.
1360 * @param regionNum MPU region number.
1361 * @param accessType Access type Read/Write.
1362 * @retval read or write permission.
1363 */
1364 static inline mpu_access_control MPU_HAL_GetM4AlternateAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType)
1365 {
1366 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1367 if(kMPUAccessRead == accessType)
1368 {
1369 return (mpu_access_control)(BR_MPU_RGDAACn_M4RE(baseAddr, regionNum));
1370 }
1371 else
1372 {
1373 return (mpu_access_control)(BR_MPU_RGDAACn_M4WE(baseAddr, regionNum));
1374 }
1375 }
1376
1377 /*!
1378 * @brief Sets M4 access permission through alternate register.
1379 *
1380 * @param baseAddr The MPU peripheral base address.
1381 * @param regionNum MPU region number.
1382 * @param accessType Access type Read/Write.
1383 * @param accessControl Access permission.
1384 */
1385 static inline void MPU_HAL_SetM4AlternateAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType, mpu_access_control accessControl)
1386 {
1387 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1388 if(kMPUAccessRead == accessType)
1389 {
1390 BW_MPU_RGDAACn_M4RE(baseAddr, regionNum, accessControl);
1391 }
1392 else
1393 {
1394 BW_MPU_RGDAACn_M4WE(baseAddr, regionNum, accessControl);
1395 }
1396 }
1397
1398 /*!
1399 * @brief Gets M5 access permission from alternate register.
1400 *
1401 * @param baseAddr The MPU peripheral base address.
1402 * @param regionNum MPU region number.
1403 * @param accessType Access type Read/Write.
1404 * @retval read or write permission.
1405 */
1406 static inline mpu_access_control MPU_HAL_GetM5AlternateAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType)
1407 {
1408 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1409 if(kMPUAccessRead == accessType)
1410 {
1411 return (mpu_access_control)(BR_MPU_RGDAACn_M5RE(baseAddr, regionNum));
1412 }
1413 else
1414 {
1415 return (mpu_access_control)(BR_MPU_RGDAACn_M5WE(baseAddr, regionNum));
1416 }
1417 }
1418
1419 /*!
1420 * @brief Sets M5 access permission through alternate register.
1421 *
1422 * @param baseAddr The MPU peripheral base address.
1423 * @param regionNum MPU region number.
1424 * @param accessType Access type Read/Write.
1425 * @param accessControl Master5 Access permission.
1426 */
1427 static inline void MPU_HAL_SetM5AlternateAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType, mpu_access_control accessControl)
1428 {
1429 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1430 if(kMPUAccessRead == accessType)
1431 {
1432 BW_MPU_RGDAACn_M5RE(baseAddr, regionNum, accessControl);
1433 }
1434 else
1435 {
1436 BW_MPU_RGDAACn_M5WE(baseAddr, regionNum, accessControl);
1437 }
1438 }
1439
1440 /*!
1441 * @brief Gets M6 access permission from alternate register.
1442 *
1443 * @param baseAddr The MPU peripheral base address.
1444 * @param regionNum MPU region number.
1445 * @param accessType Access type Read/Write.
1446 * @retval read or write permission.
1447 */
1448 static inline mpu_access_control MPU_HAL_GetM6AlternateAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType)
1449 {
1450 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1451 if(kMPUAccessRead == accessType)
1452 {
1453 return (mpu_access_control)(BR_MPU_RGDAACn_M6RE(baseAddr, regionNum));
1454 }
1455 else
1456 {
1457 return (mpu_access_control)(BR_MPU_RGDAACn_M6WE(baseAddr, regionNum));
1458 }
1459 }
1460
1461 /*!
1462 * @brief Sets M6 access permission through alternate register.
1463 *
1464 * @param baseAddr The MPU peripheral base address.
1465 * @param regionNum MPU region number.
1466 * @param accessType Access type Read/Write.
1467 * @param accessControl Master6 access permission.
1468 */
1469 static inline void MPU_HAL_SetM6AlternateAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType, mpu_access_control accessControl)
1470 {
1471 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1472 if(kMPUAccessRead == accessType)
1473 {
1474 BW_MPU_RGDAACn_M6RE(baseAddr, regionNum, accessControl);
1475 }
1476 else
1477 {
1478 BW_MPU_RGDAACn_M6WE(baseAddr, regionNum, accessControl);
1479 }
1480 }
1481
1482 /*!
1483 * @brief Gets M7 access permission from alternate register.
1484 *
1485 * @param baseAddr The MPU peripheral base address.
1486 * @param regionNum MPU region number.
1487 * @param accessType Access type Read/Write.
1488 * @retval read or write permission.
1489 */
1490 static inline mpu_access_control MPU_HAL_GetM7AlternateAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType)
1491 {
1492 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1493 if(kMPUAccessRead == accessType)
1494 {
1495 return (mpu_access_control)(BR_MPU_RGDAACn_M7RE(baseAddr, regionNum));
1496 }
1497 else
1498 {
1499 return (mpu_access_control)(BR_MPU_RGDAACn_M7WE(baseAddr, regionNum));
1500 }
1501 }
1502
1503 /*!
1504 * @brief Sets M7 access permission through alternate register.
1505 *
1506 * @param baseAddr The MPU peripheral base address.
1507 * @param regionNum MPU region number.
1508 * @param accessType Access type Read/Write.
1509 * @param accessControl Master7 access permission.
1510 */
1511 static inline void MPU_HAL_SetM7AlternateAccessRights(uint32_t baseAddr, mpu_region_num regionNum, mpu_access_type accessType, mpu_access_control accessControl)
1512 {
1513 assert(regionNum < HW_MPU_RGDAACn_COUNT);
1514 if(kMPUAccessRead == accessType)
1515 {
1516 BW_MPU_RGDAACn_M7RE(baseAddr, regionNum, accessControl);
1517 }
1518 else
1519 {
1520 BW_MPU_RGDAACn_M7WE(baseAddr, regionNum, accessControl);
1521 }
1522 }
1523
1524 /*!
1525 * @brief Initializes the MPU module.
1526 *
1527 * @param baseAddr The MPU peripheral base address.
1528 */
1529 void MPU_HAL_Init(uint32_t baseAddr);
1530
1531 /*@}*/
1532
1533 #if defined(__cplusplus)
1534 }
1535 #endif
1536
1537 /*! @}*/
1538
1539 #endif /* MBED_NO_MPU */
1540
1541 #endif /* __FSL_MPU_HAL_H__*/
1542 /*******************************************************************************
1543 * EOF
1544 *******************************************************************************/
1545
Imprint / Impressum