您好,登錄后才能下訂單哦!
這次學習一下高速緩存icache的功能的開關。
首先鞏固一下這個mrc指令
MRC 指令的格式為:
MRC{<cond>}(條件)協處理器編碼,協處理器操作碼1,目的寄存器,源寄存器1,源寄存器2,協處理器操作碼2。
如 mrc p15 , 0 , r0 , c1 , c0 , 0 ;
<cond>為指令執行的條件碼,忽略則視為無條件執行,該指令的作用是將 cp15 的寄存器c1,c0中的數據傳送到 ARM 處理器寄存器r0中,如果協處理器不能成功地執行該操作,將產生未定義的指令異常中斷。源寄存器1,2:存放第1個和第2個操作數的協處理器寄存器。協處理器操作碼2:可選的協處理器特定操作碼,用來區分同一個編號的不同物理寄存器,當不需要提供附加信息時,指定為0。
cp15是用于系統存儲管理的協處理器,對于CP15寄存器來說協處理器操作碼1永遠為0,否則結果不可預知。
cp15中的C1寄存器存放了高速緩存的控制功能,所以我們要通過寫這個協處理器寄存器里面的位,來啟用icache高速緩存。
C1寄存器的各個位說明以及應用:
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
各個位的作用和含義:
M:禁止/使能MMU或者MPU(0:禁止MMU或者MPU,1:使能MMU或者MPU)(如果系統中沒有MMU或者MPU,讀取時該位返回0,寫入時忽略)
A:對于可以選擇是否支持內存訪問時地址對齊檢查的系統,本位禁止/使能地址對齊檢查功能(0:禁止地址對齊檢查功能,1:使能地址對齊檢查功能)(對寄存器進行寫操作時,忽略該位)
C: 當數據Cache和指令Cache分開時,本控制位禁止/使能數據Cache。當數據Cache和指令Cache統一時,該控制位禁止/使能整個Cache.(0:禁止Cache, 1:使能Cache)
W:禁止/使能寫緩存(0:禁止寫緩存,1:使能寫緩存)
P:對于向前兼容26位ARM處理器,本控制位控制PRGC32控制信號(0:異常中斷處理程序進入32位地址模式,1:異常中斷處理程序進入26位地址模式)
D:對于向前兼容26位ARM處理器,本控制位控制DATA32控制信號(0:禁止26位地址異常檢查,1:使能26位地址異常檢測)
L:對于ARMv3及以前版本,本控制位可以控制處理器的中止模式(0:選擇早期中止模式,1:選擇后期中止模式)
B: 對于存儲系統同時支持大/小端(big-endian/little-endian)的ARM處理器,該控制位配置系統使用哪種內存模式
S:支持MMU的存儲系統中,本控制位用作系統保護
R:支持MMU的存儲系統中,本控制位用作ROM保護
F:本控制位由生產廠商定義
Z:對于支持跳轉預測的ARM系統,本控制位禁止/使能跳轉預測功能(0:禁止跳轉預測功能,1:使能跳轉預測功能)
I:當數據Cache和指令Cache是分開的,本控制位禁止/使能指令Cache(0:禁止指令Cache ,1:使能指令Cache)
我們要寫它的第I位,也就是第bit12位
bic指令的用法:bic是位清除的指令,把操作數中為1的位對應位置的數(寄存器中)變為0,然后再放到那個寄存器里去。
比如 bic r0 ,r0 ,0xF0000000 意思就是把r0高四位的值清零,然后再放回r0寄存器中。
orr指令則相反,把操作數中為1的位對應位置的數(寄存器中)變為1,然后再放到那個寄存器里去。
//下面就是開/關icache的匯編程序
mrc p15,0,r0,c1,c0,0;
//bic r0, r0, #(1<<12)// bit12 置0 表示關上icache
orr r0, r0, #(1<<12)// bit12 置1 表示開啟icache
mcr p15,0,r0,c1,c0,0;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。