CotexM0 MPU章节中文翻译.docx
- 文档编号:5505435
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:9
- 大小:19.45KB
CotexM0 MPU章节中文翻译.docx
《CotexM0 MPU章节中文翻译.docx》由会员分享,可在线阅读,更多相关《CotexM0 MPU章节中文翻译.docx(9页珍藏版)》请在冰点文库上搜索。
CotexM0MPU章节中文翻译
以下内容为arm公司M0+UserGuide的MemoryProtectionUint章节的大概翻译。
内存保护单元
这一节描述了可选的内存保护单元(MPU。
MPU可以将存储器映射分成一些区域,并且定义每一个区域的位置,大小,访问允许性和存储器属性。
它支持:
对每一个区域实现属性设置
重叠区域
实现存储器属性对系统的控制
存储器属性影响到一个区域的存储器访问的行为。
Cotex-M0+MPU定义了:
8个分开的存储器区域,0-7
一个背景区域
当存储器区域重叠时,存储器访问被具有最高的编号的区域的属性所影响。
例如,对于区域7的属性有比任何和区域7重叠的区域高的优先级。
作为默认的存储器映射,背景区域有着相同的存储器访问属性,但是仅仅在处于特权程序时是可访问的。
Cortex-M0+微控制器的存储器映射有统一的标准,这意味着指令访问和数据访问有相同的区域设置。
如果一个程序访问了一个被微控制器所禁止的存储器位置,那么,处理器会产生一个硬件错误异常。
在一个操作系统环境里,基于程序的执行,内核可以动态的更新微控制器的区域设置。
典型的,一个嵌入式操作系统可以使用MPU以保护内存。
MPU是根据存储器的类型来配置的,可以参考在2-10页的存储器区域,类型和属性。
表4-24出示了MPU可能的区域属性。
这些属性包括可分享和cache缓存所带来的属性,并且这些属性与大多数的微控制器的实现无关,可以参考在4-27页的一个微控制器的MPU的配置来作为编程一个实例的指导。
表4-24存储器属性概述
Strongly-ordered强顺序类型,所有的访问强顺序类型内存的操作依照着的程序顺序,所有的强顺序区域默认是可分享的。
Device设备类型,分为可分享与不可分享的,是映射到外设的存储器组成的,按是否可多处理器使用区分有无共享性。
Normal一般类型,按是否可多处理器使用也分为可分享和不可分享的类型,可分享类型又可分为不可cache缓存,可cache缓存直写,可cache缓存回写,不可分享的也如此分类。
用MPU的寄存器来定义MPU的区域和各自的属性,表4-15出示了MPU寄存器
表4-15,MPU寄存器概述
MPU_TYPE,MPU类型寄存器
MPU_CTRL,MPU控制寄存器
MPU_RNR,MPU区域编号寄存器
MPU_RBAR,MPU基地址寄存器
MPU_RASR,MPU属性和大小寄存器
(还包扩地址,读写属性,和复位值这些来表明以上寄存器的属性
MPU类型寄存器MPU_TYPE,表明了MPU是否有效,如果有效的话,它支持多少个区域。
在表4-25看这个寄存器概述可以得到他的属性,其位分配是:
IREGION,表明了被MPU所支持的指令区域的数量。
总是被0x00填充。
MPU内存映射是统
一的,并且通过DREGION字段描述。
DREGION,表明了被MPU所支持的数据区域的数量:
0x08=8个MPU区域。
SEPARATE,表明了所支持的是统一的存储器映射或者是分作指令和数据存储器映射:
0=统一的。
MPU控制寄存器MPU_CTRL:
使能MPU
使能默认的存储器映射背景区域
使能在硬件错误和不可屏蔽中断中MPU的使用
位分配是:
PRIDEFEND,使能特权软件访问到默认存储器映射:
0=如果MPU被使能,禁止默认内存映射的使用。
任何到一个没有被使能的区域所覆
盖的存储器访问将会造成一个错误。
1=如果MPU是使能的,对于特权软件,使能作为背景区域的默认的存储器映射的使
用。
当使能的时候,背景区域的行为等同于它的区域编号是-1。
任何的被定义和使能的区域有超过默认映射的优先级。
如果MPU是禁止的,处理器忽略这个位。
HFNMIEND,使能在硬件错误和不可屏蔽中断处理期间的MPU的操作。
当MPU被使能的时候:
0=MPU在硬件错误和不可屏蔽中断处理期间是禁止的,ENABLE位的值不起作用。
1=MPU在硬件错误和不可屏蔽中断处理期间是使能的。
当MPU是禁止的时候,如果这个位被置一,结果是不可预知的。
ENABLE,使能MPU:
0=禁止MPU
1=使能MPU
当ENABLE和PRIVDEFEND都被置一时:
对于特权的访问,默认存储器映射在2-10页的存储器模型处被描述。
任何的特权软件访问一个没有有效存储器的区域将表现出被默认存储器映射定义的行为。
任何的非特权软件访问一个没有有效存储器的区域将造成一个硬件错误。
XN和Strongly-ordered的规则总是使得系统控制空间忽略ENABLE位的值。
当ENABLE位被置一时,为了保证系统的运行,除非PRIVDEFEND位被置一,否则必须至少有一个存储器映射的区域是有效的,如果PRIVDEFEND位被置一,并且没有区域被使能,那么仅仅只有特权软件能运行。
当ENABLE位被清零时,系统使用默认的存储器映射。
就如同MPU没有被实现一样有相同的存储器属性,参考在2-12页的表2-9。
默认的存储器映射从特权和非特权软件都可以访问。
当MPU被使能时,访问系统控制空间和向量表总是被允许的。
其他区域的访问性基于所处的区域和PRIVDEFEND是否被置一。
除了HFNMIENA被置一,MPU在处理器正在执行优先级为-1和-2的异常的处理程序时是不被使能的。
这些优先级仅仅可能产生在硬件错误或不可屏蔽中断异常执行时。
使HFNMIEND位置一去使能MPU在这两个优先级时的操作。
MPU区域编号寄存器MPU_RNR选择哪一个存储器区域被MPU_RBAR和MPU_RASR寄存器引用。
位分配如下:
REGION,表明MPU区域被通过MPU_RBAR和MPU_RASR寄存器引用。
MPU支持8个内存区域,因此这个字段被允许的值是0-7。
一般地,在访问MPU_RBAR和MPU_RASR寄存器之前,你需要给这个寄存器里写入所需的区域编号。
然而,你可以通过写MPU_RBAR寄存器并且使VALID位被置一来改变这个区域编号,参考MPU区域基地址寄存器。
写这个寄存器更新了REGION字段的值。
MPU区域基地址寄存器MPU_RBAR定义了被MPU_RNR寄存器所选择的MPU区域的基地址,并且可以更新MPU_RNR寄存器的值。
写MPU_RBAR寄存器并保证VALID位被置一可以改变当前的区域编号并更新MPU_RNR寄存器。
位分配如下:
[31:
N],ADDR,区域基地址字段。
N值取决于区域的大小。
更多的信息可以参考ADDR字段。
VALID,MPU区域编号有效位:
写:
0=MPU_RNR不被改变,并且处理器:
对于在MPU_RNR寄存器中指定的区域,更新其基地址。
忽略REGION字段的值。
1=处理器:
用REGION字段的值更新MPU_RNR寄存器的值。
对于在REGION字段指定的区域,更新其基地址。
读返回0。
REGION,MPU区域字段。
在写这个字段的行为上,参考VALID字段的描述。
在读操作上,返回被MPU_RNR寄存器指定的当前的区域编号。
ADDR字段
ADDR字段是MPU_RBAR寄存器的[31:
N]位。
被MPU_RASR寄存器的SIZE字段指定的区域的大小值定义了N值:
N=Log2(区域的字节数
假如在MPU_RASR寄存器中区域大小的配置是4GB,那么没有有效的ADDR字段。
在这种情况下,这个区域占据了整个的内存映射,并且其基地址是0。
基地址必须是和区域的大小对齐的。
例如,一个64KB大小的区域必须被对齐在一个是64KB整数倍的地址上,比如,在0x00010000或者0x00020000。
MPU区域属性和大小寄存器MPU_RASR定义了被MPU_RNR寄存器指定的MPU区域的区域大小和存储器属性,并且使能区域和子区域。
MPU_RASR寄存器是可以字或半字访问的:
最高有效半字保存了区域属性
最低有效半字保存了区域大小和区域、子区域的使能。
位分配如下:
XN,指令存取禁止位:
0=指令取出使能
1=指令取出禁止
AP,访问允许字段,参考表4-33
S,可分享位
C,可缓存位
B,可缓冲位
SDR,子区域禁止位。
在这个字段中的每一位:
0=相应的子区域被使能
1=相应的子区域被禁止
参考在4-26页的子区域以获得更多的信息。
SIZE,指定MPU保护区域的大小。
被允许的最小的值是7。
参考SIZE字段值以获得更多的信息。
ENABLE,区域使能位。
关于访问许可的信息,参考MPU访问允许属性。
SIZE字段值
SIZE字段定义了被MPU_RNR寄存器指定的MPU存储器区域的大小,如下所示:
(区域字节数=2exp(SIZE+1
最小的被允许的区域的大小是256B,对应于值为7的SIZE。
表4-31给出了SIZE值的示例,列出了与之对应的区域大小和在MPU_RBAR寄存器里的N值。
(SIZE值越大,区域大小越大,基地址范围越小,N值越大
MPU访问允许属性
这一节描述了MPU的访问允许属性。
MPU_RASR寄存器的访问允许位C,B,S,AP,和XN控制对相应的内存区域的访问。
如果一个访问被指向一个没有所需许可的存储器的位置,MPU就会产生一个允许错误。
表4-32出示了C,B和S访问允许位的编码。
(C,B,S描述了内存类型,可分享性,其他属性如写直通,写返回,写分配
表4-33出示了定义特权和非特权软件的访问允许的AP编码。
(共8种状态,有R和W两种属性
MPU访问允许错误
当一个访问违反了MPU的属性,处理器将产生一个硬件错误。
更新一个MPU区域
对一个MPU区域更新属性,可以更新MPU_RNR,MPU_RBAR和MPU_RASR
配置一个区域的简单代码:
;R1=区域编号
;R2=大小/使能
;R3=属性
;R4=地址
LDRR0,=MPU_RNR;0xE000ED98,MPU区域编号寄存器
STRR1,[R0,#0X0];区域编号
STRR4,[R0,#0X4];区域基地址
STRHR2,[R0,#0X8];区域大小和使能
STRHR3,[R0,#0XA];区域属性
软件必须使用内存屏障指令:
在MPU设置之前,如果有未解决的,并且可能被随后的MPU设置所影响的内存传
输,例如被缓存的写。
在MPU设置之后,如果软件包含必须使用新的MPU设置的内存传输。
然而,假如MPU设置程序的执行通过进入一个异常处理程序来开始,或者之后紧跟着一个异常返回,那么指令同步屏障指令是不需要的,因为异常进入和返回机制造成了内存屏障现象。
例如,假如你想要所有的内存访问影响在程序序列之后立刻展现出来,可以使用一个DSB指令和一个ISB指令。
DSB指令在改变MPU设置之后被需要,例如在环境切换的末尾。
在编程MPU区域的代码被使用分支和调用指令进入时,需要ISB。
假如通过一个异常的返回,或者异常的开始而进入编程序列,那么你将不需要ISB指令。
子区域
区域被分割为8个相等大小的子区域。
设置MPU_RASR寄存器的SRD字段中的相应的位可以禁止子区域,参考MPU区域属性和大小寄存器。
SRD的最低位控制第一个子区域,最高位控制最后一个子区域。
禁止一个子区域意味着与被禁止的范围重叠的区域取代了存储器映射的匹配。
假如没有另一个被使能的区域与被禁止的子区域重叠,MPU将产生一个错误。
SRD使用的例子
两个有相同的基地址的区域重叠。
区域一是128KB,区域二是512KB。
为了确保来自于区域一的属性应用到到第一个128KB区域,对于区域二设置其SDR字段为b00000011以禁止首先的两个子区域,如下图表所示。
(两个有相同基地址的区域,区域一是全部使能的,区域二前两个子区域是禁止的,后六个是使能的
MPU使用线索和技巧
为了避免不期望的现象,在更新一个中断处理程序可以访问的区域的属性之前,禁止中断是一个必要的选择。
确保软件使用相应尺寸的对齐的访问去访问MPU寄存器,除了MPU_RASR寄存器,它必须使用字对齐的访问到MPU寄存器。
在设置MPU时,如果MPU在以前已经被编程了,禁止不用的区域以阻值新的MPU设置影响任何以前的区域设置。
对一个微控制器配置MPU
通常,一个微控制器你系统仅仅有一个单一的处理器并且没有cache缓存。
在这样一个系统中,编程MPU如下所示:
(Flash存储器,内部SRAM,外部SRAM,外设,这些存储器区域对应的C,B,S位的设置,
以及与之对应的内存类型和属性)在大多数的微控制器实现上,可分享和缓存方案的属性不影响系统表现。
然而,对MPU区域使用这些设置可以使应用程序代码更轻便。
根据具体的情形给出这个取舍。
在特殊的系统里,例如一个多处理器设计或者带有一个另行的DMA功能的设计,可分享属性将是重要的。
对于这些情况,参考存储器设备供应商的意见。
2015/6/320:
07:
39sx6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CotexM0 MPU章节中文翻译 MPU 章节 中文翻译