3672|3

496

帖子

18

TA的资源

一粒金砂(高级)

楼主
 

HELPER2416学习笔记2——ICache实验 [复制链接]

本帖最后由 fjjjnk1234 于 2014-7-26 14:45 编辑

HELPER2416学习笔记2——ICache实验

参与HELPER2416开发板助学计划

通过S3C2416的数据手册可以知道S3C2416有16KB的指令缓存ICache和16KB的数据缓存DCache。
      基于程序访问的局限性,在主存和CPU通用寄存器之前设置了一类高速的、容量较小的存储器,把正在执行的指令地址附件的一部分指令或数据从主存调入这类存储器,供CPU在一段时间内使用,这对提高程序的运行速度有很大的作用。这类介于主存和CPU之间的高速小容量存储器称作高速缓冲存储器(Cache)。
      当ICache被关闭时(默认就是关闭的),CPU每次取指时都要读取主存,性能非常低。
      当Icache被开启后,CPU每次取指时都会先在ICache中查看是否能找到所要的指令,而不管Ctt是0还是1。(Ctt是页描述符的C位,关于这个Ctt,现在还不太明白)。如果找到了,称为Cache命中;如果找不到,称为Cache缺失。ICache被开启后,CPU的取指分为3种情况:
(1)Cache命中且Ctt为1时,从ICache中取出指令,返回CPU。
(2)Cache缺失且Ctt为1时,CPU从 主存中读出指令。同时,一个称为“8-word linefill”的动作将发生,这个动作把该指令所处区域的8个word写进ICache的某个条目中。
(3)Ctt为0时,CPU从主存中读出指令。
开启I-Cache的方法:往CP15协处理器中寄存器1的第12位写1。
关于CP15协处理器的相关内容,我在S3C2416数据手册中没有找到,可能是找得不细心吧。在《ARM体系结构与编程中》找到了相关的内容。在166页,以下相关内容的截图:







本实验主要测试开启ICache的作用。
我尝试在Keil MDK 5.1中做这个实验,结果失败了,看了J-Link的调试信息,好像在工程的汇编代码中已经把ICache打开了。如图:
所以决定在Linux中写了简单的led灯程序测试下,Makefile参考了网友分享的。
ICache.s:
  1. .code 32
  2. .globl _start
  3. _start:
  4. @close the watchdog
  5.         ldr r0,=0x53000000
  6.         mov r1,#0x00000000
  7.         str r1,[r0]

  8. @open I-Cache
  9.         orr r0,r0, #0x00001000
  10.         mcr p15,0,r0,c1,c0,0

  11. @set the GPBCON
  12.         ldr r0,=0x56000010
  13.         mov r1,#0x00000004
  14.         str r1,[r0]

  15. led_on:
  16.         ldr r2,=0x56000014
  17.         mov r1,#0x00000000
  18.         str r1,[r2]
  19.         bl delay

  20. led_off:
  21.         mov r1,#0x00000002
  22.         str r1,[r2]
  23.         bl delay
  24.         bl led_on

  25. delay:
  26.         mov r3,#0x200000
  27. delay1:
  28.         sub r3,r3,#1
  29.         cmp r3,#0x0
  30.         bne delay1
  31.         mov pc,lr
复制代码

makefile:
OBJ=ICache
ALL_s=$(wildcard *.s)
$(OBJ).bin:$(ALL_S)
        arm-linux-gcc -o $(OBJ).o -c -g $(ALL_s)
        arm-linux-ld -o $(OBJ) -Ttext 0x40000000 -g $(OBJ).o -o $(OBJ)_elf
        arm-linux-objcopy -O binary -S $(OBJ)_elf $(OBJ).bin
clean:
        rm *.o *.bin *_elf



先把程序中以下两句注释掉,再解除注释,下载程序后对比可以看到LED灯闪烁的速度快了很多。
ICache.rar (605 Bytes, 下载次数: 7)
论坛ID:fjjjnk1234
提交时间:2014.07.26

最新回复

如果做对了的话,这个差别是非常大的  详情 回复 发表于 2014-8-5 18:23
点赞 关注(1)
个人签名相由心生,境随心转,一切法从心想生。

回复
举报

20

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
对比了下开启Ichache和没开Ichache的,竟然没发现什么区别!
 
 

回复

554

帖子

0

TA的资源

版主

板凳
 
如果做对了的话,这个差别是非常大的
 
个人签名My dreams will go on...
http://www.jyxtec.com
 
 

回复

496

帖子

18

TA的资源

一粒金砂(高级)

4
 
我保证是有明显的差别的,先注释掉Open Icache以下两句,make,下载到板子。再取消注释,make,下载到板子。首先你得确定你生成的.bin是有更新过的。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表