icache的方面以及使用
這次學(xué)習(xí)一下高速緩存icache的功能的開(kāi)關(guān)。
?首先鞏固一下這個(gè)mrc指令
MRC 指令的格式為:
MRC{<cond>}(條件)協(xié)處理器編碼,協(xié)處理器操作碼1,目的寄存器,源寄存器1,源寄存器2,協(xié)處理器操作碼2。
如 mrc ?p15 , 0 , r0 , c1 , c0 , 0 ;
? <cond>為指令執(zhí)行的條件碼,忽略則視為無(wú)條件執(zhí)行,該指令的作用是將 cp15 的寄存器c1,c0中的數(shù)據(jù)傳送到 ARM 處理器寄存器r0中,如果協(xié)處理器不能成功地執(zhí)行該操作,將產(chǎn)生未定義的指令異常中斷。源寄存器1,2:存放第1個(gè)和第2個(gè)操作數(shù)的協(xié)處理器寄存器。協(xié)處理器操作碼2:可選的協(xié)處理器特定操作碼,用來(lái)區(qū)分同一個(gè)編號(hào)的不同物理寄存器,當(dāng)不需要提供附加信息時(shí),指定為0。
? cp15是用于系統(tǒng)存儲(chǔ)管理的協(xié)處理器,對(duì)于CP15寄存器來(lái)說(shuō)協(xié)處理器操作碼1永遠(yuǎn)為0,否則結(jié)果不可預(yù)知。 ?
? cp15中的C1寄存器存放了高速緩存的控制功能,所以我們要通過(guò)寫(xiě)這個(gè)協(xié)處理器寄存器里面的位,來(lái)啟用icache高速緩存。
??
? C1寄存器的各個(gè)位說(shuō)明以及應(yīng)用:
? 0 1 2 3 4 5 6 7 8 9 10 11 ?12 ?13 ?14 ?15 ? 16~31
? M A C W P D L B S R F ?Z ?I ? V ? RR ?L4 ?SBZP/UNP ??
? 各個(gè)位的作用和含義:
? M:禁止/使能MMU或者M(jìn)PU(0:禁止MMU或者M(jìn)PU,1:使能MMU或者M(jìn)PU)(如果系統(tǒng)中沒(méi)有MMU或者M(jìn)PU,讀取時(shí)該位返回0,寫(xiě)入時(shí)忽略)
? A:對(duì)于可以選擇是否支持內(nèi)存訪(fǎng)問(wèn)時(shí)地址對(duì)齊檢查的系統(tǒng),本位禁止/使能地址對(duì)齊檢查功能(0:禁止地址對(duì)齊檢查功能,1:使能地址對(duì)齊檢查功能)(對(duì)寄存器進(jìn)行寫(xiě)操作時(shí),忽略該位)
?C: 當(dāng)數(shù)據(jù)Cache和指令Cache分開(kāi)時(shí),本控制位禁止/使能數(shù)據(jù)Cache。當(dāng)數(shù)據(jù)Cache和指令Cache統(tǒng)一時(shí),該控制位禁止/使能整個(gè)Cache.(0:禁止Cache, 1:使能Cache)
?W:禁止/使能寫(xiě)緩存(0:禁止寫(xiě)緩存,1:使能寫(xiě)緩存)
?P:對(duì)于向前兼容26位ARM處理器,本控制位控制PRGC32控制信號(hào)(0:異常中斷處理程序進(jìn)入32位地址模式,1:異常中斷處理程序進(jìn)入26位地址模式)
?D:對(duì)于向前兼容26位ARM處理器,本控制位控制DATA32控制信號(hào)(0:禁止26位地址異常檢查,1:使能26位地址異常檢測(cè))
L:對(duì)于ARMv3及以前版本,本控制位可以控制處理器的中止模式(0:選擇早期中止模式,1:選擇后期中止模式)
B: 對(duì)于存儲(chǔ)系統(tǒng)同時(shí)支持大/小端(big-endian/little-endian)的ARM處理器,該控制位配置系統(tǒng)使用哪種內(nèi)存模式
S:支持MMU的存儲(chǔ)系統(tǒng)中,本控制位用作系統(tǒng)保護(hù)
R:支持MMU的存儲(chǔ)系統(tǒng)中,本控制位用作ROM保護(hù)
F:本控制位由生產(chǎn)廠(chǎng)商定義
?Z:對(duì)于支持跳轉(zhuǎn)預(yù)測(cè)的ARM系統(tǒng),本控制位禁止/使能跳轉(zhuǎn)預(yù)測(cè)功能(0:禁止跳轉(zhuǎn)預(yù)測(cè)功能,1:使能跳轉(zhuǎn)預(yù)測(cè)功能)
?I:當(dāng)數(shù)據(jù)Cache和指令Cache是分開(kāi)的,本控制位禁止/使能指令Cache(0:禁止指令Cache ,1:使能指令Cache)
我們要寫(xiě)它的第I位,也就是第bit12位
??
? bic指令的用法:bic是位清除的指令,把操作數(shù)中為1的位對(duì)應(yīng)位置的數(shù)(寄存器中)變?yōu)?,然后再放到那個(gè)寄存器里去。
? 比如 bic r0 ,r0 ,0xF0000000 ? ?意思就是把r0高四位的值清零,然后再放回r0寄存器中。
? orr指令則相反,把操作數(shù)中為1的位對(duì)應(yīng)位置的數(shù)(寄存器中)變?yōu)?,然后再放到那個(gè)寄存器里去。
? //下面就是開(kāi)/關(guān)icache的匯編程序
? ?mrc p15,0,r0,c1,c0,0;
? //bic r0, r0, #(1<<12)// bit12 置0 ?表示關(guān)上icache
? ?orr r0, r0, #(1<<12)// bit12 置1 ?表示開(kāi)啟icache
? ?mcr p15,0,r0,c1,c0,0;
轉(zhuǎn)載于:https://blog.51cto.com/11962449/1837572
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!總結(jié)
以上是生活随笔為你收集整理的icache的方面以及使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: oracle数组 (转)
- 下一篇: Multipath多路径冗余全解