ref:http://blog.csdn.net/gameit/article/details/13169405


背景:

  在uboot中,start.s中涉及到了 CP15 的有关操作。查阅有关资料,进行学习。
    mrc p15, 0, r0, c1, c0, 0
    bic r0, r0, #0x00002000 @ clear bits 13 (--V-)
    bic r0, r0, #0x00000007 @ clear bits 2:0 (-CAM)
    orr r0, r0, #0x00000002 @ set bit 1 (--A-) Align
    orr r0, r0, #0x00000800 @ set bit 11 (Z---) BTB
    mcr p15, 0, r0, c1, c0, 0

在基于ARM的嵌入式系统中,存储系统通常是通过系统控制协处理器CP15完成的。很多高级的寄存器并不能够直接访问。

CP15可以包含16个32位的寄存器,其编号为0-15。

实际上对于某些编号的寄存器可能对应有多个物理寄存器。在指令中指定特定的标志位来区分这些物理寄存器。

有些类似于ARM寄存器中,处于不同的处理器模式时,ARM某些寄存器可能不同。

在这里不对CP15各组寄存器做详细的分析,仅提供查阅的手段。

 
MCR/MRC 用于系统存储管理的协处理器CP15,指令格式:
  MCR {cond}     coproc,opcode1,Rd,CRn,CRm,opcode2
  MRC {cond} coproc,opcode1,Rd,CRn,CRm,opcode2

*这2条指令仅适用于32位寄存器,因为64位寄存器仅由{CRm,opcode1}标识。

 
<coproc>         指令操作的协处理器名,标准名为pn,n,为0~15 
<opcode1>      协处理器的特定操作码,对于CP15寄存器来说,opcode1永远为0,不为0时,操作结果不可预知
 <Rd>    作为元寄存器的ARM寄存器。其值被读写到得协处理器寄存器中。
        <Rd>不能为PC, 当其为PC时。指令操作结果不可预知。
<CRn>             存放第1个操作数的协处理器寄存器。
<CRm>            存放第2个操作数的协处理器寄存器。    (用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为C0)
<opcode2>      可选的协处理器特定操作码。                (用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为0)
 
在明白了指令格式以后,我们记住了查阅有关的文档:《DDI0406C arm_architecture_reference_manual.pdf》。
 
 

找到了对应的寄存器,STCLR

结合文章开头中间那几行语句,发现这段代码是对于STCLR不同的位进行置位/清零。

所以,整段代码做了这样的事情:

1. 读取 SCTLR 的值到 R0

2. 修改 对应的位

3. 写回 SCTLR

* 注意: 在操作CP15 有关寄存器时,可能要求权限等级在PL1

文章完。

 

浅析ARM协处理器CP15寄存器有关指令:MCR\MRC的更多相关文章

  1. [转载]ARM协处理器CP15寄存器详解

    用于系统存储管理的协处理器CP15  原地址:http://blog.csdn.net/gameit/article/details/13169405 MCR{cond}     coproc,opc ...

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

    本文转载i自;https://blog.csdn.net/gameit/article/details/13169405 用于系统存储管理的协处理器CP15   MCR{cond}     copro ...

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

    改自:https://blog.csdn.net/gameit/article/details/13169405 *C2描述的不对,bit[31-14]才是TTB,不是所有的bit去存储ttb.很明显 ...

  4. (转)ARM协处理器主要用途 及其 指令CDP LDC STC MCR MRC介绍

    原文地址:http://zqwt.012.blog.163.com/blog/static/120446842010111610612200/ ARM 微处理器可支持多达 16 个协处理器,用于各种协 ...

  5. ARM汇编指令MCR/MRC学习

    MCR指令将ARM处理器的寄存器中的数据传送到协处理器的寄存器中.假设协处理器不能成功地运行该操作.将产生没有定义的指令异常中断. 指令的语法格式: MCR{<cond>} p15, 0, ...

  6. (转)关于ARM9协处理器CP15及MCR和MRC指令

    网址:http://blog.csdn.net/zhou1232006/article/details/6150198 在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的 ...

  7. 协处理器CP15

    在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的.ARM处理器使用协处理器15(CP15)的寄存器来控制cache.TCM和存储器管理.CP15包含16个32位的寄存器 ...

  8. 协处理器CP15介绍—MCR/MRC指令(6)

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

  9. 内存管理单元(MMU)和协处理器CP15介绍(转)

    内存管理单元(MMU)和协处理器CP15介绍内存管理单元(MMU)介绍嵌入式系统中,存储系统差别很大,可包含多种类型的存储器件,如FLASH,SRAM,SDRAM,ROM等,这些不同类型的存储器件速度 ...

随机推荐

  1. Arts打卡第5周

    Algorithm.主要是为了编程训练和学习. 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard). 进行编程训练,如果不训练你看再多的算法书,你依然不 ...

  2. Delphi BASE64单元EncdDecd的修改

    Delphi BASE64单元EncdDecd的修改 EncdDecd.pas两个函数声明: procedure EncodeStream(Input, Output: TStream);proced ...

  3. webpack介绍和使用

    一webpack介绍1由来2介绍3作用4拓展说明5webpack整体认知二webpack安装1安装node2安装cnpm3安装nrm的两种方法4安装webpack三webpack配置0搭建项目结构1初 ...

  4. 【Java】浅谈Java内部类(转载)

    说得挺细的,不是泛泛而谈.https://blog.csdn.net/weixin_42762133/article/details/82890555

  5. Git的基本使用汇总整理

    初始化一个Git仓库,使用 git init 命令,此时会创建一个默认的master分支.添加文件到Git仓库,分两步: 使用命令git add <file>,将文件添加到暂存区: 使用命 ...

  6. 阶段5 3.微服务项目【学成在线】_day18 用户授权_06-方法授权-方法授权测试-无权限异常处理

    现在没权限返回的信息 控制台抛出的异常是这个 : 不允许访问,这是Spring Security跑出来的 我们在异常处理器里面打个断点看一下 重新测试,就跳转到了异常捕获类这里. 这是异常的类型 这里 ...

  7. 丢失libiconv-2.dll解决办法以及无法定位输入点libiconv-2.dll到动态链接库

    摘自https://blog.csdn.net/mengxiangjia_linxi/article/details/78147348 丢失libiconv-2.dll解决办法以及无法定位输入点lib ...

  8. MapReduce本地运行模式wordcount实例(附:MapReduce原理简析)

    1.      环境配置 a)        配置系统环境变量HADOOP_HOME b)        把hadoop.dll文件放到c:/windows/System32目录下 c)        ...

  9. 【Leetcode_easy】796. Rotate String

    problem 796. Rotate String solution1: class Solution { public: bool rotateString(string A, string B) ...

  10. iOS-app发布新版本步骤

    1