历史上的今天
返回首页

历史上的今天

今天是:2024年10月26日(星期六)

2021年10月26日 | ARMv7-A 处理器窥探(2) —— CP15 协处理器

2021-10-26 来源:eefocus

1、ARMv7-A 协处理器

ARMv7-A 处理器除了标准的 R0~R15,CPSR,SPSR 以外,由于引入了 MMU、TLB、Cache 等内容,ARMv7-A 使用协处理器来对这些扩展来进行管理,ARMv7-A 支持 16 个协处理器,编号从 CP0~CP15,其中的 CP15 协处理器称之为系统控制协处理器,CP15 协处理器下的寄存器包含了 MMU、TLB、Cache等关键组件,其余的 CP0~CP14 有的控制Debug功能,有的控制 SIMD,有的控制浮点,咱们暂时只关注关键的 CP15;


2、CP15 协处理器

2.1、组成

CP15 协处理器由16个子寄存器组成,分别为 c0~c15,所以 CP15 的层次关系为:

这里的 c0~c15 不是寄存器的含义,而是主(Primary Register)寄存器的意思,也就是每个 c0~c15 中,包含很多寄存器组:


比较常用的 c0~c15 的寄存器组织如下

image.png?imageView2/2/w/550

image.png?imageView2/2/w/550

所以,针对 CP15 协处理器相关的层次结构总结下来为(这里以c0为例,c1~c15同样有很多寄存器,每个寄存器都是 32bits 的):

2.2、访问指令

与 CPSR 类似,协处理器的访问是通过指定的汇编指令进行访问;常用的有 MCR/MRC 两条:


MRC: 将 CP15 协处理器中的寄存器数据读到 ARM 寄存器中。


MCR: 将 ARM 寄存器的数据写入到 CP15 协处理器寄存器中。


使用这两条指令,外加一些标准的指令,就可以实现读改写;


2.2.1、MCR

MCR 指令的格式如下:


MCR , , , , {, }


其中:


coproc:访问协处理器的名字,取值范围从 p0~p15;


opc1:协处理器要执行的操作码,取值范围从 0~7;


Rt:ARM 的寄存器(比如 R0),要写入到指定协处理器寄存器的数据就保存在此寄存器中;


CRn:指定协处理器的目标寄存器;


CRm:协处理器中附加的目标寄存器或者源操作数寄存器,如果不需要附加信息就将 CRm 设置为 C0,否则结果不可预测;


opc2:可选的协处理器特定操作码,取值范围从 0~7,当不需要的时候要设置为 0;


2.2.2、MRC

MRC 指令的格式如下:


MRC , , , , {, }


其中:


coproc:访问协处理器的名字,取值范围从 p0~p15;


opc1:协处理器要执行的操作码,取值范围从 0~7;


Rt:ARM 的寄存器(比如 R0),将指定协处理器寄存器的数据读在此 ARM Core 寄存器中;


CRn:指定协处理器的目标寄存器;


CRm:协处理器中附加的目标寄存器或者源操作数寄存器,如果不需要附加信息就将 CRm 设置为 C0,否则结果不可预测;


opc2:可选的协处理器特定操作码,取值范围从 0~7,当不需要的时候要设置为 0;


访问协处理器寄存器的指令已经写得很清楚,接下来就是如何来填这指令中的变量,这涉及到具体的协处理器的寄存器组织,我们使用最常用的 CP15 为例进行讲述;


2.3、Cp15 协处理器寄存器组成

不管是 MCR/MRC 指令,如果针对到具体的 Cp15 协处理器,coproc 字段填 p15,Rt 字段可以随便指定,暂时不管,那么就剩下 4 个变量:


{opc1、CRn、CRm、opc2};


Cp15 协处理器的所有寄存器访问,都要依赖这几个值的组合达到访问的目的,前面说过整个 Cp15 的寄存器,分为 c0~c15,一个 16 个 Primary Regiser,再在每个 Primary Regiser 下面,又细分了很多具体的每个长度为 32bits 的寄存器,他们的整体组织结构为:

可以看到,Cp15 协处理器的 CRn 编号从 c0~c15,每个 Primary Regiser 都标记得有访问权限;后面的 opc1、CRm、opc2 的取值访问也都标记得清清楚楚;


那么下面将 c0~c16 每个展开看一下便可以清清楚楚看到他们怎么组织起来的,这样就可以知道如何使用汇编进行编码配置;


2.3.0、Cp15-c0 寄存器组成

c0 的寄存器组成如下:

访问每个寄存器的 {opc1、CRn、CRm、opc2} 写的清清楚楚;


主要是和 ID 相关的内容;


2.3.1、Cp15-c1 寄存器组成

c1 的寄存器组成如下:

主要是和系统控制相关的配置;


2.3.2、Cp15-c2&c3 寄存器组成

c2&c3 的寄存器组成如下:

主要是内存保护和控制相关的(MMU);


2.3.3、Cp15-c4 寄存器组成

Cp15 协处理器的 c4 寄存器为 Not used;


2.3.4、Cp15-c5&c6 寄存器组成

c5&c6 的寄存器组成如下:

主要是和 memory fault 相关的;


2.3.5、Cp15-c7 寄存器组成

c7 的寄存器组成如下:

主要是和 Cache 相关的部分;


2.3.6、Cp15-c8 寄存器组成

c8 的寄存器组成如下:

主要是和 TLB 相关的;


2.3.7、Cp15-c9 寄存器组成

c9 的寄存器是为 cache 和 TCM 预留的;

2.3.8、Cp15-c10 寄存器组成

c10 的寄存器是为内存重映射和 TLB 控制:

2.3.9、Cp15-c11 寄存器组成

c11 的寄存器是为 TCM DMA 预留:

2.3.10、Cp15-c12 寄存器组成

c12 的寄存器是为安全扩展的:


2.3.11、Cp15-c13 寄存器组成

c13 的寄存器是为进程,上下文和线程 ID 的:

2.3.12、Cp15-c14 寄存器组成

c14 的寄存器是为通用 Timer 预留的:


2.3.13、Cp15-c15 寄存器组成

c15 的寄存器是 IMPLEMENTATION DEFINED 的,不管他:

推荐阅读

史海拾趣

Delta Electronics公司的发展小趣事

Delta Electronics成立于1971年,最初只是台湾一家小型电子制造公司。随着技术的不断进步和市场的扩大,公司逐渐开始拓展其业务范围。上世纪90年代初,Delta在中国大陆设立了生产基地,这标志着公司全球扩展战略的重要一步。随后,公司陆续在美国、欧洲、亚洲等地建立了研发中心和生产基地,为全球客户提供优质的电子产品和解决方案。

Electronic Sensor + Resistor GmbH公司的发展小趣事

随着产品技术的不断成熟和市场份额的逐步扩大,ESR公司开始将目光投向国际市场。公司积极参加国际电子展会和技术交流活动,与全球各地的客户和合作伙伴建立了广泛的联系。

同时,ESR公司还根据不同国家和地区的市场需求和法规要求,对产品线进行了针对性的调整和优化。通过本地化的营销策略和服务体系,公司成功打开了多个海外市场的大门,并赢得了当地客户的信任和支持。

雅特力(Artery)公司的发展小趣事

雅特力在追求经济效益的同时,也高度重视企业社会责任和可持续发展。公司积极参与社会公益事业,通过捐款、捐物等方式支持教育、环保等领域的发展。此外,雅特力还注重环境保护和资源利用,采用环保材料和节能技术,努力降低生产过程中的能耗和排放。这些举措不仅有助于提升公司的社会形象,也为实现可持续发展做出了积极贡献。

HBH-Microwave公司的发展小趣事

面对日新月异的电子技术和不断变化的市场需求,HBH-Microwave始终保持对技术创新的热情和投入。公司每年都会投入大量资金用于研发新产品和新技术,以确保在激烈的市场竞争中保持领先地位。同时,HBH还积极与高校和研究机构合作,共同开展前沿技术的探索和研究。这种持续的技术创新和研发投入为公司的长远发展提供了源源不断的动力。

DCX-CHOL Enterprises公司的发展小趣事

为了进一步拓展业务领域和提升竞争力,DCX-CHOL Enterprises开始积极探索跨界合作的可能性。公司与多家知名企业和研究机构建立了战略合作关系,共同开展技术研发和产品创新。通过跨界合作,DCX-CHOL Enterprises不仅获得了更多的技术支持和市场资源,还拓宽了视野和思路,为公司未来的发展注入了新的活力。同时,公司还积极参与行业协会和组织的活动,加强与其他企业的交流与合作,共同推动电子行业的发展和进步。

FIDELIX公司的发展小趣事

在东芯半导体的支持下,FIDELIX开始将其一部分技术团队迁移到国内,加速了存储芯片的国产替代进程。这些技术团队的加入,不仅提升了国内半导体产业的技术水平,也促进了FIDELIX与国内企业的深度融合和协同发展。

问答坊 | AI 解惑

模拟电路设计的九个级别

一段       你刚开始进入这行,对PMOS/NMOS/BJT什么的只不过有个大概的了解,各种器件的特性你也不太清楚,具体设计成什么样的电路你也没什么主意,你的电路图主要看国内 杂志上的文章,或者按照教科书上现成的电路,你总觉 ...…

查看全部问答>

特殊LCD接口

各位,请问图片中的接口是什么标准?与其匹配的接插件是什莫型号? 数了一下,39线。 多谢! …

查看全部问答>

请问linux-2.6.22.14内核自带SD卡的 驱动么?

源文件夹下有/drivers/mmc,同时make menuconfig的时候也选择了SD/MMC选项, 编译 的 时候从log看也编译了 mmc下的文件。 但是,下载到开发板上后启动log里却没有mmc,sd这样的信息,同时/dev/mmcblk0文件也存在。…

查看全部问答>

有使用过STC62WV12816的兄弟进

我现在完全按数据手册所有控制和地址,数据口上的时序都对的,可是读写仍然没反应,有用过改片子的兄弟嘛,默认该RAM上电后,内容是多少?是0x00还是0xFF…

查看全部问答>

STR9好冷清呀,版主。。。(附I2c源码)

玩这个片子一年啦,可没找到战友呀!我的qq是8814405,有搞这个加我,最近有其他项目,暂时没搞,逛到这里,str9还是冷冷清清,悲哀呀。。。。看到有人问I2C问题,贴上我以前的代码,看能不能借鉴?算是推广一下了!/************************ ...…

查看全部问答>

请教版主STM32关于USB控制端点4的问题

请问版主,STM32的datasheet中标明USB控制端点是有8个的,可是现在我一使用控制端点4会出现问题,具体描述如下: 1.使用官方版本STM32_USB_FS_Device_Lib_V3.1.1中的JoyStickMouse例程,运行正常。 2.将Dvice_Table中的EP_NUM改为5,将JoySt ...…

查看全部问答>

AVR资料共享

资料共享,不收金币,共同学习,共同进步!…

查看全部问答>

quartus 调用modelsim 仿真时 出现错误

quartus 调用modelsim 仿真时 出现错误  不能找到这个altera.alt_dspbuilder_package  昨晚一晚上也没解决 ,哪位大侠指点一二 ,多谢…

查看全部问答>

大家帮看看这个是什么芯片

各位高手帮看看这是什么芯片,多谢了…

查看全部问答>

电子闹钟开发

不清楚能不能发这个信息,如果不行,请版主提醒! 我们是一家OEM的小公司,现在准备转型做创新电子消费产品,希望贵论坛有意向合作的兼职工程师。有意者可以与我联系 非常感谢大家,我的理想是做一个完全创新的公司…

查看全部问答>