新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM存儲(chǔ)器之:高速緩沖存儲(chǔ)器Cache

ARM存儲(chǔ)器之:高速緩沖存儲(chǔ)器Cache

作者: 時(shí)間:2013-09-30 來(lái)源:網(wǎng)絡(luò) 收藏

本文引用地址:http://m.butianyuan.cn/article/257011.htm

(2)指令Cache

當(dāng)系統(tǒng)中采用分離的數(shù)據(jù)Cache和指令Cache時(shí),下面的幾種情況可能造成指令不一致情況的發(fā)生。

①地址為A1的指令被預(yù)取,該指令的數(shù)據(jù)行被取到Cache中。

②和A1同在一個(gè)數(shù)據(jù)行的地址為A2的數(shù)據(jù)被一條存儲(chǔ)器寫操作修改。這個(gè)數(shù)據(jù)寫操作可能影響數(shù)據(jù)Cache中、寫緩存中和主存的地址為A2的存儲(chǔ)單元內(nèi)容,但不影響指令Cache中地址為A2的存儲(chǔ)單元中的內(nèi)容。

③如果地址A2存放的是指令,當(dāng)該指令執(zhí)行時(shí),就可能發(fā)生指令不一致問(wèn)題。如果地址A2所在的行還在指令Cache中,系統(tǒng)將執(zhí)行修改前的指令;如果地址A2所在的行不在指令Cache中,地址將執(zhí)行修改后的指令。

為了避免這種指令不一致的情況發(fā)生,要在地址A2的數(shù)據(jù)被修改前執(zhí)行一些防護(hù)性的操作。也就是說(shuō),在步驟①和②之間插入下面必要的操作。

·如果系統(tǒng)中使用的數(shù)據(jù)、指令統(tǒng)一的Cache,程序跳到步驟②繼續(xù)執(zhí)行。

·對(duì)于使用數(shù)據(jù)和指令分離Cache的系統(tǒng),使指令Cache的內(nèi)容無(wú)效。

·對(duì)于使用數(shù)據(jù)和指令分離Cache的系統(tǒng),如果數(shù)據(jù)Cache是寫回類型的,清空數(shù)據(jù)Cache。

上述操作系列可作為一種標(biāo)準(zhǔn),應(yīng)用于一些典型的場(chǎng)合。

注意

當(dāng)可執(zhí)行文件加載到主存中后,在程序跳轉(zhuǎn)到入口點(diǎn)處開始執(zhí)行之前,先執(zhí)行上述操作序列,以保證新加載的可執(zhí)行代碼正確執(zhí)行。

(3)DMA造成的數(shù)據(jù)不一致

DMA操作直接訪問(wèn)內(nèi)存,不更新Cache和寫緩存區(qū)中相應(yīng)內(nèi)容,這樣就很可能造成數(shù)據(jù)不一致。

為了避免DMA造成的數(shù)據(jù)不統(tǒng)一,根據(jù)系統(tǒng)情況,執(zhí)行下面操作的一種和幾種。

·將DMA訪問(wèn)的存儲(chǔ)器設(shè)置成非緩存的

·將DMA訪問(wèn)的存儲(chǔ)區(qū)所涉及的數(shù)據(jù)Cache中的行設(shè)置成無(wú)效,或者清空數(shù)據(jù)Cache。

·清空寫緩存區(qū)(將寫緩存區(qū)中延時(shí)操作全部執(zhí)行)。

·在DMA訪問(wèn)期間限制存儲(chǔ)器訪問(wèn)DMA所訪問(wèn)的存儲(chǔ)區(qū)域。

15.3.9Cache初始化子程序示例

下面給出了一段例子代碼,此代碼以740T芯片為參考,顯示了Cache初始化的標(biāo)準(zhǔn)過(guò)程。

;下面代碼必須運(yùn)行于處理器的特權(quán)模式下。

AREAINIT740,CODE,READONLY ;設(shè)置段屬性

ENTRY

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

Cache_Init

;禁止MMU/MPU

;清理數(shù)據(jù)Cache

;

;

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

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

MCRp15,0,r0,c1,c0,0 ;將設(shè)置的新值寫回

MOVr0,#0 ;準(zhǔn)備禁止其他域

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

;

;區(qū)域0:背景區(qū):從0x0地址開始的4GB存儲(chǔ)空間

;區(qū)域1:SRAM區(qū):從0x0地址開始的0x4000字節(jié)存儲(chǔ)空間

;區(qū)域2:FLASH:從0x24000000開始的0x02000000字節(jié)存儲(chǔ)空間

;區(qū)域3:外設(shè)區(qū):從0x10000000地址開始的0x10000000字節(jié)存儲(chǔ)空間

;開啟region0

MOVr0,#2_111111

MCRp15,0,r0,c6,c0,0 ;region0區(qū)域0

;開啟region1

MOVr0,#2_100011

MCRp15,0,r0,c6,c1,0 ;region1區(qū)域1

;開啟region2

LDRr0,=2_110001+0x24000000

MCRp15,0,r0,c6,c2,0 ;region2區(qū)域2

;開啟region3

LDRr0,=2_110111+0x10000000

MCRp15,0,r0,c6,c3,0 ;region3區(qū)域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 ;允許訪問(wèn)

;

;設(shè)置全局配置

;

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

ORRr0,r0,#(0x12) ;開啟Cache

ORRr0,r0,#0x1 ;開啟MPU

存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理




評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉