tiny4412 裸机程序 五、控制icache

发布者:古通闲人最新更新时间:2022-01-11 来源: eefocus关键字:tiny4412  裸机程序 手机看文章 扫描二维码
随时随地手机看文章

一、什么是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左右的时间。


关键字:tiny4412  裸机程序 引用地址:tiny4412 裸机程序 五、控制icache

上一篇:tiny4412 裸机程序 三、关闭看门狗和调用C程序
下一篇:Tiny4412 开发板 编译环境搭建【转】

推荐阅读最新更新时间:2024-11-09 12:15

tiny4412 串口驱动分析一 --- u-boot中的串口驱动
开发板:tiny4412ADK+S700 4GB Flash 主机:Wind7 64位 虚拟机:Vmware+Ubuntu12_04 u-boot:U-Boot 2010.12 Linux内核版本:linux-3.0.31 Android版本:android-4.1.2 我们以tiny4412为例分析串口驱动,下面我们从u-boot开始分析,然后再分析到Linux。 串口初始化 关于这部分代码流程参考件: tiny4412 u-boot 启动.pdf ,这里主要分析函数:uart_asm_init 在初始化串口驱动之前已经进行了系统时钟以及内存的初始化。下面的代码取自board/samsung/tiny441
[单片机]
<font color='red'>tiny4412</font> 串口驱动分析一 --- u-boot中的串口驱动
mini2440烧写裸机程序(linux+JLink)
一、编写源代码 源代码: /*******************************led_off.S**************************/ .text .global _start _start: LDR R0,=0x56000010 MOV R1,#0x00015400 STR R1, LDR R0,=0x56000014 MOV R1,#0x0df STR R1, MAIN_LOOP: B MAIN_LOOP /****************************
[单片机]

推荐帖子

一条疑惑的ARM 汇编语句
这条ARM汇编语句什么意思?movr4,%0上下文如下:__asm__(/*Loadpagetablepointer*/movr4,%0\\nmcrp15,0,r4,c2,c0,0\\n/*loadpagetablepointer*//*Writedomainid(cp15_r3)*/mvnr0,#0\\n/*Domain
wx8028 ARM技术
哪位大神有STM8S00的库函数么,感激不尽感激不尽
找了好久都找不到8s的库函数,只能找到8L的,都不知道能不能用,好虐心哪位大神有STM8S00的库函数么,感激不尽感激不尽ST的官网有相关的固件库的,所以你按照如下的截图中的红色方框中的标识,作为关键字在官网搜索。然后下载。。。。。。。。。。。。。。。。。用寄存器吧~~~~~
文涛 stm32/stm8
请问一下各位,2.8寸320X240的TFT最便宜的多少钱一片
请问一下各位,2.8寸320X240的TFT最便宜的多少钱一片,谢谢!!请问一下各位,2.8寸320X240的TFT最便宜的多少钱一片不到100元,80元左右65元左右吧,看多少量了量多价格肯定会低点http://item.taobao.com/auction/i...f51f15f68cd8075.htm 这个好http://it
zhou.63624 stm32/stm8
MSP430的看门狗常见用法以及中断函数的书写方法
看了一下MSP430的看门狗的基本用法看门狗是为了防止程序跑飞而设定的,但是由于看门狗是一个类似于定时器,因此可以把他当作定时器来使用示例代码:用看门狗定时器使一个led闪烁#includemsp430x14x.hvoidmain(void){//StopwatchdogtimertopreventtimeoutresetWDTCTL=WDT_MDLY_32;//宏定义IE1|=WDTIE;//允许看门狗定时器中断P2DIR|=BI
fish001 微控制器 MCU
干货分享 | 激光技术基础你知多少?
什么是激光?LASER是由LightAmplificationbyStimulatedEmissionofRadiation(光受激辐射放大)的各首字母组成的缩写词。Laser为人工光源,具有与自然光不同的特性,因此开发成实用技术被广泛应用于各种领域。激光的用途激光可直线传播到很远,并且可聚集在较小范围等,人们活用这些特性,广泛应用激光。激光市场不断扩大,正在帮助制造
ohahaha RF/无线
Direct polar modulation has the right stuff
Drivenbytheneedforimprovedefficiencyandsupportformultiplecomplexstandards,polarmodulationsolutionsforcellularradiosareemergingasthedefactostandardmodulationtechniqueintheGSM/Edgemarket.Polartechniquesprovidesuperio
fly RF/无线
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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