日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

bootloader之ARM的處理器模式

 ccbupt 2009-05-12

ARM異常中斷處理概述

當(dāng)正常的程序執(zhí)行流程發(fā)生暫時(shí)的停止時(shí),稱之為異常,例如處理一個(gè)外部的中斷請(qǐng)求。在處理異常之前,當(dāng)前處理器的狀態(tài)必須保留,這樣當(dāng)異常處理完成之后,當(dāng)前程序可以繼續(xù)執(zhí)行。處理器允許多個(gè)異常同時(shí)發(fā)生,它們將會(huì)按固定的優(yōu)先級(jí)進(jìn)行處理。
ARM體系結(jié)構(gòu)中的異常,與8位/16位體系結(jié)構(gòu)的中斷有很大的相似之處,但異常與中斷的概念并不完全等同。

ARM體系結(jié)構(gòu)所支持的異常類型

異常類型                           具體含義
復(fù)位                         復(fù)位電平有效時(shí),產(chǎn)生復(fù)位異常,程序跳轉(zhuǎn)到復(fù)位處理程序處執(zhí)行。
未定義指令          遇到不能處理的指令時(shí),產(chǎn)生未定義指令異常。
軟件中斷                 執(zhí)行SWI指令產(chǎn)生,用于用戶模式下的程序調(diào)用特權(quán)操作指令。
指令預(yù)取中止        處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪問,產(chǎn)生
指令預(yù)取中止異常。
數(shù)據(jù)中止                處理器數(shù)據(jù)訪問指令的地址不存在,或該地址不允許當(dāng)前指令訪問時(shí),產(chǎn)生數(shù)據(jù)中止異常。
IRQ                         外部中斷請(qǐng)求有效,且CPSR中的I位為0時(shí),產(chǎn)生IRQ異常。
FIQ                      快速中斷請(qǐng)求引腳有效,且CPSR中的F位為0時(shí),產(chǎn)生FIQ異常。

異常向量表(Exception Vectors)

地址                                   異常                                  進(jìn)入模式

0x0000,0000                 復(fù)位                                      管理模式

ox0000,0004                 未定義指令                          未定義模式

0x0000,0008                  軟件中斷                              管理模式

0x0000,000c                 中止(預(yù)存指令)            中止模式

0x0000,0010                中止(數(shù)據(jù))                    中止模式

0x0000,0014                  保留                                     保留

0x0000,0018                 IRQ                                         IRQ

0x0000,001c                  FIQ                                        FIQ

異常優(yōu)先級(jí)(Exceprion Priorities)

優(yōu)先級(jí)                             異常

1(最高)                        復(fù)位

2                                        數(shù)據(jù)中止

3                                        FIQ

4                                        IRQ

5                                        預(yù)取指令

6(最低)                        未定義指令、SWI

對(duì)異常的響應(yīng)

當(dāng)一個(gè)異常出現(xiàn)以后,ARM微處理器會(huì)執(zhí)行以下幾步操作

1、將下一條指令的地址存入相應(yīng)連接寄存器LR,以便程序在處理異常返回時(shí)能從正確的位置重新開始執(zhí)行。
2、將CPSR復(fù)制到相應(yīng)的SPSR中。
3、根據(jù)異常類型,強(qiáng)制設(shè)置CPSR的運(yùn)行模式位。
4、強(qiáng)制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處。

異常處理完畢之后,ARM微處理器會(huì)執(zhí)行以下幾步操作從異常返回:

1、將連接寄存器LR的值減去相應(yīng)的偏移量后送到PC中。
2、將SPSR復(fù)制回CPSR中。
3、若在進(jìn)入異常處理時(shí)設(shè)置了中斷禁止位,要在此清除。

可以認(rèn)為應(yīng)用程序總是從復(fù)位異常處理程序開始執(zhí)行的,因此復(fù)位異常處理程序不需要返

中斷處理程序的安裝

一般在系統(tǒng)的啟動(dòng)代碼中安裝異常處理程序。大致可以分為兩種情況:

1、地址處存儲(chǔ)器為ROM/FLASH
2、地址處存儲(chǔ)器為RAM

在ROM/FLASH中安裝中斷處理程序

在ROM/FLASH的異常中斷向量表中,可以使用LDR指令直接向程序計(jì)數(shù)器PC中賦值,也可以直接使用跳轉(zhuǎn)指令轉(zhuǎn)到異常中斷處理程序。

當(dāng)0地址處為ROM時(shí),將跳轉(zhuǎn)指令安裝在0地址處:
中斷向量表:
b SYS_RST_HANDLER   ;0x00000000
b UDF_INS_HANDLER    ;0x00000004
b SWI_SVC_HANDLER   ;0x00000008
b INS_ABT_HANDLER     ;0x0000000c
b DAT_ABT_HANDLER   ;0x00000010
b .                                         ;nop
b IRQ_SVC_HANDLER    ;0x00000018
b FIQ_SVC_HANDLER    ;0x0000001c

;為中斷向量分配地址空間,此空間處為RAM的地址
MAP _ISR_STARTADDRESS
    SYS_RST_VECTOR      # 4  
    UDF_INS_VECTOR      # 4
   SWI_SVC_VECTOR    # 4
   INS_ABT_VECTOR      # 4
    DAT_ABT_VECTOR      # 4
    RESERVED_VECTOR   # 4
   IRQ_SVC_VECTOR     # 4
    FIQ_SVC_VECTOR     # 4

RAM中安裝中斷處理程序

當(dāng)0地址處為RAM時(shí),中斷向量表必須使用數(shù)據(jù)讀取指令直接指向PC中賦值的形式。而且必須把中斷向量從ROM中復(fù)制到RAM地址的0地址處。

MOV r8, #0   ;
ADR r9, Vector_Init_Block
LDMIA r9!, {r0-r7}
STMIA r8!, {r0-r7}



ARM處理器共有7種不同的處理器模式:

1、用戶模式(User)2、快速中斷模式(FIQ)3、外部中斷模式(IRQ)4、特權(quán)模式(SVC)5、數(shù)據(jù)訪問中止模式(ABT)6、未定義指令中止模式(UND)7、系統(tǒng)模式(SYS)

 

除了用戶模式以外的其他6種處理器模式稱為特權(quán)模式。在這些模式下,程序可以訪問所有的系統(tǒng)資源,也可以任意地進(jìn)行處理器的模式切換。ARM內(nèi)部寄存器和一些片內(nèi)外設(shè)在硬件設(shè)計(jì)上只允許(或者可選為只允許)特權(quán)模式下訪問。此外,特權(quán)模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。

其中,除了用戶模式、系統(tǒng)模式以外,其他5種特權(quán)模式又稱為異常模式。它們除了可以通過程序切換進(jìn)入外,也可以由特定的異常進(jìn)入。當(dāng)特定的異常出現(xiàn)時(shí),處理器進(jìn)入相應(yīng)的模式。每種異常模式都有一些獨(dú)立的寄存器,以避免異常退出時(shí)用戶模式的狀態(tài)不可靠。

用戶和系統(tǒng)模式這兩種模式都不能由異常進(jìn)入,而且它們使用完全相同的寄存器組。

系統(tǒng)模式是特權(quán)模式,不受用戶模式的限制。操作系統(tǒng)在該模式下訪問用戶模式的寄存器就比較方便,而且操作系統(tǒng)的一些特權(quán)任務(wù)可以使用這個(gè)模式訪問一些受控的資源。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多