溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

icache的方面以及使用

發(fā)布時(shí)間:2020-07-21 06:41:25 來(lái)源:網(wǎng)絡(luò) 閱讀:2214 作者:飛寞 欄目:開(kāi)發(fā)技術(shù)

這次學(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)存訪問(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)廠商定義

 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;


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI