MPU不保护内存访问

时间:2013-04-18 14:01:35

标签: arm cortex-m3

我想使用Cortex-M3 MPU来保护内存免受意外访问。为此,我配置了MPU。但我没有得到任何例外。其他例外情况如BusFault,HardFault已被强制使用适当的“坏代码”。

当前的初始化是

MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk;       // disable MPU

MPU->RNR  = 0
MPU->RBAR = 0x20000000;
MPU->RASR = 0x03000019; // 0x03UL << (MPU_RASR_ATTRS_Pos+8) | (0x19UL << 0);

MPU->RNR  = 1;
MPU->RBAR = 0x8000000;  // read back as 0x8000001
MPU->RASR = 0x03000027; // 0x03UL << (MPU_RASR_ATTRS_Pos+8) | (0x27UL << 0); 

MPU->RNR  = 2;
MPU->RBAR = 0x40000000; // read back as 0x40000002
MPU->RASR = 0x13000039; // 0x13UL << (MPU_RASR_ATTRS_Pos+8) | (0x39UL << 0); 

SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;  // Enable the memory fault exception

MPU->CTRL |= MPU_CTRL_PRIVDEFENA_Msk | MPU_CTRL_ENABLE_Msk;   // Enable MPU

到现在为止,我可以访问所有内存。现在我添加一个区域来保护区域。

MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; // disable MPU

MPU->RNR = 3;
MPU->RBAR = 0x20002000;  // read back as 0x20002003
MPU->RASR = 0x00000009;  // 0x00UL << (MPU_RASR_ATTRS_Pos+8) | (0x09UL << 0);

MPU->CTRL |= MPU_CTRL_PRIVDEFENA_Msk | MPU_CTRL_ENABLE_Msk; // re-enable MPU

3号区域应隐藏所有其他MPU区域。现在0x20002000的内存不应该是可读的,也不可读。但是我仍然可以在这个地址读取甚至写入内存。

什么可以抑制恩智浦LPC1788 CPU中的内存保护?

0 个答案:

没有答案