色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

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

          本文引用地址:http://cafeforensic.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ǔ)器寫操作修改。這個(gè)數(shù)據(jù)寫操作可能影響數(shù)據(jù)Cache中、寫緩存中和主存的地址為A2的存儲(chǔ)單元內(nèi)容,但不影響指令Cache中地址為A2的存儲(chǔ)單元中的內(nèi)容。

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

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

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

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

          ·對(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操作直接訪問內(nèi)存,不更新Cache和寫緩存區(qū)中相應(yīng)內(nèi)容,這樣就很可能造成數(shù)據(jù)不一致。

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

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

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

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

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

          15.3.9Cache初始化子程序示例

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

          ;下面代碼必須運(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 ;允許訪問

          ;

          ;設(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)閉