<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM存儲(chǔ)器之:協(xié)處理器CP15

          ARM存儲(chǔ)器之:協(xié)處理器CP15

          作者: 時(shí)間:2013-09-30 來(lái)源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/257013.htm

          bit[1:0]:定義Cache的塊大小,其編碼格式及含義如表15.9所示。

          表15.9 類型標(biāo)識(shí)符寄存器控制字段bit[1:0]含義

          編碼

          Cache塊大小

          0b00

          2個(gè)字(8字節(jié))

          0b01

          4個(gè)字(16字節(jié))

          0b10

          8個(gè)字(32字節(jié))

          0b11

          16個(gè)字(64字節(jié))

          bit[5:3]:定義了Cache的相聯(lián)屬性,其編碼格式及含義如表15.10所示。

          表15.10 類型標(biāo)識(shí)符寄存器控制字段bit[5:3]含義

          編碼

          M=0時(shí)的含義

          M=1時(shí)的含義

          0b000

          1路相聯(lián)

          (直接映射)

          沒(méi)有Cache

          0b001

          2路相聯(lián)

          3路相聯(lián)

          0b010

          4路相聯(lián)

          6路相聯(lián)

          0b011

          8路相聯(lián)

          12路相聯(lián)

          0b100

          16路相聯(lián)

          24路相聯(lián)

          0b101

          32路相聯(lián)

          48路相聯(lián)

          0b110

          64路相聯(lián)

          96路相聯(lián)

          0b111

          128路相聯(lián)

          192路相聯(lián)

          15.1.4寄存器c1

          中的寄存器c1包括以下控制功能:

          ·禁止/使能MMU以及其他與存儲(chǔ)系統(tǒng)有關(guān)的功能;

          ·配置存儲(chǔ)系統(tǒng)以及處理器中相關(guān)的工作。

          注意

          在寄存器c1中包含了一些沒(méi)有使用的位,這些位在將來(lái)可能被擴(kuò)展其他功能時(shí)使用。因此為了編寫代碼在將來(lái)更高版本的處理器中仍可以使用,在修改寄存器c1中的位時(shí)應(yīng)該使用“讀?。薷奶囟ㄎ唬瓕懭?rdquo;的操作序列。

          當(dāng)對(duì)寄存器c1進(jìn)行讀操作時(shí),指令中CRm和opcode2的值將被處理器忽略,所以要人工將其置位為0。

          例15.2用MRC/MCR指令將寄存器c1的值進(jìn)行讀取和寫入。

          【例15.2】

          MR,0,r0,c1,0,0;將寄存器c1的值讀取到寄存器r0中

          MCRP15,0,r0,c1,0,0;將ARM寄存器r0的值寫入寄存器c1

          圖15.7顯示了寄存器c1的編碼格式。

          圖15.7寄存器c1編碼格式

          寄存器c1各控制字段的含義如表15.11所示。

          表15.11 寄存器c1中各控制位字段的含義

          C1中的控制位

          含義

          M(bit[0])

          禁止/使能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,寫入時(shí)忽略

          A(bit[1])

          對(duì)于可以選擇是否支持內(nèi)存訪問(wèn)時(shí)地址對(duì)齊檢查的系統(tǒng),本位禁止/使能地址對(duì)齊檢查功能

          0:禁止地址對(duì)齊檢查功能

          1:使能地址對(duì)齊檢查功能

          對(duì)寄存器進(jìn)行寫操作時(shí),忽略該位

          C(bit[2])

          當(dāng)數(shù)據(jù)Cache和指令Cache分開時(shí),本控制位禁止/使能數(shù)據(jù)Cache。

          當(dāng)數(shù)據(jù)Cache和指令Cache統(tǒng)一時(shí),該控制位禁止/使能整個(gè)Cache

          0:禁止Cache

          1:使能Cache

          如果系統(tǒng)中不含Cache,讀取時(shí)該位返回0,寫入時(shí)忽略

          當(dāng)系統(tǒng)中Cache不能禁止時(shí),讀取返回1,寫入時(shí)忽略

          W(bit[3])

          禁止/使能寫緩存

          0:禁止寫緩存

          1:使能寫緩存

          如果系統(tǒng)中不含寫緩存,讀取時(shí)該位返回0,寫入時(shí)忽略

          當(dāng)系統(tǒng)中的寫緩存不能禁止時(shí),讀取時(shí)該位返回0,寫入時(shí)忽略

          P(bit[4])

          對(duì)于向前兼容26位ARM處理器,本控制位控制PRGC32控制信號(hào)

          0:異常中斷處理程序進(jìn)入32位地址模式

          1:異常中斷處理程序進(jìn)入26位地址模式

          如果系統(tǒng)不支持向前兼容26位地址,讀取該位時(shí)返回1,寫入時(shí)被忽略

          D(bit[5])

          對(duì)于向前兼容26位ARM處理器,本控制位控制DATA32控制信號(hào)

          0:禁止26位地址異常檢查

          1:使能26位地址異常檢測(cè)

          如果系統(tǒng)不支持向前兼容26位地址,讀取該位時(shí)返回1,寫入時(shí)被忽略

          續(xù)表

          C1中的控制位

          含義

          L(bit[6])

          對(duì)于ARMv3及以前版本,本控制位可以控制處理器的中止模式

          0:選擇早期中止模式

          1:選擇后期中止模式

          對(duì)于以后的處理器讀取該位時(shí)返回1,寫入時(shí)忽略

          B(bit[7])

          對(duì)于存儲(chǔ)系統(tǒng)同時(shí)支持大/小端(big-endian/little-endian)的ARM處理器,該控制位配置系統(tǒng)使用哪種內(nèi)存模式

          0:使用小端(little-endian)

          0:使用大端(big-endian)

          對(duì)于只支持小端(little-endian)的系統(tǒng),讀取時(shí)該位返回0,寫入時(shí)忽略

          對(duì)于只支持大端(big-endian)的系統(tǒng),讀取時(shí)該位返回1,寫入時(shí)忽略

          S(bit[8])

          支持MMU的存儲(chǔ)系統(tǒng)中,本控制位用作系統(tǒng)保護(hù)

          R(bit[9])

          支持MMU的存儲(chǔ)系統(tǒng)中,本控制位用作ROM保護(hù)

          F(bit[10])

          本控制位由生產(chǎn)廠商定義

          Z(bit[11])

          對(duì)于支持跳轉(zhuǎn)預(yù)測(cè)的ARM系統(tǒng),本控制位禁止/使能跳轉(zhuǎn)預(yù)測(cè)功能

          0:禁止跳轉(zhuǎn)預(yù)測(cè)功能

          1:使能跳轉(zhuǎn)預(yù)測(cè)功能

          對(duì)于不支持跳轉(zhuǎn)預(yù)測(cè)的ARM系統(tǒng),讀取時(shí)該位返回0,寫入時(shí)忽略

          I(bit[12])

          當(dāng)數(shù)據(jù)Cache和指令Cache是分開的,本控制位禁止/使能指令Cache

          0:禁止指令Cache

          1:使能指令Cache

          如果系統(tǒng)中使用統(tǒng)一的指令Cache和數(shù)據(jù)Cache或者系統(tǒng)中不含Cache,讀取該位時(shí)返回0,寫入時(shí)忽略該位

          當(dāng)系統(tǒng)中的指令Cache不能禁止時(shí),讀取該位返回1,寫入時(shí)忽略該位

          V(bit[13])

          支持高端異常向量表的系統(tǒng)中,本控制位控制向量表的位置

          0:選擇0x00000000~0x0000001c

          1:選擇0Xffff0000~0xffff001c

          對(duì)于不支持高端中斷向量表的系統(tǒng),讀取時(shí)返回0,寫入時(shí)忽略

          RR(bit[14])

          如果系統(tǒng)中Cache的淘汰算法可以選擇的話,本控制位選擇淘汰算法

          0:選擇常規(guī)的淘汰算法,如隨機(jī)淘汰算法

          1:選擇預(yù)測(cè)性的淘汰算法,如輪轉(zhuǎn)(round-robin)淘汰算法

          如果系統(tǒng)中淘汰算法不可選擇,寫入該位時(shí)被忽略,讀取該位時(shí),根據(jù)其淘汰算法是否可以比較簡(jiǎn)單地預(yù)測(cè)最壞情況返回1或者0

          L4(bit[15])

          ARM版本5及以上的版本中,本控制位可以提供兼容以前的ARM版本的功能

          0:保持當(dāng)前ARM版本的正常功能

          1:對(duì)于一些根據(jù)跳轉(zhuǎn)地址的bit[0]進(jìn)行狀態(tài)切換的指令,忽略bit[0],不進(jìn)行狀態(tài)切換,保持和以前ARM版本兼容

          此控制位可以影響以下指令:LDM、LDR和POP

          對(duì)于ARM版本5以前的處理器,該位沒(méi)有使用,應(yīng)作為UNP/SBZP

          對(duì)于ARM版本5以后的處理器,如果不支持向前兼容的屬性,讀取時(shí)該位返回0,寫入時(shí)忽略

          Bit(bit[31:16])

          這些位保留將來(lái)使用,應(yīng)為UNP/SBZP


          上一頁(yè) 1 2 3 4 5 6 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();