CP15负责管理ARM中存储管理系统;

常用如下命令来操作CP15的寄存器;

MCR{cond}     coproc,opc1,CRd,CRn,CRm,opc2
//将arm寄存器中的数据传送到协处理的寄存器当中;
MRC{cond}    coproc,opc1,CRd,CRn,CRm,opc2
//将协处理的寄存器传送到arm寄存器

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

msm-3.18/arch/arm/kernel/head.S:

463 ENTRY(__turn_mmu_on)
464     mov r0, r0
465     instr_sync
466     mcr p15, 0, r0, c1, c0, 0       @ write control reg
467     mrc p15, 0, r3, c0, c0, 0       @ read id reg

CP15可以包含16个32位的寄存器,其编号为0-15。实际上对于某些编号的寄存器可能对应有多个物理寄存器。在指令中指定特定的标志位(opc2)来区分这些物理寄存器。有些类似于ARM寄存器中,处于不同的处理器模式时,ARM某些寄存器可能不同。

来看CP15各个寄存器值的含义:

(一)CP15 的寄存器 C0

The CP15 c0 registers provide device and feature identification,CP15 中寄存器 C0 对应两个标识符寄存器:

(二)CP15 的寄存器 C1

CP15中的寄存器C1是一个控制寄存器,它包括以下控制功能:
禁止或使能MMU以及其他与存储系统相关的功能
配置存储系统以及ARM处理器中的相关部分的工作

(三)CP15 的寄存器 C2

C2寄存器的别名:Translation table base (TTB) register
C2寄存器用来保存页表的基地址,即一级映射描述符表的基地址。其编码格如下所示:

(四)CP15 的寄存器 C3

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

在 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 访问指令状态失效寄存器

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

(六)CP15的寄存器C6

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

(七)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的不同组合决定指令执行的不同操作:

(九)CP15的寄存器C12

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

注:只有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。

ARM基础学习-协处理器CP15相关推荐

  1. ARM汇编指令-协处理器cp15操作指令(mcr amp; mrc)

    一.协处理器 SoC内部另一处理核心,协助主CPU实现某些功能,被主CPU调用执行一定任务.ARM设计上支持多达16个协处理器,但是一般 SoC只实现其中的CP15.(cp:coprocessor) ...

  2. ARM协处理器CP15(设置MMU,cache等)学习

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 作者:w ...

  3. linux中断响应时间太慢_linux+arm系统学习与基础学习

    先说说arm吧.先前学习linux+arm老是觉得arm次要的,学习arm和学习单片机一样,了解了中断,UART,AD,定时器就差不多了,工作重心主要在linux上面.随着时间的推移,学习的深入,自我 ...

  4. 汇编指令的学习3——协处理器cp15的操作指令mcr、mrc

    一.什么是协处理器 (1)SoC内部另一处理核心,协助主CPU实现某些功能,被主CPU调用执行一定任务. (2)ARM设计上支持多达16个协处理器,但是一般SoC只实现其中一个:协处理器CP15(cp ...

  5. ARM协处理器CP15介绍

    概述 在基于ARM的嵌入式应用系统中,存储系统的操作通常是由协处理器CP15完成的.CP15包含16个32位的寄存器,其编号为0-15.而访问CP15寄存器的指令主要是MCR和MRC这两个指令. MR ...

  6. (转)ARM协处理器CP15寄存器详解

    用于系统存储管理的协处理器CP15 MCR{cond}     coproc,opcode1,Rd,CRn,CRm,opcode2 MRC {cond}    coproc,opcode1,Rd,CR ...

  7. ARM协处理器CP15寄存器详解

    用于系统存储管理的协处理器CP15 MCR{cond}     coproc,opcode1,Rd,CRn,CRm,opcode2 MRC {cond}    coproc,opcode1,Rd,CR ...

  8. ARM存储器之:协处理器CP15

    链接:http://www.eefocus.com/embedded/323216/r0 ARM存储器之:协处理器CP15 ARM存储系统有非常灵活的体系结构,可以适应不同的嵌入式应用系统的需要.AR ...

  9. ARM协处理器CP15

    转自:http://blog.csdn.net/tankai19880619/article/details/8894041 ARM920T = ARM9 core + MMU + Cache MMU ...

最新文章

  1. bootstrap fileinput上传返回400,404,500 等错误替换
  2. 全flash站制作剖析
  3. 5、图书类别查询功能
  4. Jar 打包 EXE文件,可以脱离java环境运行 Jsmooth的使用
  5. Js获取短信验证码前段效果
  6. principle中文_principle与principal,长得像,发音还一样!又头疼了!
  7. PHP在接下来的几年内将是主主流的
  8. jquery库实现iframe自适应内容高度和宽度
  9. VS+VSS代码管理
  10. Serializer和ModelSerializer
  11. FIB聚焦离子束系统常见的应用场景
  12. 仅需6步!虹科教你如何在第三方软件CODESYS中配置PCAN
  13. 斯坦福大学公开课:iOS8开发 第一课:课务,iOS8概述学习笔记
  14. 常见的状态码1xx、2xx、3xx、4xx、5xx、
  15. LaTeX复选框实现
  16. 卸载MySQL残余及修改密码
  17. 酷开系统这些隐藏功能你用过几个?
  18. 数据库复习笔记-第1章绪论
  19. NeHe OpenGL教程 第二十九课:Blt函数
  20. 大学python搜题软件_2020中国大学MOOC的APP慕课用Python玩转数据期末考试搜题公众号答案...

热门文章

  1. 微店 Android 插件化实践
  2. 笔记:将字符串转换成数组的方法
  3. 【转载】iPhone开发之NSNotificationCenter(通知)的使用方法
  4. Petroglyph专访:中间件做游戏
  5. 【记录】2022/7/16
  6. [FFT || 递推] BZOJ 4451 [Cerc2015]Frightful Formula
  7. 连线自动路由算法:在GEF中实现连线的自动直角路由,智能避障并绕开模型,选择最佳路径进行布线,仿Visio效果
  8. 2021年全球与中国汽油泵行业市场规模及发展前景分析
  9. 计算机网络协议栏图片,计算机网络与应用PPT.ppt
  10. CAN与CANO的基本概念