Quantcast
Channel: Infineon Forums
Viewing all articles
Browse latest Browse all 9892

MPU for safety critical application

$
0
0
Hi,

here is example to use MPU for protecting vector table against write access after it has been relocated to ram

extern int __vectortableram_start;

void SetupMpu(void)
{
#define MPU_RGN_NUMBER_VT 3 // region number and priority
#define MPU_RGN_SIZE_VT 8 // 512B =2^(8+1)
#define AP_VT 6 // access parameters r/r

#define MPU_RBAR_VALUE_VT ((uint32_t)__vectortableram_start)
#define MPU_RASR_VALUE_VT ((((uint32_t)MPU_RGN_SIZE_VT << PPB_MPU_RASR_SIZE_Pos) & PPB_MPU_RASR_SIZE_Msk) | \
((uint32_t)PPB_MPU_RASR_S_Msk) | \
((uint32_t)PPB_MPU_RASR_C_Msk) | \
(((uint32_t)AP_VT << PPB_MPU_RASR_AP_Pos) & PPB_MPU_RASR_AP_Msk) | \
((uint32_t)PPB_MPU_RASR_ENABLE_Msk))

// setup region address and region access parameters for VT
PPB->MPU_RNR = MPU_RGN_NUMBER_VT;
PPB->MPU_RBAR = MPU_RBAR_VALUE_VT;
PPB->MPU_RASR = MPU_RASR_VALUE_VT;

// enable MPU
PPB->MPU_CTRL = (uint32_t)(PPB_MPU_CTRL_ENABLE_Msk | PPB_MPU_CTRL_PRIVDEFENA_Msk);
__DSB();
__ISB();
}

write access will trigger exception memfault if installed.

rum

Viewing all articles
Browse latest Browse all 9892

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>