<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          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://www.ex-cimer.com/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ǔ)器寫(xiě)操作修改。這個(gè)數(shù)據(jù)寫(xiě)操作可能影響數(shù)據(jù)Cache中、寫(xiě)緩存中和主存的地址為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是寫(xiě)回類(lèi)型的,清空數(shù)據(jù)Cache。

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

          注意

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

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

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

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

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

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

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

          ·在DMA訪(fǎng)問(wèn)期間限制存儲(chǔ)器訪(fǎng)問(wèn)DMA所訪(fǎng)問(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è)置的新值寫(xiě)回

          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地址開(kāi)始的4GB存儲(chǔ)空間

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

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

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

          ;開(kāi)啟region0

          MOVr0,#2_111111

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

          ;開(kāi)啟region1

          MOVr0,#2_100011

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

          ;開(kāi)啟region2

          LDRr0,=2_110001+0x24000000

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

          ;開(kāi)啟region3

          LDRr0,=2_110111+0x10000000

          MCRp15,0,r0,c6,c3,0 ;region3區(qū)域3

          ;開(kāi)啟Cache/寫(xiě)緩存

          MOVr0,#2_0110

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

          MCRp15,0,r0,c3,c0,0 ;寫(xiě)緩存

          ;開(kāi)啟access允許

          MOVr0,#2_11111100

          MCRp15,0,r0,c5,c0,0 ;允許訪(fǎng)問(wèn)

          ;

          ;設(shè)置全局配置

          ;

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

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

          ORRr0,r0,#0x1 ;開(kāi)啟MPU

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




          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();