新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM協處理器CP15寄存器詳解

        ARM協處理器CP15寄存器詳解

        作者: 時間:2016-11-21 來源:網絡 收藏
        用于系統存儲管理的協處理器CP15
        MCR{cond} coproc,opcode1,Rd,CRn,CRm,opcode2
        MRC {cond} coproc,opcode1,Rd,CRn,CRm,opcode2
        coproc 指令操作的協處理器名.標準名為pn,n,為0~15
        opcode1 協處理器的特定操作碼. 對于CP15寄存器來說,opcode1永遠為0,不為0時,操作結果不可預知
        CRd 作為目標寄存器的協處理器寄存器.
        CRn 存放第1個操作數的協處理器寄存器.
        CRm 存放第2個操作數的協處理器寄存器. (用來區分同一個編號的不同物理寄存器,當不需要提供附加信息時,指定為C0)
        opcode2 可選的協處理器特定操作碼. (用來區分同一個編號的不同物理寄存器,當不需要提供附加信息時,指定為0)
        • 在基于ARM嵌入式系統中,存儲系統通常是通過系統控制協處理器CP15完成的。
        • CP15可以包含16個32位的寄存器,其編號為0-15。實際上對于某些編號的寄存器可能對應有多個物理寄存器。在指令中指定特定的標志位來區分這些物理寄存器。有些類似于ARM寄存器中,處于不同的處理器模式時,ARM某些寄存器可能不同。
        CP15的寄存器列表如表所示:

        寄存器編號

        本文引用地址:http://www.104case.com/article/201611/319524.htm

        基本作用

        MMU中的作用

        PU中的作用

        0

        ID編碼(只讀)

        ID編碼和cache類型

        1

        控制位(可讀寫)

        各種控制位

        2

        存儲保護和控制

        地址轉換表基地址

        Cachability的控制位

        3

        存儲保護和控制

        域訪問控制位

        Bufferablity控制位

        4

        存儲保護和控制

        保留

        保 留

        5

        存儲保護和控制

        內存失效狀態

        訪問權限控制位

        6

        存儲保護和控制

        內存失效地址

        保護區域控制

        7

        高速緩存和寫緩存

        高速緩存和寫緩存控制

        8

        存儲保護和控制

        TLB控制

        保 留

        9

        高速緩存和寫緩存

        高速緩存鎖定

        10

        存儲保護和控制

        TLB鎖定

        保 留

        11

        保留

        12

        保留

        13

        進程標識符

        進程標識符

        14

        保留

        15

        因不同設計而異

        因不同設計而異

        因不同設計而異

        注:以下寄存器中相應位的含義在不同的處理器中可能不同,但總體功能不變
        (一)CP15的寄存器C0
        CP15中寄存器C0對應兩個標識符寄存器,由訪問CP15中的寄存器指令中的指定要訪問哪個具體物理寄存器,與兩個標識符寄存器的對應關系如下所示:

        opcode2編碼

        對應的標識符號寄存器

        0b000

        主標識符寄存器

        0b001

        cache類型標識符寄存器

        其 他

        保留

        (1)主標識符寄存器
        指令如下:
        MRC P15,0,R0,C0,C0,0 #將主標示符寄存器的內容讀到AMR寄存器R0中
        主標示符的編碼格式對于不同的ARM處理器版本有所不同。

        對于AMR7之后的處理器,其主標示符編碼格式如下 :

        30 24

        23 20

        19 16

        15 4

        3 0

        由生產商確定

        產品子編號

        ARM體系版本號

        產品主編號

        處理器版本號

        各部分的編碼詳細含義如下表所示:

        [3: 0]

        生產商定義的處理器版本號

        [15: 4]

        生產商定義的產品主編號

        其中最高4位即位[15:12]可能的取值為0x0~0x7但不能是0x00x7

        因為:

        0x0表示ARM7之前的處理器

        0x7表示ARM7處理器

        [19: 16]

        ARM體系的版本號,可能的取值如 下:

        0x1ARM體系版本4

        0x2ARM體系版本4T

        0x3ARM體系版本5

        0x4ARM體系版本5T

        0x5ARM體系版本5TE

        其他ARM公司保留將來使用

        [23: 20]

        生產商定義的產品子編號。當產品主編號相同時,使用子編號來區分不同的產品子類,如產品中不 同的高速緩存的大小等

        [31: 24]

        生產廠商的編號,現在已經定義的有以下值:

        0x41=AARM公司

        0x44=DDigital Equipment公司

        0x69=Iintel公司

        (2)cache類型標識符寄存器
        指令如下:
        MRC P15,0,R0,C0,C0,1 #將cache類型標識符寄存器的內容讀到AMR寄存器R0中
        ARM處理器中cache類型標識符寄存器的編碼格式如下所示:

        31 29

        28 25

        24

        23 12

        11 0

        000

        屬性字段

        S

        數據cache相關屬性

        指令cache相關屬性

        各部分的編碼詳細含義如下表所示:

        含義

        [28: 25]

        主要用于定義對于寫回類型的cache的一些屬性

        [24]

        定義系統中的數據cache和指令cache是分開的還是統一的:

        0系統的數據cache和指令cache是統一的;

        1系統的數據cache和指令cache是分開的

        [23: 12]

        定義數據cache的相關屬性

        如果位[24]0,本字段定義整個cache的屬性

        [31: 24]

        定義指令cache的相關屬性

        如果位[24]0,本字段定義整個cache的屬性

        • 控制字段位[2825]的含義
        主要用于定義對于寫回類型的cache的一些屬性

        cache類型標識符寄存器的控制字段位[2825]:

        cache類型

        cache內容清除方法

        cache內容鎖定方法

        0b0000

        寫通類型

        不需要內容清除

        不支持內容鎖定

        0b0001

        寫回類型

        數據塊讀取

        不支持內容鎖定

        0b0010

        寫回類型

        由寄存器C7定義

        不支持內容鎖定

        0b0110

        寫回類型

        由寄存器C7定義

        支持格式A

        0b0111

        寫回類型

        由寄存器C7定義

        支持格式B

        • 控制字段位[2312]及控制字段位[110]含義
        [23:12]用于定義數據cache的屬性,[11: 0]用于定義指令cache的屬性
        編碼格式如下:

        11 9

        8 6

        5 3

        2

        1 0

        000

        cache容量

        cache相聯特性

        M

        塊大小

        其中bits[1:0]含義如下:

        cache塊大小

        0b00

        2個字(8字節)

        0b01

        4個字(16字節)

        0b10

        8個字(32字節)

        0b11

        16個字(64字節)

        其中bits[5:3]含義如下:

        M=0時含義

        M=1時含義

        0b000

        1路相聯(直接映射)

        沒有cache

        0b001

        2路 相聯

        3路 相聯

        0b010

        4路 相聯

        6路 相聯

        0b011

        8路 相聯

        12路 相聯

        0b100

        16路 相聯

        24路 相聯

        0b101

        32路 相聯

        48路 相聯

        0b110

        64路 相聯

        96路 相聯

        0b111

        128路相聯

        192路相聯

        其中bits[8:6]含義如下:

        M=0時含義

        M=1時含義

        0b000

        0.5KB

        0.75KB

        0b001

        1KB

        1.5KB

        0b010

        2KB

        3KB

        0b011

        4KB

        6KB

        0b100

        8KB

        12KB

        0b101

        16KB

        24KB

        0b110

        32KB

        48KB

        0b111

        64KB

        96KB


        (二)CP15的寄存器C1
        CP15中的寄存器C1是一個控制寄存器,它包括以下控制功能:
        • 禁止或使能MMU以及其他與存儲系統相關的功能
        • 配置存儲系統以及ARM處理器中的相關部分的工作
        指令如下:
        mrcp15, 0, r0, c1, c0{, 0};將CP15的寄存器C1的值讀到r0
        mcrp15, 0, r0, c1, c0{, 0};將r0的值寫到CP15的寄存器C1
        CP15中的寄存器C1的編碼格式及含義說明如下:

        C1中的控制位

        含義

        M(bit[0])

        0:禁止MMU或者PU

        1:使能MMU或者PU

        如果系統中沒有MMU及PU,讀取時該位返回0,寫入時忽略該位

        A(bit[1])

        0:禁止地址對齊檢查

        1:使能地址對齊檢查

        C(bit[2])

        當數據cache和指令cache分開時,本控制位禁止/使能數據cache。當數據cache和指令cache統一時,該控制位禁止/使能整個cache。

        0:禁止數據/整個cache

        1:使能數據/整個cache

        如果系統中不含cache,讀取時該位返回0.寫入時忽略

        當系統中不能禁止cache時,讀取時返回1.寫入時忽略

        W(bit[3])

        0:禁止寫緩沖

        1:使能寫緩沖

        如果系統中不含寫緩沖時,讀取時該位返回0.寫入時忽略

        當系統中不能禁止寫緩沖時,讀取時返回1.寫入時忽略

        P(bit[4])

        對于向前兼容26位地址的ARM處理器,本控制位控制PROG32控制信號

        0:異常中斷處理程序進入32位地址模式

        1:異常中斷處理程序進入26位地址模式

        如果本系統中不支持向前兼容26位地址,讀取該位時返回1,寫入時忽略

        D(bit[5])

        對于向前兼容26位地址的ARM處理器,本控制位控制DATA32控制信號

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

        1:使能26位地址異常檢查

        如果本系統中不支持向前兼容26位地址,讀取該位時返回1,寫入時忽略

        L(bit[6])

        對于ARMv3及以前的版本,本控制位可以控制處理器的中止模型

        0:選擇早期中止模型

        1:選擇后期中止模型

        B(bit[7])

        對于存儲系統同時支持big-endian和little-endian的ARM系統,本控制位配置系統的存儲模式

        0little endian

        1big endian

        對于只支持little-endian的系統,讀取時該位返回0,寫入時忽略

        對于只支持big-endian的系統,讀取時該位返回1,寫入時忽略

        S(bit[8])

        在基于MMU的存儲系統中,本位用作系統保護

        R(bit[9])

        在基于MMU的存儲系統中,本位用作ROM保護

        F(bit[10])

        由生產商定義

        Z(bit[11])

        對于支持跳轉預測的ARM系統,本控制位禁止/使能跳轉預測功能

        0:禁止跳轉預測功能

        1:使能跳轉預測功能

        對于不支持跳轉預測的ARM系統,讀取該位時返回0,寫入時忽略

        I(bit[12])

        當數據cache和指令cache是分開的,本控制位禁止/使能指令cache

        0:禁止指令cache

        1:使能指令cache

        如果系統中使用統一的指令cache和數據cache或者系統中不含cache,讀取該位時返回0,寫入時忽略。當系統中的指令cache不能禁止時,讀取時該位返回1,寫入時忽略

        V(bit[13])

        對于支持高端異常向量表的系統,本控制位控制向量表的位置

        0:選擇低端異常中斷向量0x0~0x1c

        1:選擇高端異常中斷向量0xffff0000~ 0xffff001c

        對于不支持高端異常向量表的系統,讀取時該位返回0,寫入時忽略

        PR(bit[14])

        如果系統中的cache的淘汰算法可以選擇的話,本控制位選擇淘汰算法

        0:常規的cache淘汰算法,如隨機淘汰

        1:預測性淘汰算法,如round-robin淘汰算法

        如果系統中cache的淘汰算法不可選擇,寫入該位時忽略。讀取該位時,根據其淘汰算法是否可以比較簡單地預測最壞情況返回0或者1

        L4(bit[15])

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

        0:保持ARMv5以上版本的正常功能

        1:將ARMv5以上版本與以前版本處理器兼容,不根據跳轉地址的bit[0]進行ARM指令和Thumb狀態切換:bit[0]等于0表示ARM指令,等于1表示Thumb指令

        Bits[31:16])

        這些位保留將來使用,應為UNP/SBZP

        (三)CP15的寄存器C2

        C2寄存器的別名:Translation table base (TTB) register

        C2寄存器用來保存頁表的基地址,即一級映射描述符表的基地址。其編碼格如下所示:

        310

        一級映射描述符表的基地址(物理地址)

        (四)CP15的寄存器C3

        CP15中的寄存器C3定義了ARM處理器的16個域的訪問權限。

        310

        D15

        D14

        D13

        D12

        D11

        D10

        D9

        D8

        D7

        D6

        D5

        D4

        D3

        D2

        D1

        D0

        CP15的C3寄存器中,劃分了16個域,每個區域由兩位構成,這兩位說明了當前內存的檢查權限:
        00:當前級別下,該內存區域不允許被訪問,任何的訪問都會引起一個domain fault,這時 AP位無效
        01:當前級別下,該內存區域的訪問必須配合該內存區域的段描述符中AP位進行權檢查
        10:保留狀態(我們最好不要填寫該值,以免引起不能確定的問題)
        11:當前級別下,對該內存區域的訪問都不進行權限檢查。這時AP位無效
        所以只有當相應域的編碼為 01時,才會根據AP位和協處理器CP15中的C1寄存器的R,S位進行權限檢查

        (五)CP15的寄存器C5
        CP15中的寄存器C5是失效狀態寄存器,分為指令狀態失效和數據狀態失效。
        MRC p15, 0, , c5, c0, 0 訪問數據失效狀態寄存器 
        MRC p15, 0, , c5, c0, 1 訪問指令狀態失效寄存器 
        編碼格式如下所示: 

        31 9

        8

        7 4

        3 0

        UNP/SBZP

        0

        域標識

        狀態標識

        其中,域標識bit[7:4]表示存放引起存儲訪問失效的存儲訪問所屬的域。狀態標識bit[3:0]表示放引起存儲訪問失效的存儲訪問類型,該字段含義如下表所示(優先級由上到下遞減)。 

        引起訪問失效的原因

        狀態標識

        域標識

        C6

        終端異常(Terminal Exception

        0b0010

        無 效

        生 產商定義

        中斷向量訪問異常(Vector Exception)

        0b0000

        無 效

        有 效

        地 址對齊

        0b00x1

        無 效

        有 效

        一 級頁表訪問失效

        0b1100

        無 效

        有 效

        二 級頁表訪問失效

        0b1110

        有 效

        有 效

        基 于段的地址變換失效

        0b0101

        無 效

        有 效

        基 于頁的地址變換失效

        0b0111

        有 效

        有 效

        基 于段的存儲訪問中域控制失效

        0b1001

        有 效

        有 效

        基 于頁的存儲訪問中域控制失效

        0b1101

        有 效

        有 效

        基 于段的存儲訪問中訪問權限控制失效

        0b1111

        有 效

        有 效

        基 于頁的存儲訪問中訪問權限控制失效

        0b0100

        有 效

        有 效

        基于段的cache預 取時外部存儲系統失效

        0b0110

        有 效

        有 效

        基于頁的cache預 取時外部存儲系統失效

        0b1000

        有 效

        有 效

        基于段的非cache預 取時外部存儲系統失效

        0b1010

        有 效

        有 效

        (六)CP15的寄存器C6

        CP15中的寄存器C6是失效地址寄存器,其中保存了引起存儲訪問失效的地址,分為數據失效地址寄存器和指令失效地址寄存器

        MRC p15, 0, , c6, c0, 0 訪問數據失效地址寄存器 
        MRC p15, 0, , c6, c0, 2 訪問指令失效地址寄存器 

        編碼格式如下所示:

        310

        失效地址(虛擬地址)

        (七)CP15的寄存器C7
        CP15C7寄存器用來控制cache和寫緩存,它是一個只寫寄存器,讀操作將產生不可預知的后果。
        訪問CP15C7寄存器的指令格式如下所示:
        mcr p15, 0, , , crm, 的不同取值組合,實現不同功能
        表中的數據是指Rd中的數據:
        (八)CP15的寄存器C8

        系統協處理器CP15的寄存器C8就是清除TLB內容的相關操作。它是一個只寫的寄存器。

        MCR p15,0,Rd,c8,CRm,opcode_2

        Rd中為要寫入C8寄存器的內容,CRm和opcode_2的不同組合決定指令執行的不同操作。

        指令

        Rd

        含義

        MCR p15, 0, Rd, c8, c5, 0 

        0

        使無效整個指令TLB

        MCR p15, 0, Rd, c8, c5, 1 

        虛擬地址

        使無效指令TLB中的單個地址變換條目

        MCR p15, 0, Rd, c8, c6, 0 

        0

        使無效整個數據TLB

        MCR p15, 0, Rd, c8, c6, 1 

        虛擬地址

        使無效數據TLB中的單個地址變換條目

        MCR p15, 0, , c8, c7, 0 

        0

        使無效整個數據和指令TLB

        MCR p15, 0, , c8, c7, 1 

        虛擬地址

        使無效數據和指令TLB中的單個地址變換條目

        (九)CP15的寄存器C12
        CP15寄存器C12用來設置異常向量基地址,其編碼格式如下所示:
        MCR p15, 0, , c12, c0, 0 ;Rd中存放要修改的異常向量基地址 

        31 5

        4 0

        異常向量基地址

        Reserve

        注:只有ARM11和cortex-a 可以任意修改異常向量基地址。arm7,ARM9,ARM10只可以在0地址或0xffff0000中
        (十)CP15的寄存器C13

        CP15中的寄存器C13用于快速上下文切換。其編碼格式如下所示。

        訪問寄存器C13的指令格式如下所示。

        MCRp15, 0,,,c0,0

        MRC P15, 0,,,c0,0

        其中,在讀操作時,結果中位[31::25]返回PID,其他位 的數值是不可以預知的。寫操作將設置PID的值。

        當PID的值為0時,MVA = VA | (0(PID)<<25),MVA=VA,相當于禁止了FCSE。系統復位后PID即為0.

        當PID的值不為0時,相當于使能了FCSE。




        評論


        技術專區

        關閉
        主站蜘蛛池模板: 大城县| 泸西县| 桃源县| 黄大仙区| 商南县| 新绛县| 巴林右旗| 鞍山市| 秦皇岛市| 留坝县| 华宁县| 济源市| 高青县| 唐海县| 五指山市| 台州市| 高淳县| 龙里县| 营口市| 柘城县| 乐东| 云霄县| 疏勒县| 抚顺市| 大悟县| 平凉市| 灌云县| 广德县| 临桂县| 丽江市| 香格里拉县| 黑水县| 库尔勒市| 衡水市| 邢台市| 晋城| 收藏| 和硕县| 衡阳县| 陆丰市| 闵行区|