中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ARM存儲器之:高速緩沖存儲器Cache

        ARM存儲器之:高速緩沖存儲器Cache

        作者: 時間:2013-09-30 來源:網絡 收藏

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

        (2)指令Cache

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

        ①地址為A1的指令被預取,該指令的數據行被取到Cache中。

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

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

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

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

        ·對于使用數據和指令分離Cache的系統(tǒng),使指令Cache的內容無效。

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

        上述操作系列可作為一種標準,應用于一些典型的場合。

        注意

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

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

        DMA操作直接訪問內存,不更新Cache和寫緩存區(qū)中相應內容,這樣就很可能造成數據不一致。

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

        ·將DMA訪問的存儲器設置成非緩存的

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

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

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

        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

        ;

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

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

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

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

        ;開啟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 ;允許訪問

        ;

        ;設置全局配置

        ;

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

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

        ORRr0,r0,#0x1 ;開啟MPU

        存儲器相關文章:存儲器原理




        評論


        相關推薦

        技術專區(qū)

        關閉