历史上的今天
返回首页

历史上的今天

今天是:2025年03月25日(星期二)

正在发生

2020年03月25日 | tiny4412开发板icache操作程序

2020-03-25 来源:eefocus

首先,来介绍关于cache的概念。


cache的作用:


基于程序访问的局限性,在主存和CPU通用寄存器之间设置了一个高速的、容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据从主存调入这个存储器,供CPU在一段时间内使用,这对提高程序的运行速度有很大的作用。这个介于主存和CPU之间的高速小容量存储器称作高速缓存存储器(Cache)。


启用Cache后,CPU读取数据时,如果Cache中有这个数据的复本则直接返回,否则从主存中读入数据,并存入Cache中,下次再使用(读/写)这个数据时,可以直接使用Cache中的复本。


启用Cache后,CPU写数据时有写穿式和回写式两种方式。


(1)写穿式(Write Through)

任一从CPU发出的写信号送到Cache的同时,也写入主存,可以保证主存的数据能同步地更新。它的优点是操作简单,但由于主存的慢速,降低了系统的写速度并占用了总线的时间。


(2)回写式(Write Back)

为了克服贯穿式中每次数据写入时都要访问主存,从而导致系统写速度降低并占用总线时间,尽量减少对主存的访问次数,又有了回写式。


它是这样工作的:数据一般只写到Cache,这样有可能出现Cache中的数据得到更新而主存中的数据不变(数据陈旧)的情况。但此时可在Cache中设一标志地址及数据陈旧的信息,只有当Cache中的数据被换出或强制进行清空操作时,才能将更新的数据写入主存相应的单元中。这样保证了Cache和主存中的数据一致。


先介绍Cache的两个操作。

(1)清空:把Cache或Write buffer中已经脏的(修改过,但未写入主存)数据写入主存。

(2)使无效:使之不能再用,并不将脏的数据写入主存。


ICache的使用比较简单。系统刚上电或复位时,ICache中的内容是无效的,并且ICache功能是关闭着的。往Icr(CP15协处理器中寄存器1的第12位)写1可以启动ICache,写0可以停止ICache。


ICache一般在MMU开启之后被使用,此时页表中描述符的C位用来表示一段内存是否可以被ICache。若Ctt=1,则允许ICache,否则不允许被ICache。但是,即使MMU没有开启,ICache也可以被使用的,这时CPU读取指令时所涉及的内存都被当做是允许ICache的。


ICache被关闭时,CPU每次读取指令都读取主存,性能非常低。所以,通常尽早启动ICache。


ICache被开启后,CPU每次读取指令时都会先在ICache中查看是否能找到所要的指令,而不管Ctt是0还是1。如果找到了,称为Cache命中,如果找不到,称为Cache缺失。ICache被开启后,CPU的取指分为如下3种情况。


(1)Cache命中且Ctt为1时,从ICache中取出指令,返回给CPU。

(2)Cache缺失且Ctt为1时,CPU从主存中读出指令。同时,一个被称为"8-word linefill"的动作将发生,这个动作把该指令所处区域8个word写进ICache的某个条目中。这有可能会覆盖某个条目,可以使用Pseudo-random算法或round-robin算法在ICahe中选出某个没有被锁定的条目。可以通过CP15协处理器中寄存器1的第14位来选择使用哪种算法。

(3)Ctt为0时,CPU从主存中读取指令。


OK,关于Cache的基本知识已经介绍完毕了。要开启DCache需要先开启MMU,所以这里我们只讲解关于ICache的操作。


在上面已经介绍了,如果要开启ICache,需要操作CP15协处理的寄存器1的bit12,写入1表示开启,写入0表示关闭。


先来看两条操作CP15协处理器的指令:MCR和MRC指令。


MCR:


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

指令的语法格式:


MCR{} p15, {opcode_1} , , , {,}

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


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


作为源寄存器的ARM寄存器,其值被传送到得协处理器寄存器中。不能为PC,当其为PC时,指令操作结果不可预知。


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


附加的目标寄存器或者原操作数寄存器,用于区分同一个编号的不同物理寄存器。当指令中不需要提供附加信息时,将C0指定为,否则指令操作结果不可预知。


提供附加信息,用于区别同一个编号的不同物理寄存器。当指令中指定附加信息时,省略或者将其指定为0,否则指令操作结果不可预知。否则指令操作结果不可预知。


MRC:


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

指令的语法格式:


MRC{} p15, {opcode_2}, , , {,}


操作ICache程序示例;


我们使用前面操作LED循环点亮的程序。首先,不开启ICache,查看LED的亮灭时间间隔。然后开启ICache,查看LED的亮灭时间间隔。


start.S文件内容如下:


.text

.global _start

_start:

//注意:在芯片的iROM中已经开启了ICache;即使这里开启也观察不到什么变化;

//所以这里将ICache关闭,观察LED的亮灭情况;可以和原来的对比发现,速度慢了很多

//将CP15协处理器的C1寄存器的值保存到R0寄存器中

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

//将R0中的数据的BIT12置0

bic r0, r0, #0x00001000

//将R0中的数据写回CP15协处理器的C1寄存器中

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

ldr sp, =0x02027400 //设置栈

bl main //跳转到mian函数开始执行

halt_loop: //死循环

b halt_loop

上面的程序中已经做了详细的注释,将ICache禁止了。可以将程序编译并烧写。查看LED的闪亮时间间隔。发现和原来的程序相比LED闪亮周期大了很多。


本文完毕!

推荐阅读

史海拾趣

ABI Electronics公司的发展小趣事

随着电子行业的快速发展,集成电路测试成为了ABI Electronics公司新的增长点。ABI团队针对集成电路的复杂性和多样性,开发出了先进的集成电路测试仪。该测试仪具备高精度、高可靠性、高自动化等特点,能够快速准确地检测集成电路的性能和故障,为集成电路的生产和研发提供了有力的支持。

Anytek Technology Corporation Ltd公司的发展小趣事

Anytek始终坚持以创新为驱动,不断推出具有市场竞争力的新产品。2007年,公司自主研发的创新型产品“高清汽车行车记录仪”面世,这款产品以其高清画质、稳定性能和易用性等特点,迅速占领了市场制高点。随后,Anytek又于2008年推出了行业唯一一款双镜头的“双镜头行车记录仪”,这一创新设计进一步提升了行车记录仪的功能性和实用性,赢得了市场的广泛认可。

EHC(ELECTRONICHARDWARE)公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。EHC公司深知这一点,因此一直将品质管理作为企业发展的重要战略。公司建立了完善的质量管理体系,从原材料采购到生产制造再到产品出厂,每一个环节都经过严格的把控。这种对品质的坚持和追求让EHC公司的产品在市场上赢得了广泛的信任和认可。

Deltrol Controls公司的发展小趣事

在电子行业中,每个客户的应用场景都各不相同,对产品的需求也千差万别。Deltrol Controls深知这一点,因此一直致力于提供专业化的定制组件服务。无论是电磁阀、软管组件还是其他产品,Deltrol Controls都能根据客户的需求进行定制化设计和生产。这种专业化的服务赢得了客户的信任和好评,也为Deltrol Controls在电子行业中树立了良好的口碑。

请注意,以上故事均为虚构,旨在展示Deltrol Controls在电子行业中的成长和进步。如有需要,建议查阅相关文献资料或公司官方网站以获取更准确的信息。

ECI公司的发展小趣事

面对日益激烈的市场竞争,ECI公司积极开拓国际市场。公司成立了专门的国际市场部,负责海外市场的调研、开发和推广。通过深入了解不同国家和地区的市场需求和文化差异,ECI公司成功推出了符合当地消费者需求的电子产品。同时,公司还与多家国际知名企业建立了长期稳定的合作关系,进一步扩大了市场份额。

DLP Design公司的发展小趣事

DLP科技,一家以DLP技术为核心的创新设计公司,在电子行业的快速发展中崭露头角。公司创始人李博士,凭借对DLP技术的深入研究和独到见解,带领团队开发出了一系列具有革命性的产品。从最初的DLP投影机到后来的无屏电视,DLP科技不断突破技术瓶颈,引领市场潮流。通过持续的创新和研发,DLP科技在电子行业树立了技术领先的地位。

问答坊 | AI 解惑

一个非常不错的串口程序

//PC读MCU指令结构:(中断方式,ASCII码表示) //帧: 帧头标志|帧类型|器件地址|启始地址|长度n|效验和|帧尾标志 //值: ’n’ ’y’| ’r’ | 0x01 | x | x | x |0x13 0x10 //字节数: 2 | 1 | 1 | 1 | 1 | 1 | 2 //求和: ////////// ...…

查看全部问答>

短消息不好用

不知道咱们段消息,在打开总是让人失望,没有什么东西!不知道管理员有什么办法没有,有个链接也好啊!…

查看全部问答>

关于mini2440 NAND Flash 的一些困惑

在OURAVR上看到有个讨论MINI2440的帖子,刚好也有疑问,所以转来问问大家: 1、系统重NAND Flash启动时,是谁把NAND Flash前面的部分数据搬移到内部SRAM里面的?是单独由S3C2440内部硬件电路实现的?或是需要外部硬件电路的配合? 2、友善之臂移 ...…

查看全部问答>

人体等效于什么?比较酷

实验过程中,人体的移动(靠近或远离电路)有时候会影响电路,这是可能是由于工频的影响(人体接示波器输入有工频信号)。 在这种情况下:人体的影响应该用什么来等效呢?有时候电路非要人体接近或者接触某些元件,电路才能正常工作。碰到这种情 ...…

查看全部问答>

丰田怎么了?——从大量召回所想到的……

丰田从2009年起到现在的一连串汽车召回事件使得该公司面临70多年发展史上最为严峻的品牌信任危机。   200万辆、400万辆、800万辆……,丰田汽车此次在全球的召回的总量很可能超过其2009年698万辆的全球总销量。继2009年丰田在中国大陆一次性召 ...…

查看全部问答>

51单片机基础学习(一)--写端口

     接触单片机也有二年了吧,开始是从51下手的,主要是因为当时周围的人都在学51,而且上课讲的也是51,还有就是51资料很多,在这里俺把俺当年学习的东东拿出来供那些还没有入门的兄弟姐妹们学习学习……    & ...…

查看全部问答>

哪些SD接口网卡是用AR6001系列的芯片组.

请问用Athros的AR6001芯片组做的wifi无线网卡有哪些? 虽然这款芯片用的非常广. 但不知道哪些SD接口网卡是用AR6001系列的芯片组. …

查看全部问答>

STM32F103中断交流

以前听说前后台的操作模式,一般不在中断服务程序里写复杂的算法,即使各个中断协调的很好。说是因为进中断的时候CPU不一定将全部的寄存器保护,所以会影响程序正确性。请问STM32有这样的问题吗?期待DX们来交流!…

查看全部问答>

手机的摄像头的变焦功能

有对手机摄像头的变焦功能了解的吗,来说说看是怎么实现的…

查看全部问答>