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. Spring —— @Async注解的使用

    参考文档 Spring Boot使用@Async实现异步调用:自定义线程池 Spring Boot使用@Async实现异步调用:ThreadPoolTaskScheduler线程池的优雅关闭

  2. uiautomator代码例子--java

    在androidtest下创建文件Ui2Test.java package com.example.myapplication; import android.app.Instrumentation; ...

  3. Flutter移动电商实战 --(49)详细页_Stack制作底部工具栏

    一直悬浮在最下面的 Stack层叠组件.里面用Row 可以横向布局 开始 stack如果想定位就要用position去定位. 修改return返回值的这个地方 大R刷新查看效果,可以看到固定的在左下角 ...

  4. python 了解一点属性的延迟计算

    写在前面 本以为百度搜索这类知识的文章应该有很多, 然后我看了前面几篇后,基本上都是类似的内容,我想找些与众不同的博客看下,来拖宽这方面的广度,我就随机点到了第10页,结果第10页的内容基本跟属性的延 ...

  5. Docker,就放弃了把日志写入文件

    日志配置 既然用 Docker,就放弃了把日志写入文件,直接写到标准输出. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ...

  6. 【转载】 AutoML总结

    原文地址: https://jinxin0924.github.io/2017/12/21/AutoML%E6%80%BB%E7%BB%93/ Posted by JxKing on December ...

  7. Foxmail找回密码 及 Wireshark 使用【我】

    Foxmail中设置了密码,但是时间长忘了,现在要用,需要弄出来 首先,安装 Wireshark 抓包工具 一路下一步即可, 安装完确保这个图标表示的组件已经安装: 如果没有安装,在Wireshark ...

  8. linux修改配置文件解决mysql中文乱码和指定数据库存储引擎

    如题,mysql数据库的中文显示乱码: 先看下原来数据库里的字符编码: mysql> show variables like '%character_set%'; +-------------- ...

  9. linux 安装网易云音乐

    1.首先去官网下载最新的网易云 网易云音乐曾经推出官方Linux版本,提供的下载安装包有:deepin15(32位):http://s1.music.126.net/download/pc/net . ...

  10. Win10使用mysqldump导出csv文件及期间遇到的问题

    作为测试,我们这里使用了名为testdb的数据库中的名为test_table的表,首先我们使用如下SQL来查看其中有何数据: select * from testdb.test_table 数据如下: ...