zhaoxiao2 发表于 2016-8-2 16:14:39

ARM协处理器CP15寄存器详解

mrc p15,0,r0,c1,c0,0 这句话的意思应该是读协处理器中的寄存器数据到ARM处理器的r0里面。应该是ARM访问MMU,一般cp15就是MMU。
MCR{cond}   coproc,opcode1,Rd,CRn,CRm,opcode2
MRC {cond}    coproc,opcode1,Rd,CRn,CRm,opcode2

MRC用于读取协处理器中的寄存器的数据到ARM处理器的寄存器里面。
coproc         指令操作的协处理器名.标准名为pn,n为0~15
opcode1   协处理器的特定操作码. 对于CP15寄存器来说,opcode1永远为0,不为0时,操作结果不可预知
Rd            作为目标寄存器的协处理器寄存器.
CRn            存放第1个操作数的协处理器寄存器.
CRm         存放第2个操作数的协处理器寄存器.(用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为C0)
opcode2    可选的协处理器特定操作码.   (用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为0)


在基于ARM的嵌入式系统中,存储系统通常是通过系统控制协处理器CP15完成的。
CP15可以包含16个32位的寄存器,其编号为0-15。实际上对于某些编号的寄存器可能对应有多个物理寄存器。在指令中指定特定的标志位来区分这些物理寄存器。有些类似于ARM寄存器中,处于不同的处理器模式时,ARM某些寄存器可能不同。
CP15 的寄存器列表如表所示:寄存器编号基本作用在 MMU 中的作用在 PU 中的作用0ID 编码(只读)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 编码对应的标识符号寄存器0b000主标识符寄存器0b001cache类型标识符寄存器其 他保留

(1)主标识符寄存器
指令如下:
MRC    P15,0,R0,C0,C0,0       #将主标示符寄存器的内容读到AMR寄存器R0中
主标示符的编码格式对于不同的ARM处理器版本有所不同。
对于AMR7之后的处理器,其主标示符编码格式如下 : 30                2423                2019                        1615               43                     0由生产商确定产品子编号ARM 体系版本号产品主编号处理器版本号
各部分的编码详细含义如下表所示:
位                   说   明位 生产商定义的处理器版本号位 生产商定义的产品主编号其中最高 4 位即位 可能的取值为0x0~0x7 但不能是 0x0 或 0x7因为:0x0表示 ARM7之前的处理器0x7 表示ARM7处理器位 ARM 体系的版本号,可能的取值如 下:0x1   ARM 体系版本 40x2   ARM 体系版本 4T0x3   ARM 体系版本 50x4   ARM 体系版本 5T0x5   ARM 体系版本 5TE其他   由 ARM 公司保留将来使用位 生产商定义的产品子编号。当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不 同的高速缓存的大小等位 生产厂商的编号,现在已经定义的有以下值:0x41=AARM 公司0x44=DDigitalEquipment 公司0x69=I   intel 公司


(2)cache类型标识符寄存器
指令如下:
MRC    P15,0,R0,C0,C0,1       #将cache类型标识符寄存器的内容读到AMR寄存器R0中

ARM 处理器中 cache 类型标识符寄存器的编码格式如下所示:31      2928         252423                              1211                              0000属性字段 S   数据 cache 相关属性   指令cache 相关属性

各部分的编码详细含义如下表所示:位含义位 主要用于定义对于写回类型的cache的一些属性位 定义系统中的数据 cache 和指令 cache 是分开的还是统一的:0   系统的数据 cache 和指令 cache 是统一的;1    系统的数据 cache 和指令 cache 是分开的位 定义数据 cache 的相关属性如果位 为 0 ,本字段定义整个cache 的属性位 定义指令 cache 的相关属性如果位 为 0 ,本字段定义整个cache 的属性

控制字段位 : 25] 的含义
主要用于定义对于写回类型的cache的一些属性cache 类型标识符寄存器的控制字段位 : 25]:编   码cache 类型cache 内容清除方法cache 内容锁定方法0b0000写通类型不需要内容清除不支持内容锁定0b0001写回类型数据块读取不支持内容锁定0b0010写回类型由寄存器 C7 定义不支持内容锁定0b0110写回类型由寄存器 C7 定义支持格式 A0b0111写回类型由寄存器 C7 定义支持格式 B·      控制字段位 : 12] 及控制字段位 : 0] 含义:12]用于定义数据cache的属性,用于定义指令cache的属性编码格式如下:11      98                65                        321          0000cache 容量cache 相联特性M块大小其中bits含义如下:编   码cache 块大小0b002 个 字( 8 字节)0b014 个 字( 16 字节)0b108 个 字( 32 字节)0b1116 个 字( 64 字节)其中bits含义如下:编   码M=0 时含义M=1 时含义0b0001 路 相联(直接映射)没有 cache0b0012 路 相联3 路 相联0b0104 路 相联6 路 相联0b0118 路 相联12 路 相联0b10016 路 相联24 路 相联0b10132 路 相联48 路 相联0b11064 路 相联96 路 相联0b111128 路相联192 路相联其中bits含义如下:编   码M=0 时含义M=1时含义0b0000.5KB0.75 KB0b0011 KB1.5 KB0b0102 KB3 KB0b0114 KB6 KB0b1008 KB12 KB0b10116 KB24 KB0b11032 KB48 KB0b11164 KB96 KB (二)CP15 的寄存器 C1CP15中的寄存器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 :禁止 MMU 或者 PU 1 :使能 MMU 或者 PU如果系统中没有MMU及PU,读取时该位返回0,写入时忽略该位A(bit)0 :禁止地址对齐检查1 :使能地址对齐检查C(bit)当数据cache和指令cache分开时,本控制位禁止/使能数据cache。当数据cache和指令cache统一时,该控制位禁止/使能整个cache。0 :禁止数据 / 整个 cache 1 :使能数据 / 整个 cache如果系统中不含cache,读取时该位返回0.写入时忽略当系统中不能禁止cache 时,读取时返回1.写入时忽略W(bit)0 :禁止写缓冲1 :使能写缓冲如果系统中不含写缓冲时,读取时该位返回0.写入时忽略当系统中不能禁止写缓冲时,读取时返回1.写入时忽略P(bit)对于向前兼容26位地址的ARM处理器,本控制位控制PROG32控制信号0 :异常中断处理程序进入 32 位地址模式1 :异常中断处理程序进入26 位地址模式如果本系统中不支持向前兼容26位地址,读取该位时返回1,写入时忽略D(bit)对于向前兼容26位地址的ARM处理器,本控制位控制DATA32控制信号0 :禁止 26 位地址异常检查1 :使能 26 位地址异常检查如果本系统中不支持向前兼容26位地址,读取该位时返回1,写入时忽略L(bit)对于ARMv3及以前的版本,本控制位可以控制处理器的中止模型0 :选择早期中止模型1 :选择后期中止模型B(bit)对于存储系统同时支持big-endian和little-endian的ARM系统,本控制位配置系统的存储模式0 : littleendian1 : big endian对于只支持little-endian的系统,读取时该位返回0,写入时忽略对于只支持big-endian的系统,读取时该位返回1,写入时忽略S(bit)在基于 MMU 的存储系统中,本位用作系统保护R(bit)在基于 MMU 的存储系统中,本位用作 ROM 保护F(bit)由生产商定义Z(bit)对于支持跳转预测的ARM系统,本控制位禁止/使能跳转预测功能0 :禁止跳转预测功能 1 :使能跳转预测功能对于不支持跳转预测的ARM系统,读取该位时返回0,写入时忽略I(bit)当数据cache和指令cache是分开的,本控制位禁止/使能指令cache0 :禁止指令 cache1 :使能指令 cache如果系统中使用统一的指令cache和数据cache或者系统中不含cache,读取该位时返回0,写入时忽略。当系统中的指令cache不能禁止时,读取时该位返回1,写入时忽略V(bit)对于支持高端异常向量表的系统,本控制位控制向量表的位置0 :选择低端异常中断向量 0x0~0x1c 1 :选择高端异常中断向量0xffff0000~0xffff001c对于不支持高端异常向量表的系统,读取时该位返回0,写入时忽略PR(bit)如果系统中的cache的淘汰算法可以选择的话,本控制位选择淘汰算法0 :常规的 cache 淘汰算法,如随机淘汰 1 :预测性淘汰算法,如round-robin 淘汰算法如果系统中cache的淘汰算法不可选择,写入该位时忽略。读取该位时,根据其淘汰算法是否可以比较简单地预测最坏情况返回0或者1L4(bit)对于ARM版本5及以上的版本,本控制位可以提供兼容以前的ARM版本的功能0 :保持 ARMv5 以上版本的正常功能1 :将 ARMv5 以上版本与以前版本处理器 兼容,不根据跳转地址的 bit 进行 ARM 指令和 Thumb 状态切换: bit 等于 0 表示 ARM 指令,等于 1 表示 Thumb 指令Bits)这些位保留将来使用,应为UNP/SBZP(三)CP15 的寄存器 C2C2寄存器的别名:Translationtable base (TTB) register C2寄存器用来保存页表的基地址,即一级映射描述符表的基地址。其编码格如下所示:31                                                                                                   0                                    一级映射描述符表的基地址(物理地址) (四)CP15 的寄存器 C3CP15 中的寄存器 C3 定义了 ARM 处理器的 16 个域的访问权限。31                                                                                                   0D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0 在 CP15的C3寄存器中,划分了 16个域,每个区域由两位构成,这两位说明了当前内存的检查权限:00:当前级别下,该内存区域不允许被访问,任何的访问都会引起一个domain fault,这时 AP位无效01:当前级别下,该内存区域的访问必须配合该内存区域的段描述符中AP位进行权检查
10:保留状态(我们最好不要填写该值,以免引起不能确定的问题)
11:当前级别下,对该内存区域的访问都不进行权限检查。 这时 AP位无效 所以只有当相应域的编码为 01 时,才会根据AP位 和协处理器CP15中的C1寄存器的R,S位进行权限检查 (五)CP15 的寄存器 C5CP15 中的寄存器 C5 是失效状态寄存器,分为指令状态失效和数据状态失效。MRC p15, 0, ,c5, c0, 0   访问数据失效状态寄存器MRC p15, 0, ,c5, c0, 1   访问指令状态失效寄存器编码格式如下所示:31            987    43      0UNP/SBZP0域标识状态标识

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

状态标识 bit 表示放引起存储访问失效的存储访问类型,该字段含义如下表所示(优先级由上到下递减)。引起访问失效的原因状态标识域标识C6终 端异常( Terminal Exception )0b0010无 效生 产商定义中 断向量访问异常( Vector Exception)0b0000无 效有 效地 址对齐0b00x1无 效有 效一 级页表访问失效0b1100无 效有 效二 级页表访问失效0b1110有 效有 效基 于段的地址变换失效0b0101无 效有 效基 于页的地址变换失效0b0111有 效有 效基 于段的存储访问中域控制失效0b1001有 效有 效基 于页的存储访问中域控制失效0b1101有 效有 效基 于段的存储访问中访问权限控制失效0b1111有 效有 效基 于页的存储访问中访问权限控制失效0b0100有 效有 效基 于段的 cache 预 取时外部存储系统失效0b0110有 效有 效基 于页的 cache 预 取时外部存储系统失效0b1000有 效有 效基 于段的非 cache 预 取时外部存储系统失效0b1010有 效有 效

(六)CP15的寄存器C6CP15 中的寄存器 C6 是失效地址寄存器,其中保存了引起存储访问失效的地址,分为数据失效地址寄存器和指令失效地址寄存器MRC p15, 0, ,c6, c0, 0访问数据失效地址寄存器MRC p15, 0, ,c6, c0, 2访问指令失效地址寄存器编码格式如下所示:31                                                                                                      0                        失效地址(虚拟地址)

(七)CP15的寄存器C7CP15 的 C7 寄存器用来控制 cache 和写缓存,它是一个只写寄存器,读操作将产生不可预知的后果。访问 CP15 的 C7 寄存器的指令格式如下所示:mcr p15, 0, , , crm,               ; 、和的不同取值组合,实现不同功能 表中的数据是指Rd中的数据:file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png (八)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, 00使无效整个指令TLBMCR p15, 0, Rd, c8, c5, 1虚拟地址使无效指令TLB中的单个地址变换条目MCR p15, 0, Rd, c8, c6, 00使无效整个数据TLBMCR p15, 0, Rd, c8, c6, 1虚拟地址使无效数据TLB中的单个地址变换条目MCR p15, 0, , c8, c7, 00使无效整个数据和指令TLBMCR p15, 0, , c8, c7, 1虚拟地址使无效数据和指令TLB中的单个地址变换条目

(九)CP15的寄存器C12CP15寄存器C12用来设置异常向量基地址,其编码格式如下所示:MCR p15, 0, ,c12, c0, 0               ;Rd中存放要修改的异常向量基地址31            54         0异常向量基地址Reserve注:只有ARM11和cortex-a 可以任意修改异常向量基地址。arm7,ARM9,ARM10只可以在0地址或0xffff0000中 (十)CP15的寄存器C13CP15中的寄存器C13用于快速上下文切换。其编码格式如下所示。file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png访问寄存器C13的指令格式如下所示。MCR         p15,0,,,c0,0MRC         P15,0,,,c0,0其中, 在读操作时,结果中位::25]返回PID,其他位 的数值是不可以预知的。写操作将设置PID的值。      当PID的值为0时,MVA = VA|(0(PID)<<25),MVA=VA,相当于禁止了FCSE。系统复位后PID即为0.      当PID的值不为0时,相当于使能了FCSE。

cdl511 发表于 2016-8-9 08:08:52

学习了,谢谢。
页: [1]
查看完整版本: ARM协处理器CP15寄存器详解