ARM体系结构与编程学习(七)

本文深入探讨了ARM存储系统,包括MMU的内存映射机制,以及如何利用CP15协处理器进行存储管理。详细阐述了CP15的16个寄存器,如访问权限、Cache控制、TLB管理和上下文切换等功能,提供了访问这些寄存器的指令格式。
摘要由CSDN通过智能技术生成

第五章 ARM存储系统

 

5.1 arm存储系统概述

mmu 使用内存映射机制实现虚拟空间到物理空间的映射。通常嵌入式系统的程序放在ROM/FLASH中,这样系统断电后程序能够保存。但是

         通常ROM/FLASH与SDRAM相比,速度要慢很多,而且嵌入式系统中通常把异常中断向量表放在RAM,利用内存映射机制可以解决这

         种问题。在系统加电时,将ROM/FLASH映射为地址0,这样可以进行一些初始化处理。当这些程序处理完成后将SDRAM映射为地址0

         并把系统程序加载到SDRAM中运行。

 

5.2  arm中用于存储管理的协处理器CP15

arm存储系统通常是通过系统控制协处理器CP15完成的。

CP15

CP15可以包含16个32位的寄存器,其编号为0到15.实际上某些编号的寄存器可能对应多个物理寄存器,在指令中指定特定的标志位来区分这些物理寄存器。以下将详细介绍CP15中的寄存器:

1、寄存器的访问类型(只读/只写/可读可写)

2、各种指令操作对于寄存器的作用

3、寄存器是否对应多个物理寄存器

4、寄存器的具体作用

 

5.2.1  CP15中的寄存器

访问CP15寄存器的指令
访问CP15寄存器指令的编码格式及语法说明如下:

31  28

27  24

23  21

20

19  16

15  12

11  8

7  5

4

3  0

cond

1 1 1 0

opcode_1

L

cr n

rd

1 1 1 1

opcode_2

1

crm

说明:
<opcode_1>:协处理器行为操作码,对于CP15来说,<opcode_1>永远为0b000,否则结果未知。
<rd>
:不能是r15/pc,否则,结果未知。
<crn>
:作为目标寄存器的协处理器寄存器,编号为C0~C15
<crm>
:附加的目标寄存器或源操作数寄存器,如果不需要设置附加信息,将crm设置为c0,否则结果未知。
<opcode_2>
:提供附加信息比如寄存器的版本号或者访问类型,用于区分同一个编号的不同物理寄存器,可以省略<opcode_2>或者将其设置为0,否则结果未知。

   

   

语法格式

mcr

ARM处理器的寄存器中的数据写到CP15中的寄存器中

mcr{<cond>} p15, <opcode_1>, <rd>, <crn>, <crm>, {<opcode_2>}

mrc

CP15中的寄存器中的数据读到ARM处理器的寄存器中

mcr{<cond>} p15, <opcode_1>, <rd>, <crn>, <crm>, {<opcode_2>}

4.1.2  CP15寄存器介绍
CP15的寄存器列表如表4-1所示。
4-1  ARM处理器中CP15协处理器的寄存器

寄存器编号

基本作用

MMU中的作用

PU中的作用

0

ID编码(只读)

ID编码和cache类型

 

1

控制位(可读写)

各种控制位

 

2

存储保护和控制

地址转换表基地址

Cachability的控制位

3

存储保护和控制

域访问控制位

Bufferablity控制位

4

存储保护和控制

保留

保留

5

存储保护和控制

内存失效状态

访问权限控制位

6

存储保护和控制

内存失效地址

保护区域控制

7

高速缓存和写缓存

高速缓存和写缓存控制

 

8

存储保护和控制

TLB控制

保留

9

高速缓存和写缓存

高速缓存锁定

 

10

存储保护和控制

TLB锁定

保留

11

保留

 

 

12

保留

 

 

13

进程标识符

进程标识符

 

14

保留

 

 

15

因不同设计而异

因不同设计而异

因不同设计而异

·      CP15的寄存器C0
CP15中寄存器C0对应两个标识符寄存器,由访问CP15中的寄存器指令中的<opcode_2>指定要访问哪个具体物理寄存器,<opcode_2>与两个标识符寄存器的对应关系如下所示:

opcode_2编码

对应的标识符号寄存器

0b000

主标识符寄存器

0b001

cache类型标识符寄存器

其他

保留

1)主标识符寄存器
访问主标识符寄存器的指令格式如下所示:
mrc  p15, 0, r0, c0, c0, 0                
;将主标识符寄存器C0,0的值读到r0
ARM

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值