S3C2440 異常進入和退出

2021-08-26 02:09:16 字數 1888 閱讀 8309

根據異常型別的不同,返回的方式也不同。異常造成下一條指令要從相應的向量表入口讀取。

產生異常時,處理器採取如下動作:

1. 將 cpsr 複製到相應的 spsr 中。 這會儲存當前模式、中斷遮蔽和條件標記。

2. 轉至arm狀態。

3. 更改相應的 cpsr 模式位,以便:

4. 將相應 lr 設定為返回位址。

5. 將 pc 設定為異常的向量位址。

從異常中返回的方法取決於異常處理程式是否使用堆疊操作。 無論是否使用,

要返回到異常發生處繼續執行,異常處理程式必須:

對於不需要從堆疊中恢復目標模式暫存器的簡單返回,異常處理程式可通過執行具有以下設定的資料處理指令來完成這些操作:

所需的返回指令取決於異常的型別。

注意,不必從復位處理程式返回,因為復位處理程式直接執行主**。

處理異常時,如果異常處理程式入口**使用了堆疊來儲存必須保留的暫存器,則可通過使用帶 ^ 限定符的載入多個指令來返回。 異常處理程式可使用一條指令返回,例如使用:

ldmfd sp!,^

為此,異常處理程式必須將以下內容儲存到堆疊中:

^ 限定符指定從 spsr 恢復 cpsr。

注意:不能使用任何 16 位 thumb 指令從異常返回,因為這些指令無法恢復 cpsr。

如果異常發生在 arm 狀態,處理器則將 (pc+4) 儲存在 lr_ mode。

下面較詳細地說明了每一種異常型別如何從處理**正確返回的指令。

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

movs pc, lr

從處理程式返回控制權。

stmfd sp!,

;...

ldmfd sp!,^

執行完每一條指令後,處理器檢測中斷管腳是否為 low(電平),以及 cpsr中斷禁用位是否為清除。結果,僅在程式計數器被更新後才發生 irq 或 fiq 異常。處理器將 (pc+4) 儲存在 lr_mode 中。使 lr_mode 指向發生異常時尚未執行的指令的下一條指令。處理程式完成後,必須從 lr_mode 指向發生異常時尚未執行的指令處繼續執行。該繼續執行位址較 lr_mode 中的位址少乙個字(四個位元組),因此,其返回指令為:

subs pc, lr, #4

sub lr,lr,#4

stmfd sp!,

;...

ldmfd sp!,^

如果處理器試圖在非法位址取指令,則該指令被標誌為無效。繼續執行已經在流水線中的指令至遇到產生「預取中斷」處的無效指令為止。

如有將虛擬儲存器位置對映到該物理儲存器的指令,異常處理程式將無對映關係的指令裝入物理儲存器並使用 mmu。然後,處理程式必須返回,再次使著執行產生異常的指令。現在裝入並執行指令。

因為發出預取中斷時程式計數器還沒有被更新,所以 lr_abt 指向產生異常的下一條指令。處理程式必須返回至 lr_abt-4 的指令,請使用下列指令:

subs pc,lr, #4

sub lr,lr,#4

stmfd sp!,

;...

ldmfd sp!,^

當裝入或儲存指令試圖訪問儲存器時,程式計數器被更新。(pc+4) 的儲存值指向產生異常位址處的第二條指令。mmu(如果有)將相應位址對映至物理儲存器,處理程式必須返回到原來中斷的指令,以便進行第二次執行嘗試。因此,返回位址較 lr_abt 中少兩個字(八個位元組),使用如下返回指令:

subs pc, lr, #8

sub lr,lr,#8

stmfd sp!,

;...

ldmfd sp!,^

求教 s3c2440問題

趙老師您好,我把您的程式新增到我的程式中去了,下面是主要 1 main函式 int main void a a b rgpbdat liushui delay 20 liushui liushui 0xffe 2 pwm初始化 void pwm init void 3 定時器中斷 static vo...

s3c2440系統時鐘

1 flck hclk和pclk的關係 一般來說,mcu的主時鐘源主要是外部晶振或外部時鐘,而用的最多的是外部晶振。在正確情況下,系統內所使用的時鐘都是外部時鐘源經過一定的處理得到的。由於外部時鐘源的頻率一般不能滿足系統所需要的高頻條件,所以往往需要pll 鎖相環 進行倍頻處理。在s3c2440中,...

s3c2440儲存控制

nandflash和norflash都是flash的一種,都是散存,都是磁碟儲存介子,但是nandflash一般比較大,而norflash都比較小,並且norflash比較貴,並且norflash寫的速度比較慢,但讀的速度比較快 而nandflash讀的速度比較慢,寫的速度比較快。nor flash...