ARMv7-A 那些事 - 5.CP15协处理器

By: Ailson Jack
Date: 2023.10.01
个人博客:http://www.only2fire.com/
本文在我博客的地址是:http://www.only2fire.com/archives/157.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。

微信公众号:嵌入式那些事

协处理器概述

ARM架构通过支持协处理器来扩展处理器的功能。ARM架构的处理器支持最多16个协处理器,通常称为CP0~CP15。下述的协处理器被ARM用于特殊用途:

  • CP15:提供系统控制功能,主要用于配置MMU、TLB和Cache等功能。
  • CP14:主要用于控制系统Debug功能。
  • CP10、CP11:两个协处理器一起提供了对浮点运算和向量操作的支持,这两个协处理器主要用于控制和配置浮点功能和高级SIMD指令扩展。
  • 其他协处理器被ARM保留用于将来使用。

本文主要说说CP15协处理器。

CP15协处理器总览

CP15是系统控制协处理器,主要用于对ARM处理器核心支持的许多特性功能进行配置。CP15协处理器支持16个32位主寄存器(primary register),命名为c0c15。c0c15主寄存器各自又有多个32位的物理寄存器(physical register)。CP15协处理器的大多数寄存器不能在USR模式下访问,只能在除USR模式外的其他模式下访问。下面列出c0~c15中比较常用的寄存器:

primary registerphysical register描述
c0MIDR主ID寄存器,用于记录版本信息
c0MPIDR多核处理器情况下,提供一种方法来唯一标识集群中的各个核心
c1SCTLR系统控制寄存器
c1ACTLR辅助控制寄存器
c1CPACR协处理器访问控制寄存器,控制访问除了CP14和CP15的协处理器
c1SCR安全配置寄存器,被TrustZone使用
c2、c3TTBR0一级转换页表基址寄存器0
c2、c3TTBR1一级转换页表基址寄存器1
c2、c3TTBCR页表转换控制寄存器
c5、c6DFSR数据异常(Data Fault)状态寄存器
c5、c6IFSR指令异常(Instruction Fault)状态寄存器
c5、c6DFAR数据异常(Data Fault)地址寄存器
c5、c6IFAR指令异常(Instruction Fault)地址寄存器
c7branch predictorcache和分支预测管理功能
c7barrier数据和指令屏障操作
c8TLBTLB操作
c9performance monitors性能监视器
c12VBAR提供非监视模式处理异常的异常基地址
c12MVBAR提供监视模式处理异常的异常基地址
c13CONTEXTIDR上下文ID寄存器
c15CBAR配置基址寄存器,为GIC和本地时钟类型外设提供基地址

在CP15协处理器中,c0~c15每个主处理器下面有多个物理寄存器,上述表格只列出了部分常用的物理寄存器。

协处理器操作指令

ARMv7-A体系结构的处理器提供了MRCMCR指令用于对协处理器进行读写操作。MRC指令用于将CP15协处理器中的寄存器数据读取到ARM通用寄存器中。MCR指令用于将ARM通用寄存器中的数据写入到CP15协处理器的寄存器中。

MRC

MRC指令的语法如下所示:

MRC{cond} coproc, opc1, Rt, CRn, CRm{, opc2}

cond为条件码。

coproc为协处理器名称,CP0CP15协处理器分别对应名称p0p15。

opc1为协处理器要执行的操作码,取指范围为0~7。

Rt为ARM通用寄存器,用于存储读取到的协处理器寄存器数据。

CRn为协处理器寄存器,对于CP15协处理器来说,CRn取值范围为c0~c15。

CRm为协处理器寄存器,对于CP15协处理器来说,通过CRmopc2一起来确定CRn对应的具体寄存器。

opc2为可选的协处理器执行操作码,取指范围为0~7,当不需要的时候要设置为0。

MRC指令使用示例如下:

# 读取主ID寄存器 MIDR 的数据到 R0 中.
MRC p15, 0, R0, c0, c0, 0

MCR

MCR指令的语法如下所示:

MCR{cond} coproc, opc1, Rt, CRn, CRm{, opc2}

cond为条件码。

coproc为协处理器名称,CP0CP15协处理器分别对应名称p0p15。

opc1为协处理器要执行的操作码,取指范围为0~7。

Rt为ARM通用寄存器,用于存储要写入到协处理器寄存器中的数据。

CRn为协处理器寄存器,对于CP15协处理器来说,CRn取值范围为c0~c15。

CRm为协处理器寄存器,对于CP15协处理器来说,通过CRmopc2一起来确定CRn对应的具体寄存器。

opc2为可选的协处理器执行操作码,取指范围为0~7,当不需要的时候要设置为0。

MCR指令使用示例如下:

# 将 R0 中的配置数据写入到 SCTLR
MCR p15, 0, R0, c1, c0, 0

CP15协处理器主寄存器组成

CP15协处理器有c0~c15总共16个主寄存器,在每个主寄存器下面,又有多个物理寄存器。下图总结了CP15协处理器的寄存器组织形式:

在这里插入图片描述
上图对于MRCMCR指令所要使用到的一些参数都标明了,对于想要访问CP15协处理器相关寄存器,只需要看图填写好参数就行了。下面具体列一下c0~c15各个主寄存器的组成。

CP15协处理器c0寄存器组成

主寄存器c0主要提供ID相关的功能,c0寄存器的组成如下图所示:

在这里插入图片描述

CP15协处理器c1寄存器组成

主寄存器c1主要提供系统控制相关的功能,c1寄存器的组成如下图所示:

在这里插入图片描述
在CP15协处理器的寄存器中,系统控制寄存器SCTLR是被访问的比较多的寄存器。对SCTLR寄存器的访问需要在PL1或者更高的特权等级。SCTLR寄存器的位关系如下图所示:

在这里插入图片描述

标志说明
30TEThumb异常使能,控制在异常发生时(包括reset),将会进入哪种指令集,0:ARM指令集,1:Thumb指令集
27NMFI不可屏蔽的FIQ支持,0:软件可以通过写CPSR.F位来屏蔽FIQ,1:软件不可以通过写CPSR.F位来屏蔽FIQ
25EE在进入异常处理时的大小端模式配置,0:小端,1:大端
22U表明是否使用对齐模式
21FIFIQ配置使能
13V选择异常向量表基址,0:0x00000000,1:0xffff0000
12I指令cache使能
11Z分支预测使能
2C数据cache使能
1A对齐检查使能
0MMMU使能

CP15协处理器c2 c3寄存器组成

主寄存器c2和c3主要提供内存保护和内存控制相关的功能,c2和c3寄存器的组成如下图所示:

在这里插入图片描述

CP15协处理器c4寄存器组成

在任何基于ARMv7实现的处理器中,协处理器CP15的c4寄存器没有被使用。

CP15协处理器c5 c6寄存器组成

主寄存器c5和c6主要提供内存系统错误上报功能,c5和c6寄存器的组成如下图所示:

在这里插入图片描述

CP15协处理器c7寄存器组成

主寄存器c7主要提供cache维护,地址转换和内存屏障操作相关的功能,c7寄存器的组成如下图所示:

在这里插入图片描述

CP15协处理器c8寄存器组成

主寄存器c8主要提供TLB维护相关的功能,c8寄存器的组成如下图所示:

在这里插入图片描述

CP15协处理器c9寄存器组成

主寄存器c9保留用于分支预测,cache和TCM操作,c9寄存器的组成如下图所示:

在这里插入图片描述

CP15协处理器c10寄存器组成

主寄存器c10主要提供内存重映射和TLB控制相关的功能,c10寄存器的组成如下图所示:

在这里插入图片描述

CP15协处理器c11寄存器组成

主寄存器c11保留用于TCM DMA操作,c11寄存器的组成如下图所示:

在这里插入图片描述

CP15协处理器c12寄存器组成

主寄存器c12提供安全扩展功能,c12寄存器的组成如下图所示:

在这里插入图片描述

CP15协处理器c13寄存器组成

主寄存器c13提供进程ID、上下文ID和线程ID处理功能,c13寄存器的组成如下图所示:

在这里插入图片描述

CP15协处理器c14寄存器组成

主寄存器c14保留用于通用定时器功能,c14寄存器的组成如下图所示:

在这里插入图片描述

CP15协处理器c15寄存器组成

主寄存器c15由处理器实现决定。

这里只是简单的将CP15各个主寄存器的组成列出来了,方便在使用MRCMCR指令配置CP15主寄存器时,查看指令各个参数的设置,以及对照配置的具体寄存器,至于寄存器的具体内容由于篇幅原因就不列出来了,CP15寄存器的细节可以参考ARMv7AR手册的B3.17章节内容。

欢迎关注博主的公众号(微信搜索公众号:嵌入式那些事):

在这里插入图片描述
如果文中有什么问题欢迎指正,毕竟博主的水平有限。

如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^。

排版更好的内容见我博客的地址:http://www.only2fire.com/archives/157.html

注:转载请注明出处,谢谢!^_^

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackailson

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值