这次学习一下高速缓存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;

转载于:https://blog.51cto.com/11962449/1837572

icache的方面以及使用相关推荐

  1. GNU 关闭 MMU 和 Icache 和 Dcache

    1. cp15 寄存器   disable Icache 和 Dcache . disable_MMU: MCR p15,0,r0,c7,c7,0 MRC p15,0,r0,c1,c0,0 bic r ...

  2. 嵌入式学习(二)——刷机和led实验(看门狗、c语言、icache、重定位、SDRAM)

    目录 一.刷机和裸机实验 1.1 刷机步骤 1.2 交叉编译链 1.2.1 环境变量配置 二.led实验 2.1 实验准备 2.2 实验开始 2.2.1 Makefile 2.2.2 mkv210_i ...

  3. 第四天:关看门狗、设置栈、控制icache、重定位、链接脚本

    1.汇编写启动代码:关看门狗 什么是看门狗? 看门狗(watch dog timer看门狗定时器),比如:家门口有一只狗,这个狗定时会饿(譬如两小时一饿),狗饿了就会胡乱咬人,人进进出出要想保证安全必 ...

  4. I-Cache 和 D-Cache

    定义 ICache和DCache是一种内存,虽然目前接触了好几种内存,寄存器,DDR等,它们在物理上的工作原理虽然不同,但是访问属性却很像. 在速度上 CPU > 寄存器 > Cache ...

  5. ARM64架构:为啥子刷icache之后要发IPI中断?

    昨天在笨叔第一季VIP群里,有人问了一个很有意思和深度的问题: 这位同学问的问题,是关于Linux ARM64内核的flush_icache_range()函数,它是linux5.0/arch/arm ...

  6. 童话故事 --- CPU的贴身侍卫ITCM和ICache

    "叮铃铃- 叮铃铃-" "谁呀?"黛丝博士打开了家门,"哇,高飞,你怎么来了?" 高飞狗:"好久不见,想来看看你,还买了你最喜欢吃 ...

  7. 再读内核存储管理(7):icache支持

    快乐虾 http://blog.csdn.net/lights_joy/ lights@hb165.com 本文适用于 ADI bf561 DSP uclinux-2008r1-rc8 (移植到vds ...

  8. 关于ICache和DCache

    从不同地方总结摘录而来,附上原文链接原文:https://blog.csdn.net/qq_34888036/article/details/80872186 ICache和DCache是一种内存,虽 ...

  9. iCache和dCache

    CPU和主存之间也存在多级高速缓存,一般分为3级,分别是L1, L2和L3.另外,我们的代码都是由2部分组成:指令和数据.L1 Cache比较特殊,每个CPU会有2个L1 Cache.分别为指令高速缓 ...

最新文章

  1. 30 天精通 RxJS (05): 建立 Observable(一)
  2. 深度学习DL调参隐藏层节点数对网络性能的影响
  3. Callable和Future接口的实现
  4. 前端jQuery基本语法
  5. [react] 状态管理器解决了什么问题?什么时候用状态管理器?
  6. Java 删除链表中的元素
  7. vsftp匿名访问目录_怎么更改vsftp匿名用户的默认登录目录/var/ftp?
  8. python android开发_Android与Python爱之初体验
  9. 2、Kmeans算法处理出租车数据
  10. 计算机动漫与游戏制作心得,学习课件制作的心得体会(精选10篇)
  11. HCIE证书有用吗?
  12. 如何在电脑上给视频去水印
  13. strut2 表单标签
  14. 33种化学原理动图, 让你秒懂化学反应原理!
  15. 云栖大会 mysql_【资料合集】2018云栖大会•深圳峰会回顾:PDF下载
  16. Ubuntu 18.04.2 LTS Bionic Beaver 发布
  17. # imshow 报错
  18. 合并 2 个有序列表(关键词:有序列表/有序/合并/归并)
  19. inurl_inurl,intitle指令的含义、作用及用法
  20. 日期格式之间的互相转换

热门文章

  1. 解决 mac zsh 所有命令失效
  2. 非常详尽的 Shiro 架构解析
  3. win10下 mysql5.7.19 winx64解压缩版安装配置教程
  4. 战术网络安全检查表 | Symantec Connect
  5. 5 Transforms 转移 笔记
  6. Android布局_LinearLayout布局
  7. 用python扩展snmp
  8. 翻译预告 《介绍 GENEVA Beta 1 白皮书》
  9. 怎样编写一个Photoshop滤镜(3)-- Scripting Plug-ins
  10. JavaEE实战班第13天