2 * Copyright (c) 2013 - 2014, Freescale Semiconductor, Inc.
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
8 * o Redistributions of source code must retain the above copyright notice, this list
9 * of conditions and the following disclaimer.
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.
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.
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.
30 #ifndef __FSL_MPU_HAL_H__
31 #define __FSL_MPU_HAL_H__
36 #include "fsl_mpu_features.h"
37 #include "fsl_device_registers.h"
41 #define MPU_REGION_NUMBER 12
48 /*******************************************************************************
50 *******************************************************************************/
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*/
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*/
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
;
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
;
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
;
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*/
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.*/
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
;
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
;
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
;
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
;
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*/
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*/
170 /*! @brief MPU access region valid. */
171 typedef enum _mpu_region_valid
{
172 kMPURegionInvalid
= 0U, /*!< region invalid*/
173 kMPURegionValid
= 1U /*!< region valid*/
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.*/
183 /*******************************************************************************
185 *******************************************************************************/
187 /*******************************************************************************
189 *******************************************************************************/
191 #if defined(__cplusplus)
201 * @brief Enables the MPU module operation
203 * @param baseAddr The MPU peripheral base address
205 static inline void MPU_HAL_Enable(uint32_t baseAddr
)
207 BW_MPU_CESR_VLD(baseAddr
, (uint8_t)true);
211 * @brief Disables the MPU module operation
213 * @param baseAddr The MPU peripheral base address
215 static inline void MPU_HAL_Disable(uint32_t baseAddr
)
217 BW_MPU_CESR_VLD(baseAddr
, (uint8_t)false);
221 * @brief Checks whether the MPU module is enabled
223 * @param baseAddr The MPU peripheral base address
224 * @retval true MPU module is enabled
225 * @retval false MPU module is disabled
227 static inline bool MPU_HAL_IsEnabled(uint32_t baseAddr
)
229 return BR_MPU_CESR_VLD(baseAddr
);
233 * @brief Returns the total region number
235 * @param baseAddr The MPU peripheral base address
236 * @retval the number of regions
238 static inline uint32_t MPU_HAL_GetNumberOfRegions(uint32_t baseAddr
)
240 return (BR_MPU_CESR_NRGD(baseAddr
));
244 * @brief Returns MPU slave sports
246 * @param baseAddr The MPU peripheral base address
247 * @retval the number of slaves
249 static inline uint32_t MPU_HAL_GetNumberOfSlaves(uint32_t baseAddr
)
251 return (BR_MPU_CESR_NSP(baseAddr
));
255 * @brief Returns hardware level info
257 * @param baseAddr The MPU peripheral base address
258 * @retval hardware revision level
260 static inline uint32_t MPU_HAL_GetHardwareRevisionLevel(uint32_t baseAddr
)
262 return (BR_MPU_CESR_HRL(baseAddr
));
266 * @brief Returns hardware level info
268 * @param baseAddr The MPU peripheral base address
269 * @param regNum Error address register number
270 * @retval error access address
272 static inline uint32_t MPU_HAL_GetErrorAccessAddr(uint32_t baseAddr
, mpu_error_addr_reg regNum
)
274 assert(regNum
< HW_MPU_EARn_COUNT
);
275 return (BR_MPU_EARn_EADDR(baseAddr
, regNum
));
279 * @brief Returns error access slaves sports
281 * @param baseAddr The MPU peripheral base address
282 * @retval error slave sports
284 static inline uint8_t MPU_HAL_GetErrorSlaveSports(uint32_t baseAddr
)
286 return (BR_MPU_CESR_SPERR(baseAddr
));
290 * @brief Returns error access address
292 * @param baseAddr The MPU peripheral base address
293 * @param errorDetailRegNum Error detail register number
294 * @retval error access type
296 static inline mpu_error_access_type
MPU_HAL_GetErrorAccessType(uint32_t baseAddr
, mpu_error_detail_reg errorDetailRegNum
)
298 assert(errorDetailRegNum
< HW_MPU_EDRn_COUNT
);
299 return (mpu_error_access_type
)(BR_MPU_EDRn_ERW(baseAddr
, errorDetailRegNum
));
303 * @brief Returns error access attributes
305 * @param baseAddr The MPU peripheral base address
306 * @param errorDetailRegNum Detail error register number
307 * @retval error access attributes
309 static inline mpu_error_attributes
MPU_HAL_GetErrorAttributes(uint32_t baseAddr
, mpu_error_detail_reg errorDetailRegNum
)
311 assert(errorDetailRegNum
< HW_MPU_EDRn_COUNT
);
312 return (mpu_error_attributes
)(BR_MPU_EDRn_EATTR(baseAddr
, errorDetailRegNum
));
316 * @brief Returns error access master number
318 * @param baseAddr The MPU peripheral base address
319 * @param errorDetailRegNum Error register number
320 * @retval error master number
322 static inline mpu_master_num
MPU_HAL_GetErrorMasterNum(uint32_t baseAddr
, mpu_error_detail_reg errorDetailRegNum
)
324 assert(errorDetailRegNum
< HW_MPU_EDRn_COUNT
);
325 return (mpu_master_num
)(BR_MPU_EDRn_EMN(baseAddr
, errorDetailRegNum
));
329 * @brief Returns error process identifier
331 * @param baseAddr The MPU peripheral base address
332 * @param errorDetailRegNum Error register number
333 * @retval error process identifier
335 static inline uint32_t MPU_HAL_GetErrorProcessIdentifier(uint32_t baseAddr
, mpu_error_detail_reg errorDetailRegNum
)
337 assert(errorDetailRegNum
< HW_MPU_EDRn_COUNT
);
338 return(BR_MPU_EDRn_EPID(baseAddr
, errorDetailRegNum
));
342 * @brief Returns error access control
344 * @param baseAddr The MPU peripheral base address
345 * @param errorDetailRegNum Error register number
346 * @retval error access control
348 static inline mpu_error_access_control
MPU_HAL_GetErrorAccessControl(uint32_t baseAddr
, mpu_error_detail_reg errorDetailRegNum
)
350 assert(errorDetailRegNum
< HW_MPU_EDRn_COUNT
);
352 uint32_t i
= BR_MPU_EDRn_EACD(baseAddr
, errorDetailRegNum
);
356 return (kMPUNoRegionHitError
);
360 return (kMPUNoneOverlappRegionError
);
364 return (kMPUOverlappRegionError
);
369 * @brief Returns the region start address
371 * @param baseAddr The MPU peripheral base address
372 * @param regionNum MPU region number
373 * @retval region start address
375 static inline uint32_t MPU_HAL_GetRegionStartAddr(uint32_t baseAddr
, mpu_region_num regionNum
)
377 assert(regionNum
< HW_MPU_RGDn_WORD0_COUNT
);
378 return (BR_MPU_RGDn_WORD0_SRTADDR(baseAddr
, regionNum
)<<BP_MPU_RGDn_WORD0_SRTADDR
);
382 * @brief Sets region start address
384 * @param baseAddr The MPU peripheral base address
385 * @param regionNum MPU region number
386 * @param startAddr Region start address
388 static inline void MPU_HAL_SetRegionStartAddr(uint32_t baseAddr
, mpu_region_num regionNum
, uint32_t startAddr
)
390 assert(regionNum
< HW_MPU_RGDn_WORD0_COUNT
);
391 startAddr
>>= BP_MPU_RGDn_WORD0_SRTADDR
;
392 BW_MPU_RGDn_WORD0_SRTADDR(baseAddr
, regionNum
, startAddr
);
396 * @brief Returns region end address
398 * @param baseAddr The MPU peripheral base address
399 * @param regionNum MPU region number
400 * @retval region end address
402 static inline uint32_t MPU_HAL_GetRegionEndAddr(uint32_t baseAddr
, mpu_region_num regionNum
)
404 assert(regionNum
< HW_MPU_RGDn_WORD1_COUNT
);
405 return (BR_MPU_RGDn_WORD1_ENDADDR(baseAddr
, regionNum
)<<BP_MPU_RGDn_WORD0_SRTADDR
);
409 * @brief Sets region end address
411 * @param baseAddr The MPU peripheral base address
412 * @param regionNum MPU region number
413 * @param endAddr Region end address
415 static inline void MPU_HAL_SetRegionEndAddr(uint32_t baseAddr
, mpu_region_num regionNum
, uint32_t endAddr
)
417 assert(regionNum
< HW_MPU_RGDn_WORD1_COUNT
);
418 endAddr
>>= BP_MPU_RGDn_WORD0_SRTADDR
;
419 BW_MPU_RGDn_WORD1_ENDADDR(baseAddr
, regionNum
, endAddr
);
423 * @brief Returns all masters access permission for a specific region
425 * @param baseAddr The MPU peripheral base address
426 * @param regionNum MPU region number
427 * @retval all masters access permission
429 static inline uint32_t MPU_HAL_GetAllMastersAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
431 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
432 return (HW_MPU_RGDn_WORD2_RD(baseAddr
, regionNum
));
436 * @brief Sets all masters access permission for a specific region
438 * @param baseAddr The MPU peripheral base address
439 * @param regionNum MPU region number
440 * @param accessRights All masters access rights
442 static inline void MPU_HAL_SetAllMastersAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, uint32_t accessRights
)
444 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
445 HW_MPU_RGDn_WORD2_WR(baseAddr
, regionNum
, accessRights
);
449 * @brief Gets M0 access permission in supervisor mode
451 * @param baseAddr The MPU peripheral base address
452 * @param regionNum MPU region number
453 * @retval Master0 access permission
455 static inline mpu_supervisor_access_rights
MPU_HAL_GetM0SupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
457 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
458 return (mpu_supervisor_access_rights
)(BR_MPU_RGDn_WORD2_M0SM(baseAddr
, regionNum
));
462 * @brief Gets M0 access permission in user mode
464 * @param baseAddr The MPU peripheral base address
465 * @param regionNum MPU region number
466 * @retval Master0 access permission
468 static inline mpu_user_access_rights
MPU_HAL_GetM0UserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
470 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
471 return (mpu_user_access_rights
)(BR_MPU_RGDn_WORD2_M0UM(baseAddr
, regionNum
));
475 * @brief Sets M0 access permission in supervisor mode
477 * @param baseAddr The MPU peripheral base address
478 * @param regionNum MPU region number
479 * @param accessRights Master0 access permission
481 static inline void MPU_HAL_SetM0SupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_supervisor_access_rights accessRights
)
483 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
484 BW_MPU_RGDn_WORD2_M0SM(baseAddr
, regionNum
, accessRights
);
488 * @brief Sets M0 access permission in user mode
490 * @param baseAddr The MPU peripheral base address
491 * @param regionNum MPU region number
492 * @param accessRights Master0 access permission
494 static inline void MPU_HAL_SetM0UserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_user_access_rights accessRights
)
496 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
497 BW_MPU_RGDn_WORD2_M0UM(baseAddr
, regionNum
, accessRights
);
501 * @brief Checks whether the M0 process identifier is enabled in region hit evaluation
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
509 static inline bool MPU_HAL_IsM0ProcessIdentifierEnabled(uint32_t baseAddr
, mpu_region_num regionNum
)
511 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
512 return (1 == BR_MPU_RGDn_WORD2_M0PE(baseAddr
, regionNum
));
516 * @brief Sets the M0 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable
518 * @param baseAddr The MPU peripheral base address
519 * @param regionNum MPU region number
520 * @param identifierValue Process identifier value
522 static inline void MPU_HAL_SetM0ProcessIdentifierValue(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_process_identifier_value identifierValue
)
524 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
525 BW_MPU_RGDn_WORD2_M0PE(baseAddr
, regionNum
, identifierValue
);
529 * @brief Gets M1 access permission in supervisor mode
531 * @param baseAddr The MPU peripheral base address
532 * @param regionNum MPU region number
533 * @retval Master1 access permission
535 static inline mpu_supervisor_access_rights
MPU_HAL_GetM1SupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
537 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
538 return (mpu_supervisor_access_rights
)(BR_MPU_RGDn_WORD2_M1SM(baseAddr
, regionNum
));
542 * @brief Gets M1 access permission in user mode
544 * @param baseAddr The MPU peripheral base address
545 * @param regionNum MPU region number
546 * @retval Master1 access permission
548 static inline mpu_user_access_rights
MPU_HAL_GetM1UserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
550 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
551 return (mpu_user_access_rights
)(BR_MPU_RGDn_WORD2_M1UM(baseAddr
, regionNum
));
555 * @brief Sets M1 access permission in supervisor mode
557 * @param baseAddr The MPU peripheral base address
558 * @param regionNum MPU region number
559 * @param accessRights Master1 access permission
561 static inline void MPU_HAL_SetM1SupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_supervisor_access_rights accessRights
)
563 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
564 BW_MPU_RGDn_WORD2_M1SM(baseAddr
, regionNum
, accessRights
);
568 * @brief Sets M1 access permission in user mode
570 * @param baseAddr The MPU peripheral base address
571 * @param regionNum MPU region number
572 * @param accessRights Master1 access permission
574 static inline void MPU_HAL_SetM1UserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_user_access_rights accessRights
)
576 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
577 BW_MPU_RGDn_WORD2_M1UM(baseAddr
, regionNum
, accessRights
);
581 * @brief Checks whether M1 process identifier enabled in region hit evaluation
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
588 static inline bool MPU_HAL_IsM1ProcessIdentifierEnabled(uint32_t baseAddr
, mpu_region_num regionNum
)
590 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
591 return (1 == BR_MPU_RGDn_WORD2_M1PE(baseAddr
, regionNum
));
595 * @brief Sets the M1 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable
597 * @param baseAddr The MPU peripheral base address
598 * @param regionNum MPU region number
599 * @param identifierValue Process identifier value
601 static inline void MPU_HAL_SetM1ProcessIdentifierValue(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_process_identifier_value identifierValue
)
603 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
604 BW_MPU_RGDn_WORD2_M1PE(baseAddr
, regionNum
, identifierValue
);
608 * @brief Gets M2 access permission in supervisor mode
610 * @param baseAddr The MPU peripheral base address
611 * @param regionNum MPU region number
612 * @retval Master2 access permission
614 static inline mpu_supervisor_access_rights
MPU_HAL_GetM2SupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
616 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
617 return (mpu_supervisor_access_rights
)(BR_MPU_RGDn_WORD2_M2SM(baseAddr
, regionNum
));
621 * @brief Gets M2 access permission in user mode
623 * @param baseAddr The MPU peripheral base address
624 * @param regionNum MPU region number
625 * @retval Master2 access permission
627 static inline mpu_user_access_rights
MPU_HAL_GetM2UserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
629 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
630 return (mpu_user_access_rights
)(BR_MPU_RGDn_WORD2_M2UM(baseAddr
, regionNum
));
634 * @brief Sets M2 access permission in supervisor mode
636 * @param baseAddr The MPU peripheral base address
637 * @param regionNum MPU region number
638 * @param accessRights Master2 access permission
640 static inline void MPU_HAL_SetM2SupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_supervisor_access_rights accessRights
)
642 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
643 BW_MPU_RGDn_WORD2_M2SM(baseAddr
, regionNum
, accessRights
);
647 * @brief Sets M2 access permission in user mode
649 * @param baseAddr The MPU peripheral base address
650 * @param regionNum MPU region number
651 * @param accessRights Master2 access permission
653 static inline void MPU_HAL_SetM2UserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_user_access_rights accessRights
)
655 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
656 BW_MPU_RGDn_WORD2_M2UM(baseAddr
, regionNum
, accessRights
);
660 * @brief Checks whether the M2 process identifier enabled in region hit evaluation
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
668 static inline bool MPU_HAL_IsM2ProcessIdentifierEnabled(uint32_t baseAddr
, mpu_region_num regionNum
)
670 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
671 return (1 == BR_MPU_RGDn_WORD2_M2PE(baseAddr
, regionNum
));
675 * @brief Sets the M2 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable.
677 * @param baseAddr The MPU peripheral base address.
678 * @param regionNum MPU region number.
679 * @param identifierValue Process identifier value.
681 static inline void MPU_HAL_SetM2ProcessIdentifierValue(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_process_identifier_value identifierValue
)
683 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
684 BW_MPU_RGDn_WORD2_M2PE(baseAddr
, regionNum
, identifierValue
);
688 * @brief Gets M3 access permission in supervisor mode
690 * @param baseAddr The MPU peripheral base address
691 * @param regionNum MPU region number
692 * @retval Master3 access permission
694 static inline mpu_supervisor_access_rights
MPU_HAL_GetM3SupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
696 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
697 return (mpu_supervisor_access_rights
)(BR_MPU_RGDn_WORD2_M3SM(baseAddr
, regionNum
));
701 * @brief Gets M3 access permission in user mode
703 * @param baseAddr The MPU peripheral base address
704 * @param regionNum MPU region number
705 * @retval Master3 access permission
707 static inline mpu_user_access_rights
MPU_HAL_GetM3UserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
709 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
710 return (mpu_user_access_rights
)(BR_MPU_RGDn_WORD2_M3UM(baseAddr
, regionNum
));
714 * @brief Sets M3 access permission in supervisor mode.
716 * @param baseAddr The MPU peripheral base address.
717 * @param regionNum MPU region number.
718 * @param accessRights Master3 access permission.
720 static inline void MPU_HAL_SetM3SupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_supervisor_access_rights accessRights
)
722 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
723 BW_MPU_RGDn_WORD2_M3SM(baseAddr
, regionNum
, accessRights
);
727 * @brief Sets M3 access permission in user mode
729 * @param baseAddr The MPU peripheral base address
730 * @param regionNum MPU region number
731 * @param accessRights Master3 access permission
733 static inline void MPU_HAL_SetM3UserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_user_access_rights accessRights
)
735 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
736 BW_MPU_RGDn_WORD2_M3UM(baseAddr
, regionNum
, accessRights
);
740 * @brief Checks whether the M3 process identifier enabled in region hit evaluation
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
748 static inline bool MPU_HAL_IsM3ProcessIdentifierEnabled(uint32_t baseAddr
, mpu_region_num regionNum
)
750 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
751 return (1 == BR_MPU_RGDn_WORD2_M3PE(baseAddr
, regionNum
));
755 * @brief Sets M3 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable
757 * @param baseAddr The MPU peripheral base address
758 * @param regionNum MPU region number
759 * @param identifierValue Process identifier value
761 static inline void MPU_HAL_SetM3ProcessIdentifierValue(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_process_identifier_value identifierValue
)
763 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
764 BW_MPU_RGDn_WORD2_M3PE(baseAddr
, regionNum
, identifierValue
);
768 * @brief Gets the M4 access permission.
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
775 static inline mpu_access_control
MPU_HAL_GetM4AccessControl(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
)
777 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
778 if(kMPUAccessRead
== accessType
)
780 return (mpu_access_control
)(BR_MPU_RGDn_WORD2_M4RE(baseAddr
, regionNum
));
784 return (mpu_access_control
)(BR_MPU_RGDn_WORD2_M4WE(baseAddr
, regionNum
));
789 * @brief Sets the M4 access permission
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
796 static inline void MPU_HAL_SetM4AccessControl(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
, mpu_access_control accessControl
)
798 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
799 if(kMPUAccessRead
== accessType
)
801 BW_MPU_RGDn_WORD2_M4RE(baseAddr
, regionNum
, accessControl
);
805 BW_MPU_RGDn_WORD2_M4WE(baseAddr
, regionNum
, accessControl
);
810 * @brief Gets the M5 access permission
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
817 static inline mpu_access_control
MPU_HAL_GetM5AccessControl(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
)
819 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
820 if(kMPUAccessRead
== accessType
)
822 return (mpu_access_control
)(BR_MPU_RGDn_WORD2_M5RE(baseAddr
, regionNum
));
826 return (mpu_access_control
)(BR_MPU_RGDn_WORD2_M5WE(baseAddr
, regionNum
));
831 * @brief Sets the M5 access permission
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
838 static inline void MPU_HAL_SetM5AccessControl(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
, mpu_access_control accessControl
)
840 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
841 if(kMPUAccessRead
== accessType
)
843 BW_MPU_RGDn_WORD2_M5RE(baseAddr
, regionNum
, accessControl
);
847 BW_MPU_RGDn_WORD2_M5WE(baseAddr
, regionNum
, accessControl
);
852 * @brief Gets the M6 access permission
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
859 static inline mpu_access_control
MPU_HAL_GetM6AccessControl(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
)
861 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
862 if(kMPUAccessRead
== accessType
)
864 return (mpu_access_control
)(BR_MPU_RGDn_WORD2_M6RE(baseAddr
, regionNum
));
868 return (mpu_access_control
)(BR_MPU_RGDn_WORD2_M6WE(baseAddr
, regionNum
));
873 * @brief Sets the M6 access permission
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
880 static inline void MPU_HAL_SetM6AccessControl(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
, mpu_access_control accessControl
)
882 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
883 if(kMPUAccessRead
== accessType
)
885 BW_MPU_RGDn_WORD2_M6RE(baseAddr
, regionNum
, accessControl
);
889 BW_MPU_RGDn_WORD2_M6WE(baseAddr
, regionNum
, accessControl
);
894 * @brief Gets the M7 access permission
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
901 static inline mpu_access_control
MPU_HAL_GetM7AccessControl(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
)
903 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
904 if(kMPUAccessRead
== accessType
)
906 return (mpu_access_control
)(BR_MPU_RGDn_WORD2_M7RE(baseAddr
, regionNum
));
910 return (mpu_access_control
)(BR_MPU_RGDn_WORD2_M7WE(baseAddr
, regionNum
));
915 * @brief Sets the M7 access permission
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
922 static inline void MPU_HAL_SetM7AccessControl(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
, mpu_access_control accessControl
)
924 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
925 if(kMPUAccessRead
== accessType
)
927 BW_MPU_RGDn_WORD2_M7RE(baseAddr
, regionNum
, accessControl
);
931 BW_MPU_RGDn_WORD2_M7WE(baseAddr
, regionNum
, accessControl
);
936 * @brief Checks whether region is valid
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
943 static inline bool MPU_HAL_IsRegionValid(uint32_t baseAddr
, mpu_region_num regionNum
)
945 assert(regionNum
< HW_MPU_RGDn_WORD3_COUNT
);
946 return (1 == BR_MPU_RGDn_WORD3_VLD(baseAddr
, regionNum
));
950 * @brief Sets the region valid value
952 * @param baseAddr The MPU peripheral base address
953 * @param regionNum MPU region number
954 * @param validValue Region valid value
956 static inline void MPU_HAL_SetRegionValidValue(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_region_valid validValue
)
958 assert(regionNum
< HW_MPU_RGDn_WORD3_COUNT
);
959 BW_MPU_RGDn_WORD3_VLD(baseAddr
, regionNum
, validValue
);
963 * @brief Gets the process identifier mask
965 * @param baseAddr The MPU peripheral base address
966 * @param regionNum MPU region number
967 * @retval region process identifier mask
969 static inline uint8_t MPU_HAL_GetProcessIdentifierMask(uint32_t baseAddr
, mpu_region_num regionNum
)
971 assert(regionNum
< HW_MPU_RGDn_WORD3_COUNT
);
972 return (BR_MPU_RGDn_WORD3_PIDMASK(baseAddr
, regionNum
));
976 * @brief Sets the process identifier mask
978 * @param baseAddr The MPU peripheral base address
979 * @param regionNum MPU region number
980 * @param processIdentifierMask Process identifier mask value
982 static inline void MPU_HAL_SetPIDMASK(uint32_t baseAddr
, mpu_region_num regionNum
, uint8_t processIdentifierMask
)
984 assert(regionNum
< HW_MPU_RGDn_WORD3_COUNT
);
985 BW_MPU_RGDn_WORD3_PIDMASK(baseAddr
, regionNum
, processIdentifierMask
);
989 * @brief Gets the process identifier
991 * @param baseAddr The MPU peripheral base address
992 * @param regionNum MPU region number
993 * @retval process identifier
995 static inline uint8_t MPU_HAL_GetProcessIdentifier(uint32_t baseAddr
, mpu_region_num regionNum
)
997 assert(regionNum
< HW_MPU_RGDn_WORD3_COUNT
);
998 return (BR_MPU_RGDn_WORD3_PID(baseAddr
, regionNum
));
1002 * @brief Sets the process identifier
1004 * @param baseAddr The MPU peripheral base address
1005 * @param regionNum MPU region number
1006 * @param processIdentifier Process identifier
1008 static inline void MPU_HAL_SetProcessIdentifier(uint32_t baseAddr
, mpu_region_num regionNum
, uint8_t processIdentifier
)
1010 assert(regionNum
< HW_MPU_RGDn_WORD3_COUNT
);
1011 BW_MPU_RGDn_WORD3_PID(baseAddr
, regionNum
, processIdentifier
);
1015 * @brief Gets all masters access permission from alternative register
1017 * @param baseAddr The MPU peripheral base address
1018 * @param regionNum MPU region number
1019 * @retval all masters access permission
1021 static inline uint32_t MPU_HAL_GetAllMastersAlternateAcessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
1023 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1024 return (HW_MPU_RGDAACn_RD(baseAddr
, regionNum
));
1028 * @brief Sets all masters access permission through alternative register
1030 * @param baseAddr The MPU peripheral base address
1031 * @param regionNum MPU region number
1032 * @param accessRights All masters access permission
1034 static inline void MPU_HAL_SetAllMastersAlternateAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, uint32_t accessRights
)
1036 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1037 HW_MPU_RGDAACn_WR(baseAddr
, regionNum
, accessRights
);
1041 * @brief Gets the M0 access rights in supervisor mode
1043 * @param baseAddr The MPU peripheral base address
1044 * @param regionNum MPU region number
1045 * @retval Master0 access permission
1047 static inline mpu_supervisor_access_rights
MPU_HAL_GetM0AlternateSupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
1049 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1050 return (mpu_supervisor_access_rights
)(BR_MPU_RGDAACn_M0SM(baseAddr
, regionNum
));
1054 * @brief Gets the M0 access rights in user mode
1056 * @param baseAddr The MPU peripheral base address
1057 * @param regionNum MPU region number
1058 * @retval Master0 access permission
1060 static inline mpu_user_access_rights
MPU_HAL_GetM0AlternateUserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
1062 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1063 return (mpu_user_access_rights
)(BR_MPU_RGDAACn_M0UM(baseAddr
, regionNum
));
1067 * @brief Sets the M0 access rights in supervisor mode
1069 * @param baseAddr The MPU peripheral base address
1070 * @param regionNum MPU region number
1071 * @param accessRights Master0 access permission
1073 static inline void MPU_HAL_SetM0AlternateSupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_supervisor_access_rights accessRights
)
1075 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1076 BW_MPU_RGDAACn_M0SM(baseAddr
, regionNum
, accessRights
);
1080 * @brief Sets the M0 access rights in user mode
1082 * @param baseAddr The MPU peripheral base address
1083 * @param regionNum MPU region number
1084 * @param accessRights Master0 access permission
1086 static inline void MPU_HAL_SetM0AlternateUserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_user_access_rights accessRights
)
1088 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1089 BW_MPU_RGDAACn_M0UM(baseAddr
, regionNum
, accessRights
);
1093 * @brief Checks whether the M0 process identifier works in region hit evaluation
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
1100 static inline bool MPU_HAL_IsM0AlternateProcessIdentifierEnabled(uint32_t baseAddr
, mpu_region_num regionNum
)
1102 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
1103 return (1 == BR_MPU_RGDAACn_M0PE(baseAddr
, regionNum
));
1107 * @brief @brief Sets the M0 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable
1109 * @param baseAddr The MPU peripheral base address
1110 * @param regionNum MPU region number
1111 * @param identifierValue Process identifier value
1113 static inline void MPU_HAL_SetM0AlternateProcessIdentifierValue(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_process_identifier_value identifierValue
)
1115 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
1116 BW_MPU_RGDAACn_M0PE(baseAddr
, regionNum
, identifierValue
);
1120 * @brief Gets M1 access rights in supervisor mode
1122 * @param baseAddr The MPU peripheral base address
1123 * @param regionNum MPU region number
1124 * @retval Master1 access permission
1126 static inline mpu_supervisor_access_rights
MPU_HAL_GetM1AlternateSupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
1128 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1129 return (mpu_supervisor_access_rights
)(BR_MPU_RGDAACn_M1SM(baseAddr
, regionNum
));
1133 * @brief Gets M1 access rights in user mode
1135 * @param baseAddr The MPU peripheral base address
1136 * @param regionNum MPU region number
1137 * @retval Master1 access permission
1139 static inline mpu_user_access_rights
MPU_HAL_GetM1AlternateUserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
1141 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1142 return (mpu_user_access_rights
)(BR_MPU_RGDAACn_M1UM(baseAddr
, regionNum
));
1146 * @brief Sets M1 access rights in supervisor mode
1148 * @param baseAddr The MPU peripheral base address
1149 * @param regionNum MPU region number
1150 * @param accessRights Master1 access permission
1152 static inline void MPU_HAL_SetM1AlternateSupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_supervisor_access_rights accessRights
)
1154 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1155 BW_MPU_RGDAACn_M1SM(baseAddr
, regionNum
, accessRights
);
1159 * @brief Sets M1 access rights in user mode
1161 * @param baseAddr The MPU peripheral base address
1162 * @param regionNum MPU region number
1163 * @param accessRights Master1 access permission
1165 static inline void MPU_HAL_SetM1AlternateUserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_user_access_rights accessRights
)
1167 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1168 BW_MPU_RGDAACn_M1UM(baseAddr
, regionNum
, accessRights
);
1172 * @brief Checks whether the M1 process identifier works in region hit evaluation
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
1179 static inline bool MPU_HAL_IsM1AlternateProcessIdentifierEnabled(uint32_t baseAddr
, mpu_region_num regionNum
)
1181 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
1182 return (1 == BR_MPU_RGDAACn_M1PE(baseAddr
, regionNum
));
1186 * @brief @brief Sets M1 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable
1188 * @param baseAddr The MPU peripheral base address
1189 * @param regionNum MPU region number
1190 * @param identifierValue process identifier value
1192 static inline void MPU_HAL_SetM1AlternateProcessIdentifierValue(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_process_identifier_value identifierValue
)
1194 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
1195 BW_MPU_RGDAACn_M1PE(baseAddr
, regionNum
, identifierValue
);
1199 * @brief Gets M2 access rights in supervisor mode
1201 * @param baseAddr The MPU peripheral base address
1202 * @param regionNum MPU region number
1203 * @retval M2 access permission
1205 static inline mpu_supervisor_access_rights
MPU_HAL_GetM2AlternateSupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
1207 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1208 return (mpu_supervisor_access_rights
)(BR_MPU_RGDAACn_M2SM(baseAddr
, regionNum
));
1212 * @brief Gets the M2 access rights in user mode
1214 * @param baseAddr The MPU peripheral base address
1215 * @param regionNum MPU region number
1216 * @retval M2 access permission
1218 static inline mpu_user_access_rights
MPU_HAL_GetM2AlternateUserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
1220 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1221 return (mpu_user_access_rights
)(BR_MPU_RGDAACn_M2UM(baseAddr
, regionNum
));
1225 * @brief Sets M2 access rights in supervisor mode
1227 * @param baseAddr The MPU peripheral base address
1228 * @param regionNum MPU region number
1229 * @param accessRights M2 access permission
1231 static inline void MPU_HAL_SetM2AlternateSupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_supervisor_access_rights accessRights
)
1233 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1234 BW_MPU_RGDAACn_M2SM(baseAddr
, regionNum
, accessRights
);
1238 * @brief Sets M2 access rights in user mode
1240 * @param baseAddr The MPU peripheral base address
1241 * @param regionNum MPU region number
1242 * @param accessRights M2 access permission
1244 static inline void MPU_HAL_SetM2AlternateUserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_user_access_rights accessRights
)
1246 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1247 BW_MPU_RGDAACn_M2UM(baseAddr
, regionNum
, accessRights
);
1251 * @brief Checks whether the M2 process identifier works in region hit evaluation
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
1258 static inline bool MPU_HAL_IsM2AlternateProcessIdentifierEnabled(uint32_t baseAddr
, mpu_region_num regionNum
)
1260 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
1261 return (1 == BR_MPU_RGDAACn_M2PE(baseAddr
, regionNum
));
1265 * @brief Sets M2 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable
1267 * @param baseAddr The MPU peripheral base address
1268 * @param regionNum MPU region number
1269 * @param identifierValue process identifier value
1271 static inline void MPU_HAL_SetM2AlternateProcessIdentifierValue(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_process_identifier_value identifierValue
)
1273 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
1274 BW_MPU_RGDAACn_M2PE(baseAddr
, regionNum
, identifierValue
);
1278 * @brief Gets M3 access rights in supervisor mode
1280 * @param baseAddr The MPU peripheral base address
1281 * @param regionNum MPU region number
1282 * @retval M3 access permission
1284 static inline mpu_supervisor_access_rights
MPU_HAL_GetM3AlternateSupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
1286 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1287 return (mpu_supervisor_access_rights
)(BR_MPU_RGDAACn_M3SM(baseAddr
, regionNum
));
1291 * @brief Gets M3 access rights in user mode
1293 * @param baseAddr The MPU peripheral base address
1294 * @param regionNum MPU region number
1295 * @retval M3 access permission
1297 static inline mpu_user_access_rights
MPU_HAL_GetM3AlternateUserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
)
1299 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1300 return (mpu_user_access_rights
)(BR_MPU_RGDAACn_M3UM(baseAddr
, regionNum
));
1304 * @brief Sets M3 access rights in supervisor mode
1306 * @param baseAddr The MPU peripheral base address
1307 * @param regionNum MPU region number
1308 * @param accessRights Master3 access permission
1310 static inline void MPU_HAL_SetM3AlternateSupervisorAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_supervisor_access_rights accessRights
)
1312 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1313 BW_MPU_RGDAACn_M3SM(baseAddr
, regionNum
, accessRights
);
1317 * @brief Sets M3 access rights in user mode
1319 * @param baseAddr The MPU peripheral base address
1320 * @param regionNum MPU region number
1321 * @param accessRights Master3 access permission
1323 static inline void MPU_HAL_SetM3AlternateUserAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_user_access_rights accessRights
)
1325 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1326 BW_MPU_RGDAACn_M3UM(baseAddr
, regionNum
, accessRights
);
1330 * @brief Checks whether the M3 process identifier works in region hit evaluation.
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.
1337 static inline bool MPU_HAL_IsM3AlternateProcessIdentifierEnabled(uint32_t baseAddr
, mpu_region_num regionNum
)
1339 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
1340 return (1 == BR_MPU_RGDAACn_M3PE(baseAddr
, regionNum
));
1344 * @brief Sets M3 process identifier value--- 1 enable process identifier in region hit evaluation and 0 disable.
1346 * @param baseAddr The MPU peripheral base address.
1347 * @param regionNum MPU region number.
1348 * @param identifierValue process identifier value.
1350 static inline void MPU_HAL_SetM3AlternateProcessIdentifierValue(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_process_identifier_value identifierValue
)
1352 assert(regionNum
< HW_MPU_RGDn_WORD2_COUNT
);
1353 BW_MPU_RGDAACn_M3PE(baseAddr
, regionNum
, identifierValue
);
1357 * @brief Gets M4 access permission from alternate register.
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.
1364 static inline mpu_access_control
MPU_HAL_GetM4AlternateAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
)
1366 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1367 if(kMPUAccessRead
== accessType
)
1369 return (mpu_access_control
)(BR_MPU_RGDAACn_M4RE(baseAddr
, regionNum
));
1373 return (mpu_access_control
)(BR_MPU_RGDAACn_M4WE(baseAddr
, regionNum
));
1378 * @brief Sets M4 access permission through alternate register.
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.
1385 static inline void MPU_HAL_SetM4AlternateAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
, mpu_access_control accessControl
)
1387 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1388 if(kMPUAccessRead
== accessType
)
1390 BW_MPU_RGDAACn_M4RE(baseAddr
, regionNum
, accessControl
);
1394 BW_MPU_RGDAACn_M4WE(baseAddr
, regionNum
, accessControl
);
1399 * @brief Gets M5 access permission from alternate register.
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.
1406 static inline mpu_access_control
MPU_HAL_GetM5AlternateAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
)
1408 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1409 if(kMPUAccessRead
== accessType
)
1411 return (mpu_access_control
)(BR_MPU_RGDAACn_M5RE(baseAddr
, regionNum
));
1415 return (mpu_access_control
)(BR_MPU_RGDAACn_M5WE(baseAddr
, regionNum
));
1420 * @brief Sets M5 access permission through alternate register.
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.
1427 static inline void MPU_HAL_SetM5AlternateAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
, mpu_access_control accessControl
)
1429 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1430 if(kMPUAccessRead
== accessType
)
1432 BW_MPU_RGDAACn_M5RE(baseAddr
, regionNum
, accessControl
);
1436 BW_MPU_RGDAACn_M5WE(baseAddr
, regionNum
, accessControl
);
1441 * @brief Gets M6 access permission from alternate register.
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.
1448 static inline mpu_access_control
MPU_HAL_GetM6AlternateAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
)
1450 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1451 if(kMPUAccessRead
== accessType
)
1453 return (mpu_access_control
)(BR_MPU_RGDAACn_M6RE(baseAddr
, regionNum
));
1457 return (mpu_access_control
)(BR_MPU_RGDAACn_M6WE(baseAddr
, regionNum
));
1462 * @brief Sets M6 access permission through alternate register.
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.
1469 static inline void MPU_HAL_SetM6AlternateAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
, mpu_access_control accessControl
)
1471 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1472 if(kMPUAccessRead
== accessType
)
1474 BW_MPU_RGDAACn_M6RE(baseAddr
, regionNum
, accessControl
);
1478 BW_MPU_RGDAACn_M6WE(baseAddr
, regionNum
, accessControl
);
1483 * @brief Gets M7 access permission from alternate register.
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.
1490 static inline mpu_access_control
MPU_HAL_GetM7AlternateAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
)
1492 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1493 if(kMPUAccessRead
== accessType
)
1495 return (mpu_access_control
)(BR_MPU_RGDAACn_M7RE(baseAddr
, regionNum
));
1499 return (mpu_access_control
)(BR_MPU_RGDAACn_M7WE(baseAddr
, regionNum
));
1504 * @brief Sets M7 access permission through alternate register.
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.
1511 static inline void MPU_HAL_SetM7AlternateAccessRights(uint32_t baseAddr
, mpu_region_num regionNum
, mpu_access_type accessType
, mpu_access_control accessControl
)
1513 assert(regionNum
< HW_MPU_RGDAACn_COUNT
);
1514 if(kMPUAccessRead
== accessType
)
1516 BW_MPU_RGDAACn_M7RE(baseAddr
, regionNum
, accessControl
);
1520 BW_MPU_RGDAACn_M7WE(baseAddr
, regionNum
, accessControl
);
1525 * @brief Initializes the MPU module.
1527 * @param baseAddr The MPU peripheral base address.
1529 void MPU_HAL_Init(uint32_t baseAddr
);
1533 #if defined(__cplusplus)
1539 #endif /* MBED_NO_MPU */
1541 #endif /* __FSL_MPU_HAL_H__*/
1542 /*******************************************************************************
1544 *******************************************************************************/