• ARM协处理器CP15寄存器详解【转】


    本文转载i自;https://blog.csdn.net/gameit/article/details/13169405

    用于系统存储管理的协处理器CP15
     
    MCR{cond}     coproc,opcode1,Rd,CRn,CRm,opcode2
    MRC {cond}    coproc,opcode1,Rd,CRn,CRm,opcode2
    coproc         指令操作的协处理器名.标准名为pn,n,为0~15 
    opcode1      协处理器的特定操作码. 对于CP15寄存器来说,opcode1永远为0,不为0时,操作结果不可预知
    CRd             作为目标寄存器的协处理器寄存器. 
    CRn             存放第1个操作数的协处理器寄存器. 
    CRm            存放第2个操作数的协处理器寄存器. (用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为C0)
    opcode2     可选的协处理器特定操作码.                (用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为0)
     
    • 在基于ARM的嵌入式系统中,存储系统通常是通过系统控制协处理器CP15完成的。
    • CP15可以包含16个32位的寄存器,其编号为0-15。实际上对于某些编号的寄存器可能对应有多个物理寄存器。在指令中指定特定的标志位来区分这些物理寄存器。有些类似于ARM寄存器中,处于不同的处理器模式时,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 中的寄存器指令中的 <opcode2> 指定要访问哪个具体物理寄存器, <opcode2> 与两个标识符寄存器的对应关系如下所示:

    opcode2 编码

    对应的标识符号寄存器

    0b000

    主标识符寄存器

    0b001

    cache类型标识符寄存器

    其 他

    保留

     
    (1)主标识符寄存器
    指令如下:
    MRC    P15,0,R0,C0,C0,0       #将主标示符寄存器的内容读到AMR寄存器R0中
    主标示符的编码格式对于不同的ARM处理器版本有所不同。

    对于AMR7之后的处理器,其主标示符编码格式如下 : 

    30                24

    23                20

    19                          16

    15                 4

    3                       0

    由生产商确定

    产品子编号

    ARM 体系版本号

    产品主编号

    处理器版本号

    各部分的编码详细含义如下表所示:

                       说     明

    位 [3: 0]

    生产商定义的处理器版本号

    位 [15: 4]

    生产商定义的产品主编号

    其中最高 4 位即位 [15:12] 可能的取值为0x0~0x7 但不能是 0x0 或 0x7

    因为:

    0x0表示 ARM7之前的处理器

    0x7 表示ARM7处理器

    位 [19: 16]

    ARM 体系的版本号,可能的取值如 下:

    0x1   ARM 体系版本 4

    0x2   ARM 体系版本 4T

    0x3   ARM 体系版本 5

    0x4   ARM 体系版本 5T

    0x5   ARM 体系版本 5TE

    其他   由 ARM 公司保留将来使用

    位 [23: 20]

    生产商定义的产品子编号。当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不 同的高速缓存的大小等

    位 [31: 24]

    生产厂商的编号,现在已经定义的有以下值:

    0x41  =A  ARM 公司

    0x44  =D  Digital Equipment 公司

    0x69  =I   intel 公司

     
    (2)cache类型标识符寄存器
    指令如下:
    MRC    P15,0,R0,C0,C0,1       #将cache类型标识符寄存器的内容读到AMR寄存器R0中
     
    ARM 处理器中 cache 类型标识符寄存器的编码格式如下所示:

    31      29

    28           25

    24

    23                                12

    11                                0

      000

      属性字段

     S

       数据 cache 相关属性

       指令cache 相关属性

    各部分的编码详细含义如下表所示:

    含义

    位 [28: 25]

    主要用于定义对于写回类型的cache的一些属性

    位 [24]

    定义系统中的数据 cache 和指令 cache 是分开的还是统一的:

    0   系统的数据 cache 和指令 cache 是统一的;

    1    系统的数据 cache 和指令 cache 是分开的

    位 [23: 12]

    定义数据 cache 的相关属性

    如果位 [24] 为 0 ,本字段定义整个cache 的属性

    位 [31: 24]

    定义指令 cache 的相关属性

    如果位 [24] 为 0 ,本字段定义整个cache 的属性

    •  控制字段位 [28 : 25] 的含义
    主要用于定义对于写回类型的cache的一些属性

    cache 类型标识符寄存器的控制字段位 [28 : 25]:

    编     码

    cache 类型

    cache 内容清除方法

    cache 内容锁定方法

    0b0000

    写通类型

    不需要内容清除

    不支持内容锁定

    0b0001

    写回类型

    数据块读取

    不支持内容锁定

    0b0010

    写回类型

    由寄存器 C7 定义

    不支持内容锁定

    0b0110

    写回类型

    由寄存器 C7 定义

    支持格式 A

    0b0111

    写回类型

    由寄存器 C7 定义

    支持格式 B

    • 控制字段位 [23 : 12] 及控制字段位 [11 : 0] 含义
    [23:12]用于定义数据cache的属性,[11: 0]用于定义指令cache的属性
    编码格式如下:

    11      9

    8                6

    5                        3

    2

    1          0

    000

    cache 容量

    cache 相联特性

    M

    块大小

    其中bits[1:0]含义如下:

    编     码

    cache 块大小

    0b00

    2 个 字( 8 字节)

    0b01

    4 个 字( 16 字节)

    0b10

    8 个 字( 32 字节)

    0b11

    16 个 字( 64 字节)

    其中bits[5:3]含义如下:

    编     码

    M=0 时含义

    M=1 时含义

    0b000

    1 路 相联(直接映射)

    没有 cache

    0b001

    2 路 相联

    3 路 相联

    0b010

    4 路 相联

    6 路 相联

    0b011

    8 路 相联

    12 路 相联

    0b100

    16 路 相联

    24 路 相联

    0b101

    32 路 相联

    48 路 相联

    0b110

    64 路 相联

    96 路 相联

    0b111

    128 路相联

    192 路相联

    其中bits[8:6]含义如下:

    编     码

    M=0 时含义

    M=1时含义

    0b000

    0.5KB

    0.75 KB

    0b001

    1 KB

    1.5 KB

    0b010

    2 KB

    3 KB

    0b011

    4 KB

    6 KB

    0b100

    8 KB

    12 KB

    0b101

    16 KB

    24 KB

    0b110

    32 KB

    48 KB

    0b111

    64 KB

    96 KB



    (二)CP15 的寄存器 C1
    CP15中的寄存器C1是一个控制寄存器,它包括以下控制功能:
    • 禁止或使能MMU以及其他与存储系统相关的功能
    • 配置存储系统以及ARM处理器中的相关部分的工作
    指令如下:
    mrc p15, 0, r0, c1, c0{, 0}     ;将 CP15 的寄存器 C1 的值读到 r0 中
    mcr p15, 0, r0, c1, c0{, 0}     ;将 r0 的值写到 CP15 的寄存器 C1 中
     
    CP15 中的寄存器 C1 的编码格式及含义说明如下:

    C1中的控制位

    含义

    M(bit[0])

    0 :禁止 MMU 或者 PU 

    1 :使能 MMU 或者 PU

    如果系统中没有MMU及PU,读取时该位返回0,写入时忽略该位

    A(bit[1])

    0 :禁止地址对齐检查

    1 :使能地址对齐检查

    C(bit[2])

    当数据cache和指令cache分开时,本控制位禁止/使能数据cache。当数据cache和指令cache统一时,该控制位禁止/使能整个cache。

    0 :禁止数据 / 整个 cache 

    1 :使能数据 / 整个 cache

    如果系统中不含cache,读取时该位返回0.写入时忽略

    当系统中不能禁止cache 时,读取时返回1.写入时忽略

    W(bit[3])

    0 :禁止写缓冲

    1 :使能写缓冲

    如果系统中不含写缓冲时,读取时该位返回0.写入时忽略

    当系统中不能禁止写缓冲时,读取时返回1.写入时忽略

    P(bit[4])

    对于向前兼容26位地址的ARM处理器,本控制位控制PROG32控制信号

    0 :异常中断处理程序进入 32 位地址模式

    1 :异常中断处理程序进入26 位地址模式

    如果本系统中不支持向前兼容26位地址,读取该位时返回1,写入时忽略

    D(bit[5])

    对于向前兼容26位地址的ARM处理器,本控制位控制DATA32控制信号

    0 :禁止 26 位地址异常检查

    1 :使能 26 位地址异常检查

    如果本系统中不支持向前兼容26位地址,读取该位时返回1,写入时忽略

    L(bit[6])

    对于ARMv3及以前的版本,本控制位可以控制处理器的中止模型

    0 :选择早期中止模型

    1 :选择后期中止模型

    B(bit[7])

    对于存储系统同时支持big-endian和little-endian的ARM系统,本控制位配置系统的存储模式

    0 : little endian  

    1 : big endian

    对于只支持little-endian的系统,读取时该位返回0,写入时忽略

    对于只支持big-endian的系统,读取时该位返回1,写入时忽略

    S(bit[8])

    在基于 MMU 的存储系统中,本位用作系统保护

    R(bit[9])

    在基于 MMU 的存储系统中,本位用作 ROM 保护

    F(bit[10])

    由生产商定义

    Z(bit[11])

    对于支持跳转预测的ARM系统,本控制位禁止/使能跳转预测功能

    0 :禁止跳转预测功能 

    1 :使能跳转预测功能

    对于不支持跳转预测的ARM系统,读取该位时返回0,写入时忽略

    I(bit[12])

    当数据cache和指令cache是分开的,本控制位禁止/使能指令cache

    0 :禁止指令 cache  

    1 :使能指令 cache

    如果系统中使用统一的指令cache和数据cache或者系统中不含cache,读取该位时返回0,写入时忽略。当系统中的指令cache不能禁止时,读取时该位返回1,写入时忽略

    V(bit[13])

    对于支持高端异常向量表的系统,本控制位控制向量表的位置

    0 :选择低端异常中断向量 0x0~0x1c 

    1 :选择高端异常中断向量0xffff0000~ 0xffff001c

    对于不支持高端异常向量表的系统,读取时该位返回0,写入时忽略

    PR(bit[14])

    如果系统中的cache的淘汰算法可以选择的话,本控制位选择淘汰算法

    0 :常规的 cache 淘汰算法,如随机淘汰 

    1 :预测性淘汰算法,如round-robin 淘汰算法

    如果系统中cache的淘汰算法不可选择,写入该位时忽略。读取该位时,根据其淘汰算法是否可以比较简单地预测最坏情况返回0或者1

    L4(bit[15])

    对于ARM版本5及以上的版本,本控制位可以提供兼容以前的ARM版本的功能

    0 :保持 ARMv5 以上版本的正常功能

    1 :将 ARMv5 以上版本与以前版本处理器 兼容,不根据跳转地址的 bit[0] 进行 ARM 指令和 Thumb 状态切换: bit[0] 等于 0 表示 ARM 指令,等于 1 表示 Thumb 指令

    Bits[31:16])

    这些位保留将来使用,应为UNP/SBZP

      

    (三)CP15 的寄存器 C2

    C2寄存器的别名:Translation table base (TTB) register

     C2寄存器用来保存页表的基地址,即一级映射描述符表的基地址。其编码格如下所示:

    31                                                                                                     0

                                        一级映射描述符表的基地址(物理地址)

     
    (四)CP15 的寄存器 C3

    CP15 中的寄存器 C3 定义了 ARM 处理器的 16 个域的访问权限。

    31                                                                                                     0

    D15

    D14

    D13

    D12

    D11

    D10

    D9

    D8

    D7

    D6

    D5

    D4

    D3

    D2

    D1

    D0

     
    在 CP15的C3寄存器中,划分了 16个域,每个区域由两位构成,这两位说明了当前内存的检查权限:
    00:当前级别下,该内存区域不允许被访问,任何的访问都会引起一个domain fault,这时 AP位无效
    01:当前级别下,该内存区域的访问必须配合该内存区域的段描述符中AP位进行权检查
    10:保留状态(我们最好不要填写该值,以免引起不能确定的问题)
    11:当前级别下,对该内存区域的访问都不进行权限检查。 这时 AP位无效 
     
    所以只有当相应域的编码为 01 时,才会根据  AP位 和协处理器CP15中的C1寄存器的R,S位进行权限检查
    (五)CP15 的寄存器 C5
    CP15 中的寄存器 C5 是失效状态寄存器,分为指令状态失效和数据状态失效。
    MRC p15, 0, <Rd>, c5, c0, 0   访问数据失效状态寄存器
    MRC p15, 0, <Rd>, c5, c0, 1   访问指令状态失效寄存器
    编码格式如下所示:

    31            9

    8

    7    4

    3      0

    UNP/SBZP

    0

    域标识

    状态标识

    
    

    其中,域标识bit[7:4]表示存放引起存储访问失效的存储访问所属的域。

    状态标识 bit[3:0] 表示放引起存储访问失效的存储访问类型,该字段含义如下表所示(优先级由上到下递减)。

    引起访问失效的原因

    状态标识

    域标识

    C6

    终 端异常( Terminal Exception )

    0b0010

    无 效

    生 产商定义

    中 断向量访问异常( Vector Exception)

    0b0000

    无 效

    有 效

    地 址对齐

    0b00x1

    无 效

    有 效

    一 级页表访问失效

    0b1100

    无 效

    有 效

    二 级页表访问失效

    0b1110

    有 效

    有 效

    基 于段的地址变换失效

    0b0101

    无 效

    有 效

    基 于页的地址变换失效

    0b0111

    有 效

    有 效

    基 于段的存储访问中域控制失效

    0b1001

    有 效

    有 效

    基 于页的存储访问中域控制失效

    0b1101

    有 效

    有 效

    基 于段的存储访问中访问权限控制失效

    0b1111

    有 效

    有 效

    基 于页的存储访问中访问权限控制失效

    0b0100

    有 效

    有 效

    基 于段的 cache 预 取时外部存储系统失效

    0b0110

    有 效

    有 效

    基 于页的 cache 预 取时外部存储系统失效

    0b1000

    有 效

    有 效

    基 于段的非 cache 预 取时外部存储系统失效

    0b1010

    有 效

    有 效

     
    (六)CP15的寄存器C6

    CP15 中的寄存器 C6 是失效地址寄存器,其中保存了引起存储访问失效的地址,分为数据失效地址寄存器和指令失效地址寄存器

    MRC p15, 0, <Rd>, c6, c0, 0  访问数据失效地址寄存器
    MRC p15, 0, <Rd>, c6, c0, 2  访问指令失效地址寄存器

    编码格式如下所示:

    31                                                                                                      0

                            失效地址(虚拟地址)

     
    (七)CP15的寄存器C7
    CP15 的 C7 寄存器用来控制 cache 和写缓存,它是一个只写寄存器,读操作将产生不可预知的后果。
    访问 CP15 的 C7 寄存器的指令格式如下所示:
    mcr p15, 0, <rd>, <c7>, crm, <opcode_2>               ;<rd> 、 <crm> 和 <opcode_2> 的不同取值组合,实现不同功能
     
    表中的数据是指Rd中的数据:
     
    (八)CP15的寄存器C8

        系统协处理器CP15的寄存器C8就是清除TLB内容的相关操作。它是一个只写的寄存器。

            MCR    p15,0,Rd,c8,CRm,opcode_2

            Rd中为要写入C8寄存器的内容,CRm和opcode_2的不同组合决定指令执行的不同操作。

    指令

    Rd

    含义

    MCR p15, 0, Rd, c8, c5, 0

    0

    使无效整个指令TLB

    MCR p15, 0, Rd, c8, c5, 1

    虚拟地址

    使无效指令TLB中的单个地址变换条目

    MCR p15, 0, Rd, c8, c6, 0

    0

    使无效整个数据TLB

    MCR p15, 0, Rd, c8, c6, 1

    虚拟地址

    使无效数据TLB中的单个地址变换条目

    MCR p15, 0, <Rd>, c8, c7, 0

    0

    使无效整个数据和指令TLB

    MCR p15, 0, <Rd>, c8, c7, 1

    虚拟地址

    使无效数据和指令TLB中的单个地址变换条目

     
     
    (九)CP15的寄存器C12
    CP15寄存器C12用来设置异常向量基地址,其编码格式如下所示:
    MCR p15, 0, <Rd>, c12, c0, 0                 ;Rd中存放要修改的异常向量基地址

    31              5

    4         0

    异常向量基地址

    Reserve

    注:只有ARM11和cortex-a 可以任意修改异常向量基地址。arm7,ARM9,ARM10只可以在0地址或0xffff0000中 
     
    (十)CP15的寄存器C13

    CP15中的寄存器C13用于快速上下文切换。其编码格式如下所示。

    访问寄存器C13的指令格式如下所示。

    MCR           p15, 0,<Rd>,<c13>,c0,0

    MRC           P15, 0,<Rd>,<c13>,c0,0

    其中, 在读操作时,结果中位[31::25]返回PID,其他位 的数值是不可以预知的。写操作将设置PID的值。

            当PID的值为0时,MVA = VA  |  (0(PID)<<25),MVA=VA,相当于禁止了FCSE。系统复位后PID即为0.

            当PID的值不为0时,相当于使能了FCSE。

  • 相关阅读:
    牛客练习赛81 B. 小 Q 与彼岸花(DP/Trie/树状数组/FWT/好题)
    HDU6570 Wave(DP)
    HDU6567 Cotree(树的重心/树形DP)
    P1712 [NOI2016] 区间(双指针/线段树)
    P1063 [NOIP2006 提高组] 能量项链(区间DP)
    Jquery
    Jquery
    Jquery
    Jquery 学习
    JS学习
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/9431993.html
Copyright © 2020-2023  润新知