gpt4 book ai didi

c - 如何在 cortex m4 中配置 MPU 寄存器?

转载 作者:太空宇宙 更新时间:2023-11-04 03:20:05 28 4
gpt4 key购买 nike

我想对内存区域添加保护,从 0x20000000 开始。该区域的大小为 64 字节。权限是只读的,除 xn 外没有设置标志。这是我认为应该的样子,

#define MPU_CTRL         (*((volatile unsigned long*) 0xE000ED94))    // MPU Control register
#define MPU_RNR (*((volatile unsigned long*) 0xE000ED98)) // MPU Region Number register
#define MPU_RBAR (*((volatile unsigned long*) 0xE000ED9C)) // MPU Region Base Address Register
#define MPU_RASR (*((volatile unsigned long*) 0xE000EDA0)) // MPU Region attributes and size register

void Registers_Init(void)
{
//MPU Configuring
MPU_RNR = 0x00000000; // use region 0
MPU_RBAR = 0x20000000; // base address is 0x20000000
MPU_RASR = 0x1608FF0B; // enable bit=1, 64 bytes,not subregions, s=c=b=0, xn=1, permission= ro/ro.
MPU_CTRL = 0x00000005; // enable memory protection unit,guaranteeing default priviliged access
}

int main()
{
Registers_Init();
return 0;
}

这是正确的吗?我做错了吗?请指导。

最佳答案

是的,配置区域看起来是正确的。但是,您已禁用所有子区域,这意味着您将无法访问此内存块。子区域禁用位应为 0(启用)。您还设置了特权和非特权只读。

您不必使用 RNR 寄存器,因为您可以使用 RBAR 寄存器中的 VALID 和 REGION 字段。

如果您在任何时候更改为非特权模式,您将无法访问您的代码或数据内存(区域中定义的除外),因此您将遇到 MPU 故障。如果您还没有定义一个只读区域以允许访问所有闪存,我建议添加一个 MPU 故障处理程序(尽管您已经拥有通过后台区域的特权访问权限)。

关于c - 如何在 cortex m4 中配置 MPU 寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47249929/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com