新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > ARM存储器之:高速缓冲存储器Cache

ARM存储器之:高速缓冲存储器Cache

作者:时间:2013-09-30来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/257011.htm

(2)指令Cache

当系统中采用分离的数据Cache和指令Cache时,下面的几种情况可能造成指令不一致情况的发生。

①地址为A1的指令被预取,该指令的数据行被取到Cache中。

②和A1同在一个数据行的地址为A2的数据被一条存储器写操作修改。这个数据写操作可能影响数据Cache中、写缓存中和主存的地址为A2的存储单元内容,但不影响指令Cache中地址为A2的存储单元中的内容。

③如果地址A2存放的是指令,当该指令执行时,就可能发生指令不一致问题。如果地址A2所在的行还在指令Cache中,系统将执行修改前的指令;如果地址A2所在的行不在指令Cache中,地址将执行修改后的指令。

为了避免这种指令不一致的情况发生,要在地址A2的数据被修改前执行一些防护性的操作。也就是说,在步骤①和②之间插入下面必要的操作。

·如果系统中使用的数据、指令统一的Cache,程序跳到步骤②继续执行。

·对于使用数据和指令分离Cache的系统,使指令Cache的内容无效。

·对于使用数据和指令分离Cache的系统,如果数据Cache是写回类型的,清空数据Cache。

上述操作系列可作为一种标准,应用于一些典型的场合。

注意

当可执行文件加载到主存中后,在程序跳转到入口点处开始执行之前,先执行上述操作序列,以保证新加载的可执行代码正确执行。

(3)DMA造成的数据不一致

DMA操作直接访问内存,不更新Cache和写缓存区中相应内容,这样就很可能造成数据不一致。

为了避免DMA造成的数据不统一,根据系统情况,执行下面操作的一种和几种。

·将DMA访问的存储器设置成非缓存的

·将DMA访问的存储区所涉及的数据Cache中的行设置成无效,或者清空数据Cache。

·清空写缓存区(将写缓存区中延时操作全部执行)。

·在DMA访问期间限制存储器访问DMA所访问的存储区域。

15.3.9Cache初始化子程序示例

下面给出了一段例子代码,此代码以740T芯片为参考,显示了Cache初始化的标准过程。

;下面代码必须运行于处理器的特权模式下。

AREAINIT740,CODE,READONLY ;设置段属性

ENTRY

EXPORTCache_Init ;以便作为子程序被其他程序使用

Cache_Init

;禁止MMU/MPU

;清理数据Cache

;

;

MRCp15,0,r0,c1,c0,0 ;读CP15寄存器c1到r0

BICr0,r0,#0x1 ;清除bit[0]

MCRp15,0,r0,c1,c0,0 ;将设置的新值写回

MOVr0,#0 ;准备禁止其他域

MCRp15,0,r0,c6,c1,0

MCRp15,0,r0,c6,c2,0

MCRp15,0,r0,c6,c3,0

MCRp15,0,r0,c6,c4,0

;MCRp15,0,r0,c6,c5,0

;MCRp15,0,r0,c6,c6,0

;MCRp15,0,r0,c6,c7,0

;

;区域0:背景区:从0x0地址开始的4GB存储空间

;区域1:SRAM区:从0x0地址开始的0x4000字节存储空间

;区域2:FLASH:从0x24000000开始的0x02000000字节存储空间

;区域3:外设区:从0x10000000地址开始的0x10000000字节存储空间

;开启region0

MOVr0,#2_111111

MCRp15,0,r0,c6,c0,0 ;region0区域0

;开启region1

MOVr0,#2_100011

MCRp15,0,r0,c6,c1,0 ;region1区域1

;开启region2

LDRr0,=2_110001+0x24000000

MCRp15,0,r0,c6,c2,0 ;region2区域2

;开启region3

LDRr0,=2_110111+0x10000000

MCRp15,0,r0,c6,c3,0 ;region3区域3

;开启Cache/写缓存

MOVr0,#2_0110

MCRp15,0,r0,c2,c0,0 ;Cache

MCRp15,0,r0,c3,c0,0 ;写缓存

;开启access允许

MOVr0,#2_11111100

MCRp15,0,r0,c5,c0,0 ;允许访问

;

;设置全局配置

;

MRCp15,0,r0,c1,c0,0 ;读CP15寄存器到r0

ORRr0,r0,#(0x12) ;开启Cache

ORRr0,r0,#0x1 ;开启MPU

存储器相关文章:存储器原理




评论


相关推荐

技术专区

关闭