当前位置: 首页 > news >正文

icache的方面以及使用

这次学习一下高速缓存icache的功能的开关。

 首先巩固一下这个mrc指令

MRC 指令的格式为:

MRC{<cond>}(条件)协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2。

如 mrc  p15 , 0 , r0 , c1 , c0 , 0 ;

  <cond>为指令执行的条件码,忽略则视为无条件执行,该指令的作用是将 cp15 的寄存器c1,c0中的数据传送到 ARM 处理器寄存器r0中,如果协处理器不能成功地执行该操作,将产生未定义的指令异常中断。源寄存器1,2:存放第1个和第2个操作数的协处理器寄存器。协处理器操作码2:可选的协处理器特定操作码,用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为0。

  cp15是用于系统存储管理的协处理器,对于CP15寄存器来说协处理器操作码1永远为0,否则结果不可预知。  

  cp15中的C1寄存器存放了高速缓存的控制功能,所以我们要通过写这个协处理器寄存器里面的位,来启用icache高速缓存。

  

  C1寄存器的各个位说明以及应用:

  0 1 2 3 4 5 6 7 8 9 10 11  12  13  14  15   16~31

  M A C W P D L B S R F  Z  I   V   RR  L4  SBZP/UNP   

  各个位的作用和含义:

  M:禁止/使能MMU或者MPU(0:禁止MMU或者MPU,1:使能MMU或者MPU)(如果系统中没有MMU或者MPU,读取时该位返回0,写入时忽略)

  A:对于可以选择是否支持内存访问时地址对齐检查的系统,本位禁止/使能地址对齐检查功能(0:禁止地址对齐检查功能,1:使能地址对齐检查功能)(对寄存器进行写操作时,忽略该位)

 C: 当数据Cache和指令Cache分开时,本控制位禁止/使能数据Cache。当数据Cache和指令Cache统一时,该控制位禁止/使能整个Cache.(0:禁止Cache, 1:使能Cache)

 W:禁止/使能写缓存(0:禁止写缓存,1:使能写缓存)

 P:对于向前兼容26位ARM处理器,本控制位控制PRGC32控制信号(0:异常中断处理程序进入32位地址模式,1:异常中断处理程序进入26位地址模式)

 D:对于向前兼容26位ARM处理器,本控制位控制DATA32控制信号(0:禁止26位地址异常检查,1:使能26位地址异常检测)

 L:对于ARMv3及以前版本,本控制位可以控制处理器的中止模式(0:选择早期中止模式,1:选择后期中止模式)

 B: 对于存储系统同时支持大/小端(big-endian/little-endian)的ARM处理器,该控制位配置系统使用哪种内存模式

 S:支持MMU的存储系统中,本控制位用作系统保护

 R:支持MMU的存储系统中,本控制位用作ROM保护

 F:本控制位由生产厂商定义

 Z:对于支持跳转预测的ARM系统,本控制位禁止/使能跳转预测功能(0:禁止跳转预测功能,1:使能跳转预测功能)

 I:当数据Cache和指令Cache是分开的,本控制位禁止/使能指令Cache(0:禁止指令Cache ,1:使能指令Cache)

我们要写它的第I位,也就是第bit12位

  

  bic指令的用法:bic是位清除的指令,把操作数中为1的位对应位置的数(寄存器中)变为0,然后再放到那个寄存器里去。

  比如 bic r0 ,r0 ,0xF0000000    意思就是把r0高四位的值清零,然后再放回r0寄存器中。

  orr指令则相反,把操作数中为1的位对应位置的数(寄存器中)变为1,然后再放到那个寄存器里去。

 

  //下面就是开/关icache的汇编程序

   mrc p15,0,r0,c1,c0,0;

  //bic r0, r0, #(1<<12)// bit12 置0  表示关上icache

   orr r0, r0, #(1<<12)// bit12 置1  表示开启icache

   mcr p15,0,r0,c1,c0,0;

相关文章:

  • cmp bne 以及sub指令的详解
  • 关于ARM Cortex a 系列的看门狗定时器
  • C语言之 认识可变参数
  • ARM cortex a 的SDRAM (DDR)
  • C语言 之递归函数
  • C语言 之建立静态链接库
  • ARM的PWM定时器1
  • RTC闹钟的中断处理方法以及程序设计
  • altium designer 制作元器件封装库
  • VTK的Mapper
  • VTK交互系统 1 交互模式入门
  • VTK显示像素图
  • VTK交互系统 2 交互器样式
  • VTK交互系统 3 自定义交互器样式
  • VTK交互系统 4 自定义交互器样式2 键盘鼠标交互器设置
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【刷算法】求1+2+3+...+n
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • ES10 特性的完整指南
  • leetcode46 Permutation 排列组合
  • Markdown 语法简单说明
  • php ci框架整合银盛支付
  • React Transition Group -- Transition 组件
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 从0实现一个tiny react(三)生命周期
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • ------- 计算机网络基础
  • 使用权重正则化较少模型过拟合
  • 思否第一天
  • 小程序button引导用户授权
  • 积累各种好的链接
  • ​学习一下,什么是预包装食品?​
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • (HAL库版)freeRTOS移植STMF103
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一) springboot详细介绍
  • (一)基于IDEA的JAVA基础12
  • (转)C#调用WebService 基础
  • (转)c++ std::pair 与 std::make
  • (转)VC++中ondraw在什么时候调用的
  • (转)德国人的记事本
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • *Django中的Ajax 纯js的书写样式1
  • . NET自动找可写目录
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 5种线程安全集合
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET中使用Redis (二)
  • @GlobalLock注解作用与原理解析
  • @hook扩展分析