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  **************************   GLOBAL FUNCTIONS   *******************************
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 /* defined(__MPU_PRESENT) && (__MPU_PRESENT == 1) */