2013-06-12 101 views
0

我目前正在使用Cortex-M3,並且無法理解xPSR的使用。我不確定爲什麼ISR編號存儲在最低8位。ARM程序狀態寄存器

在線來源和數據表不知道爲什麼數字必須存儲在xPSR中。在ARM7-TDMI上,當前模式(FIQ,IRQ,SVC,USR,ABT,UND)存儲在CPSR的最低8位中。我假設它存儲在那裏,所以當引發異常並且模式切換時,處理器知道將哪個寄存器組保存到CPSR的狀態。但是,當需要服務ISR時,Cortex-M3沒有分區寄存器,xPSR保存在堆棧中。

任何人都可以啓發我嗎?

+0

你在哪裏看到這個?我沒有在armv7m中看到cpsr,我看到了APSR,並且關於異常xPSR放在堆棧上以保留被中斷運行的代碼的標誌(並不罕見,或者軟件必須這樣做)。 –

+0

對不起,我在我的問題中弄錯了術語。當前程序狀態寄存器存在於ARM7-TDMI中,並根據當前的操作模式保存到相應的保存程序狀態寄存器中。但是我的問題是爲什麼在Cortex-M3上是xPSR中存在的ISR編號。 – user2476983

回答

1

嗯,我不完全確定我明白這個問題 - 你問「爲什麼不同」或「有什麼意義」?

在第一種情況下 - 答案與「爲什麼不支持ARM指令集」,「爲什麼只有2種執行模式」,「爲什麼矢量表很大並且包含地址而不是指令「和」爲什麼只有2個可能的堆棧指針「:」因爲「。因爲M-profile具有完全不同的異常模型。 (因爲異常模型是不同的,CPSR中的模式位可以自由地用於別的東西)。

在第二種情況下......這是由開發者決定的,不是嗎? ? 恰好有一個寄存器保存當前活動的中斷ID。如果這對您有好處,請使用它。您可以(例如)使用它將單箇中斷處理程序地址存儲到向量表中的多個位置,然後使用中斷ID來標識哪個特定設備觸發了中斷。

從可重入異常處理的角度來看,這聽起來很方便。

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/CHDBIBGJ.html

1

這是你在說什麼?

The IPSR 
The processor writes to the IPSR on exception entry and exit. Software can use an MRS instruction, to read 
the IPSR, but the processor ignores writes to the IPSR by an MSR instruction. The IPSR Exception Number 
field is defined as follows: 
• in Thread mode, the value is 0 
• in Handler mode, holds the exception number of the currently-executing exception. 
An exception number indicates the currently executing exception and its entry vector, see Exception number 
definition on page B1-633 and The vector table on page B1-634. 
On reset, the processor is in Thread mode and the Exception Number field of the IPSR is cleared to 0. As a 
result, the value 1, the exception number for reset, is a transitory value, that software cannot see as a valid 
IPSR Exception Number. 

我會認爲這是類似於在ARMv4/ARM7TDMI的CPSR,因爲它讓你在其中正在執行的狀態。如果你正在執行一個異常,如果是的話,哪一個。由於類似的原因,芯片設計人員可能有意義,並且該信息或該信息的副本被保存。例如,如果已經處於該例外模式,也許不要重新輸入異常處理程序。或者,如果某種類型的第二個異常,例如執行預取中止時預取中止,則處理器可能會故意掛起或選擇其他異常。

+0

是的,謝謝,這正是我所說的。 ISR號碼顯然在IPSR中是有原因的,但我不確定究竟爲什麼/沒有它會起作用。你的建議理由是好的,但我相信肯定有一個更明確的理由。 – user2476983

+0

是否需要中斷搶佔?即,NVIC可以讀取哪個ISR(如果有的話正在運行)並根據用戶定義的優先級來決定是否應該中斷該中斷? – user2476983