【简介】
在S32K3 Cortex-M7内核中是集成了MPU 模块的,从DDI0489F_cortex_m7_trm 文档中可以芯片设计时MPU 的可配置的regions 可以设计为为8 或者 16 对应的数值越大配置属性的优先级越高。
对应的MPU 的配置寄存器列表如下
【MPU_TYPE寄存器】
以下对寄存器的说明可知,可以使用该寄存器来查看对应的core 的MPU是否配置及共有多少regions 的属性信息。
从S32K314 的芯片读取的配置信息可知,S32K314 的M7 核设计时设计了16个配置的MPU region。
【MPU_RNP寄存器配置】
MPU_RNP(MPU Region Number Register) 以下是手册对该寄存器的描述可知该寄存器用于选择当前配置的MPU region的number,按照手册的说明应先选择MPU_RNG,然后配置MPU_RBAR和MPU_RASR
【MPU_RBAR寄存器配置】
对应的寄存器描述如下,可以通过该寄存器来设置region 的base 地址信息,从寄存器的ADDR 信号的配置也可以看出对应的MPU 的配置地址是2^5 对其的至少要32字节对齐
【MPU_PASR寄存器配置】
对应寄存器说明如下,我们可以使用该寄存器来配置对应region 的属性和size配置信息。
MPU 的主要特性是配置region 的属性信息,我们先结合手册和S32K的启动代码的MPU配置查看下ATTRS 的的属性配置。
以下代码是对CODE flash 的配置
/*Program flash which would extract from linker symbol*/ rbar[2]=(uint32)__ROM_CODE_START; rasr[2]=0x060B002BUL;
上述代码的rasr 配置为0x060b002b 对应的ATTRS 段的配置信息如下
以下是XN 属性的说明 0 可运行,1 不可执行配置
TEX C B 001 1 1 S = 0 对应属性配置为NORMAL CACHE write-back read alloc 属性
除了配置属性信息外还可以配置region 的大小信息 size 配置为21
按照手册里的公式计算对应的值为2^(21+1) byte = 4096 KB
上述的计算结果和启动文件的注释的说明也是匹配的
代码中对MPU 的配置也是对上述三个寄存器的配置过程匹配,配置好region 后使能MPU 完成MPU的初始化配置
以下是arm 手册中对texcb 的解码说明
AP 配置为特权级别和非特权级 read-only 访问属性