在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > S3C2440 異常進(jìn)入和退出

            S3C2440 異常進(jìn)入和退出

            作者: 時(shí)間:2016-11-22 來(lái)源:網(wǎng)絡(luò) 收藏
            根據(jù)異常類(lèi)型的不同,返回的方式也不同。異常造成下一條指令要從相應(yīng)的向量表入口讀取。

            1 處理器對(duì)異常的反應(yīng)

            產(chǎn)生異常時(shí),處理器采取如下動(dòng)作:

            本文引用地址:http://www.biyoush.com/article/201611/320027.htm

            1. 將 CPSR 復(fù)制到相應(yīng)的 SPSR 中。 這會(huì)保存當(dāng)前模式、中斷屏蔽和條件標(biāo)記。

            2. 轉(zhuǎn)至ARM狀態(tài)。

            3. 更改相應(yīng)的 CPSR 模式位,以便:

            • 更改為適當(dāng)?shù)哪J剑⒃谠撃J降南鄳?yīng)編組寄存器中進(jìn)行映射。
            • 禁用中斷。發(fā)生任何異常時(shí),都會(huì)禁用 IRQ。 在復(fù)位時(shí)發(fā)生 FIQ,會(huì)禁用 FIQ。

            4. 將相應(yīng) LR 設(shè)置為返回地址。

            5. 將 PC 設(shè)置為異常的向量地址。

            2 從異常處理程序的返回

            從異常中返回的方法取決于異常處理程序是否使用堆棧操作。 無(wú)論是否使用,要返回到異常發(fā)生處繼續(xù)執(zhí)行,異常處理程序必須:

            • 從相應(yīng) SPSR 恢復(fù) CPSR
            • 使用相應(yīng) LR 中的返回地址恢復(fù) PC。

            對(duì)于不需要從堆棧中恢復(fù)目標(biāo)模式寄存器的簡(jiǎn)單返回,異常處理程序可通過(guò)執(zhí)行具有以下設(shè)置的數(shù)據(jù)處理指令來(lái)完成這些操作:

            • 設(shè)置 S 標(biāo)記
            • PC 作為目標(biāo)寄存器。

            所需的返回指令取決于異常的類(lèi)型。

            注意,不必從復(fù)位處理程序返回,因?yàn)閺?fù)位處理程序直接執(zhí)行主代碼。

            處理異常時(shí),如果異常處理程序入口代碼使用了堆棧來(lái)存儲(chǔ)必須保留的寄存器,則可通過(guò)使用帶 ^ 限定符的加載多個(gè)指令來(lái)返回。 異常處理程序可使用一條指令返回,例如使用:

            LDMFD sp!,{R0-R12,pc}^

            為此,異常處理程序必須將以下內(nèi)容保存到堆棧中:

            • 調(diào)用處理程序時(shí)使用的所有工作寄存器
            • 為產(chǎn)生與數(shù)據(jù)處理指令相同的效果而修改的鏈接寄存器。

            ^ 限定符指定從 SPSR 恢復(fù) CPSR。

            注意:不能使用任何 16 位 Thumb 指令從異常返回,因?yàn)檫@些指令無(wú)法恢復(fù) CPSR。

            3 返回地址和返回指令

            產(chǎn)生異常時(shí)由程序計(jì)數(shù)器指向的實(shí)際位置取決于異常的類(lèi)型。返回地址可能不必是程序計(jì)數(shù)器指向的下一條指令。如果異常發(fā)生在 ARM 狀態(tài),處理器則將 (PC+4) 存儲(chǔ)在 lr_ mode。

            下面較詳細(xì)地說(shuō)明了每一種異常類(lèi)型如何從處理代碼正確返回的指令。

            3.1 從 SWI 和 未定義指令處理程序返回

            SWI 和未定義指令異常是由指令本身造成的,因此,處理異常時(shí),程序計(jì)數(shù)器保持不變(預(yù)取指就失敗了)。處理器將 (PC+4) 存儲(chǔ)在 lr_ mode 中。因而使 lr_mode 指向下一條要執(zhí)行的指令。要從 lr 中恢復(fù)程序計(jì)數(shù)器,則使用:

            MOVS pc, lr

            從處理程序返回控制權(quán)。

            將返回地址推入堆中并在返回時(shí)將其彈出的處理程序入口和出口代碼為:

            STMFD sp!,{reglist,lr}

            ;...

            LDMFD sp!,{reglist,pc}^

            3.2 從 FIQ 和 IRQ 處理程序返回

            執(zhí)行完每一條指令后,處理器檢測(cè)中斷管腳是否為 LOW(電平),以及 CPSR中斷禁用位是否為清除。結(jié)果,僅在程序計(jì)數(shù)器被更新后才發(fā)生 IRQ 或 FIQ 異常。處理器將 (PC+4) 存儲(chǔ)在 lr_mode 中。使 lr_mode 指向發(fā)生異常時(shí)尚未執(zhí)行的指令的下一條指令。處理程序完成后,必須從 lr_mode 指向發(fā)生異常時(shí)尚未執(zhí)行的指令處繼續(xù)運(yùn)行。該繼續(xù)執(zhí)行地址較 lr_mode 中的地址少一個(gè)字(四個(gè)字節(jié)),因此,其返回指令為:

            SUBS pc, lr, #4

            將返回地址推入堆中并在返回時(shí)將其彈出的處理程序入口和出口代碼為:

            SUB lr,lr,#4

            STMFD sp!,{reglist,lr}

            ;...

            LDMFD sp!,{reglist,pc}^

            3.3 從預(yù)取中斷處理程序返回

            如果處理器試圖在非法地址取指令,則該指令被標(biāo)志為無(wú)效。繼續(xù)執(zhí)行已經(jīng)在流水線中的指令至遇到產(chǎn)生“預(yù)取中斷”處的無(wú)效指令為止。如有將虛擬存儲(chǔ)器位置映射到該物理存儲(chǔ)器的指令,異常處理程序?qū)o(wú)映射關(guān)系的指令裝入物理存儲(chǔ)器并使用 MMU。然后,處理程序必須返回,再次使著運(yùn)行產(chǎn)生異常的指令?,F(xiàn)在裝入并執(zhí)行指令。

            因?yàn)榘l(fā)出預(yù)取中斷時(shí)程序計(jì)數(shù)器還沒(méi)有被更新,所以 lr_abt 指向產(chǎn)生異常的下一條指令。處理程序必須返回至 lr_ABT-4 的指令,請(qǐng)使用下列指令:

            SUBS pc,lr, #4

            將返回地址推入堆中并在返回時(shí)將其彈出的處理程序入口和出口代碼為:

            SUB lr,lr,#4

            STMFD sp!,{reglist,lr}

            ;...

            LDMFD sp!,{reglist,pc}^

            3.4 從數(shù)據(jù)中斷處理程序返回

            當(dāng)裝入或存儲(chǔ)指令試圖訪問(wèn)存儲(chǔ)器時(shí),程序計(jì)數(shù)器被更新。(PC+4) 的存儲(chǔ)值指向產(chǎn)生異常地址處的第二條指令。MMU(如果有)將相應(yīng)地址映射至物理存儲(chǔ)器,處理程序必須返回到原來(lái)中斷的指令,以便進(jìn)行第二次執(zhí)行嘗試。因此,返回地址較 lr_abt 中少兩個(gè)字(八個(gè)字節(jié)),使用如下返回指令:

            SUBS pc, lr, #8

            將返回地址推入堆中并在返回時(shí)將其彈出的處理程序入口和出口代碼為:

            SUB lr,lr,#8

            STMFD sp!,{reglist,lr}

            ;...

            LDMFD sp!,{reglist,pc}^



            關(guān)鍵詞: S3C2440異常進(jìn)入退

            評(píng)論


            技術(shù)專(zhuān)區(qū)

            關(guān)閉