icache的方面以及使用

這次學習一下高速緩存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;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章