历史上的今天
返回首页

历史上的今天

今天是:2024年12月21日(星期六)

2021年12月21日 | Tiny4412裸机程序之操作ICache

2021-12-21 来源: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。


二、再介绍一下ARM协处理器CP15及MCR和MRC指令  

在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的。CP15包含16个32位的寄存器,其编号为0~15。


访问CP15寄存器的指令

  • MCR   ARM寄存器到协处理器寄存器的数据传送

  • MRC   协处理器寄存器到ARM寄存器的数据传送

MCR指令和MRC指令只能在处理器模式为系统模式时执行,在用户模式下执行MCR指令和MRC指令将会触发未定义指令的异常中断。


①MCR指令

MCR指令将ARM处理器的寄存器中的数据传送到协处理器寄存器中。如果协处理器不能成功地执行该操作,将产生未定义的指令异常中断。


指令语法格式:


MCR{}

,< opcode_1>,,,{,}

MCR{} p15,0,,,{,}


其中,为指令执行的条件码。当忽略时指令为无条件执行。

< opcode_1>为协处理器将执行的操作的操作码。对于CP15协处理器来说,< opcode_1>永远为0b000,当< opcode_1>不为0b000时,该指令操作结果不可预知。

作为源寄存器的ARM寄存器,其值将被传送到协处理器寄存器中。

作为目标寄存器的协处理器寄存器,其编号可能是C0,C1,…,C15。

两者组合决定对协处理器寄存器进行所需要的操作,如果没有指定,则将为为C0,opcode_2为0,否则可能导致不可预知的结果。

The CRm field and opcode_2 field are used to specify a particular action when addressing registers.The opcode_1, opcode_2 and CRm fields should be zero, except when the values specified are used to select the desired operations, in all instructions which access CP15. Using other values will result in unpredictable behavior. Attempting to read from a non-readable register, or writing to a non-writable register will cause unpredictable results.


使用示例:

下面的指令从ARM寄存器R4中中将数据传送到协处理器CP15的寄存器C1中。其中R4为ARM寄存器,存放源操作数,C1、C0为协处理器寄存器,为目标寄存器,opcode_1为0,opcode_2为0。


MCR  p15,  0,  R4,  C1,  C0,  0


②MRC指令

MRC指令将协处理器的寄存器中的数值传送到ARM处理器的寄存器中、如果协处理器不能成功地执行该操作,将产生未定义的指令异常中断。


指令语法格式:


MRC{}

,< opcode_1>,,,{,}

MRC{} p15,0,,,{,}


参数用法同MCR指令

先介绍到这里,等着开一篇文章专门介绍CP15协处理器的寄存器


三、程序说明


从这一小节开始,我们加入自己关闭看门狗的代码,尽管IROM已经这样做了:


// 关闭看门狗

ldr r0, =0x10060000

mov r1, #0

str r1, [r0]

基于上一个实验的程序,其他文件不动,我们只改变start.S文件,增加如下代码:


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

orr r0, r0, #0x00001000

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


这样就打开了ICache。


四、程序编译及烧写

1.编译

通过FTP或者其他工具将文件上传到服务器上去,输入make命令进行编译将得到open_ichche.bin文件。


2.烧写

将SD卡插入电脑,并让VmWare里的Ubuntu识别出来,然后执行如下命令:


sudo ./sd_fusing.sh /dev/sdb ../7_open_icache/open_icache.bin


五、上电实验

你会发现LED闪动的频率和上一个实验完全相同,为什么呢?因为IROM的固化代码已经帮我们启动了icache,如果我们要想体验icache 的威力,只需修改start.S文件为以下即可:


// 打开icache可提高运行速度

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

//orr r0, r0, #0x00001000 //打开ICache

bic r0, r0, #0x00001000 //关闭ICache

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


然后重新编译、烧写、上电运行,你会发现LED的闪动频率慢了很多很多,由此就可以看到ICache的强大威力!!

推荐阅读

史海拾趣

千志电子(CCO)公司的发展小趣事

为了满足市场需求和扩大生产规模,千志电子不断加大投资力度。2014年,千志电子在湖北投资建设了千志电子科技(湖北)有限公司项目,总投资额达到5000万元人民币。该项目占地面积50亩,主要生产电阻等电子产品。预计项目建成后可实现年产值4000万元,年创利税350万元,安置劳动力120人左右。这一项目的投资建设不仅使千志电子的生产规模得到了进一步扩大,还为其未来的发展奠定了坚实基础。

Hirose公司的发展小趣事

千志电子一直注重技术研发和创新,不断推动产业升级。公司拥有一支专业的研发团队和先进的研发设备,致力于电阻技术的研发和创新。通过与高校和科研机构的合作,千志电子不断引进新技术、新工艺和新材料,提高产品的技术含量和附加值。同时,千志电子还注重知识产权的保护和管理,积极申请专利和注册商标,维护了自身的合法权益。

Andersen Laboratories Inc公司的发展小趣事

为了更好地服务全球客户,AnalogicTech积极实施全球化运营策略。公司在亚洲和大中华地区建立了广泛的晶圆制造和后端合作伙伴网络,包括香港地区、上海和台湾地区的台北。此外,AnalogicTech还迁入香港科技园,将深圳地区纳入业务版图,提高在中国大陆的销售情况,特别是珠江三角洲地区。

深圳杜因特(DOINGTER)公司的发展小趣事

为了进一步提升自身实力和市场竞争力,杜因特积极寻求与国内外一流芯片代工厂、封装测试代工厂的合作。通过紧密的合作关系,杜因特不仅获得了先进的技术支持,还实现了产品质量的稳步提升。同时,公司还积极与国内外知名电子企业建立战略合作关系,共同开拓市场,实现共赢发展。

HANBIT Electronics公司的发展小趣事

在竞争激烈的电子行业中,杜因特始终将创新作为公司发展的核心动力。公司不断投入大量资源进行新产品的研发和技术创新,特别是在Super-Junction MOSFET和Super-Trench MOSFET等高端产品领域取得了显著成果。这些创新产品不仅满足了市场对高品质MOSFET的日益增长需求,还进一步巩固了杜因特在电子行业的技术领先地位。

Engelking Elektronik GmbH公司的发展小趣事

随着国内市场的饱和,Engelking Elektronik开始寻求海外市场的发展。公司制定了详细的国际化战略,包括参加国际电子展会、拓展海外销售渠道以及建立海外生产基地等。通过不断努力,Engelking Elektronik成功进入了欧洲、北美和亚洲等多个国家和地区的市场。同时,公司还积极适应不同地区的文化和市场需求,提供定制化的产品和服务。

问答坊 | AI 解惑

英飞凌一季度首次当上内存老二

据国外媒体报道,众所周知,从5月1日开始,欧洲芯片巨头德国英飞凌的内存业务将分拆为一个独立的公司。而在\"自立门户\"之前,内存业务的表现也十分不俗。据半导体行业市场调研公司iSuppli的报告,今年第一季度,英飞凌内存业务力压韩国现代和美国 ...…

查看全部问答>

DSP在自动目标识别中的应用

自动目标识别(ATR)算法通常包括自动地对目标进行检测、跟踪、识别和选择攻击点等算法。战场环境的复杂性和目标类型的不断增长使ATR算法的运算量越来越大,因此ATR算法对微处理器的处理能力提出了更高的要求。由于通用数字信号处理芯片能够通过编 ...…

查看全部问答>

AVR USART0的一个接收中断程序想不明白?求高手指教!!!

我想写的程序,用串口调试助手通信,发送以*S开头的数据,例如:*S123.    单片机返回是step:123  。如果不是以*S开头,就输出空格。我用的是CVAVR的  这个编译器的生产代码好难看懂,我的想法是将接收的数据URD放 ...…

查看全部问答>

简单一步,增强wifi接收信号,定位焦点

最近台式电脑使用wifi上网,网速很不稳定,于是自己动手改造一下天线,增强接收信号,方法很简单,在原来的天线末端,焊上一条天线上去,我比较懒,直接那一段锡焊了上去,长度与原来电路板上的天线差不多就行,因为天线的长度为接收信号波长的整数 ...…

查看全部问答>

求助高手!

求助高手!为什么用来存储红外解码的四个8位二进制的数据,只在中断函数里面是正确的,在主函数里面始终不对。请高手帮我看下程序。谢谢!!!…

查看全部问答>

【C2000 LaunchPad】单相交流电压+电流表

项目名称:单相交流电压、电流表 功能描述:测量某一相交流支路的电压、电流、频率、功率因数 实施方案描述:互感器采样信号,经运放调理进AD,通过算法(fft或者均方根)计算交流电压、电流、频率、功率因数。 预期测量范围:电压0~300V,电流0 ...…

查看全部问答>

stm32外部中断,求大神指导

/***********************************************************************                       火牛开发板基础实验             &n ...…

查看全部问答>

fpga求教

在我工作的过程中经常会遇到fpga芯片,请问大神们这是什么东东的芯片,在电路中主要起什么作用?通俗易懂的解释,谢谢!…

查看全部问答>