2

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 のメモリにアクセスできなくなり、読み取りも書き込みもできなくなります。ただし、このアドレスでメモリを読み書きすることもできます。

NXP LPC1788 CPU のメモリ保護を阻害するものは何ですか?

4

0 に答える 0