历史上的今天
今天是:2024年12月20日(星期五)
2021年12月20日 | tiny4412 裸机程序 五、控制icache
2021-12-20 来源:eefocus
一、什么是cache
基于程序访问的局限性,在主存和CPU通用寄存器之前设置了一类高速的、容量较小的存储器,把正在执行的指令地址附件的一部分指令或数据从主存调入这类存储器,供CPU在一段时间内使用,这对提高程序的运行速度有很大的作用。这类介于主存和CPU之间的高速小容量存储器称作高速cache。比较常见的cache包括icache和dcache。icache的使用比较简单,系统刚上电时,icache中的内容是无效的,并且icache的功能是关闭的,往CP15协处理器中的寄存器1的bit[12]写1可以启动icache,写0可以停止icache。icache关闭时,CPU每次取指都要读主存,性能非常低。因为icache可随时启动,越早开icache越好。与icache相似,系统刚上电时, dcache中的内容是无效的,并且dcache的功能是关闭的,往CP15协处理器中的寄存器1的bit[2]写1可以启动dcache,写0可以停止dcache。因为 dcache必须在启动mmu后才能被启动,而对于裸机而言,没必要开mmu,所以本教程的程序将不会启动dcache。
二、程序说明
完整代码见目录4_leds_c_icache。相比代码3_led_c_sp,代码4_leds_c_icache与其的唯一区别在于在start.S中增加了控制icache的代码。
相关代码如下:
mrc p15, 0, r0, c1, c0, 0
#ifdef CONFIG_SYS_ICACHE_OFF
bic r0, r0, #0x00001000 @ clear bit 12 (I) I-cache
#else
orr r0, r0, #0x00001000 @ set bit 12 (I) I-cache
#endif
mcr p15, 0, r0, c1, c0, 0
如果没有定义CONFIG_SYS_ICACHE_OFF则打开icache,否则关闭icache。至于协处理器的相关指令,可查阅ARM公司的相关手册,或者相关芯片手册或者《arm体系结构与编程》一书等。
三、完整的烧写过程
已将SD卡插入电脑,假设Linux识别了SD卡,其识别号为sdb。执行下面命令:
# chmod 777 –R 4_leds_c_icache
# cd 4_leds_c_icache
# make
# cd sd_fuse
# make
# ./ fast_fuse /dev/sdb
四、上电实验
将sd卡插入Tiny4412中,选择sd卡启动,然后上电,可以看到以下现象:
LED正常闪烁,只是闪烁得非常慢,这是因为代码里的延时时间相比以前被增大了10倍。我们知道IROM的固化代码已经帮我们启动了icache,如果要体验icache 的威力,只需通过定义宏CONFIG_SYS_ICACHE_OFF来关闭icache。经测试,当关闭icache时,LED闪烁一次的时间大约需要45秒,而打开icache时,LED闪烁一次则需要35秒左右,可见打开icache节省了10S左右的时间。
史海拾趣
|
在网上找了个密码锁程序来学习,用KEIL编译,开始不能生成HEX文件,后来找到原因了,有些是数字0打成了字母O,有些是漏了冒号! 现在想问一下,这个程序应该怎样读?密码是如何设置的?刚学,搞不懂. org 0000h AJMP START ORG 0030H START:ACALL BP ...… 查看全部问答> |
|
最近接手一个wince项目,使用QT4.4.3做的,现在要解决的问题是在控件上输入的时候,调用出wince自带的手写输入法 我现在的设想是 做一个Dll,用SipEnumIM枚举所有的输入法,然后查找出的wince自带的手写输入法的CLSID,将手写输入法的CLSID设置为 ...… 查看全部问答> |
|
在德州仪器额微博中看到了这个评估套件的视频,分享给大家! 视频内容简要介绍了这款强大的评估套件 [ 本帖最后由 IC爬虫 于 2012-10-24 12:11 编辑 ]… 查看全部问答> |
|
为什么UC3843驱动MOS管的波形,只有几个周期有波形,其它时间没有? 我现在用UC3843控制MOS管来做boost升压电路,测量UC3843的6脚输出波形发现,只有几个周期有波形,其它时间输出波形一直为低。24VDC升压到120VDC,0.25A,开关频率为220K。请问这是为什么? … 查看全部问答> |
|
我知道怎样得到随机数,但是不知道怎样将这个数和字库中的汉字对应起来并显示出来? 我的汉字显示函数为: LCD_PutString(200,210,\"确\",Red,Blue2);//显示“确”字 上面的语句中“确”字是用引号括起来的。例如“确”字在字库中排在第一个,而 ...… 查看全部问答> |




