em_mpu.c
Go to the documentation of this file.00001
00034 #include "em_mpu.h"
00035 #if defined(__MPU_PRESENT) && (__MPU_PRESENT == 1)
00036 #include "em_assert.h"
00037
00038
00039
00045
00074
00075
00076
00077
00078
00079
00092 void MPU_ConfigureRegion(const MPU_RegionInit_TypeDef *init)
00093 {
00094 EFM_ASSERT(init->regionNo < ((MPU->TYPE & MPU_TYPE_DREGION_Msk) >>
00095 MPU_TYPE_DREGION_Pos));
00096
00097 MPU->RNR = init->regionNo;
00098
00099 if (init->regionEnable)
00100 {
00101 EFM_ASSERT(!(init->baseAddress & ~MPU_RBAR_ADDR_Msk));
00102 EFM_ASSERT(init->tex <= 0x7);
00103
00104 MPU->RBAR = init->baseAddress;
00105 MPU->RASR = ((init->disableExec ? 1 : 0) << MPU_RASR_XN_Pos) |
00106 (init->accessPermission << MPU_RASR_AP_Pos) |
00107 (init->tex << MPU_RASR_TEX_Pos) |
00108 ((init->shareable ? 1 : 0) << MPU_RASR_S_Pos) |
00109 ((init->cacheable ? 1 : 0) << MPU_RASR_C_Pos) |
00110 ((init->bufferable ? 1 : 0) << MPU_RASR_B_Pos) |
00111 (init->srd << MPU_RASR_SRD_Pos) |
00112 (init->size << MPU_RASR_SIZE_Pos) |
00113 (1 << MPU_RASR_ENABLE_Pos);
00114 }
00115 else
00116 {
00117 MPU->RBAR = 0;
00118 MPU->RASR = 0;
00119 }
00120 }
00121
00122
00125 #endif