【ARM】arm异常中断处理知识点
ARM處理器7種類型異常
按優先級從高到低的排列如下:
復位異常(Reset)
數據異常(Date Abort)
快速中斷異常(FIQ)
外部中斷異常(IRQ)
預取異常(Prefetch Abort)
軟件中斷異常(SWI)
未定義指令異常(Underfined instruction)
當異常發生時
處理器會把PC設置為一個特定的存儲器地址。
這一地址放在被稱為向量表(vector table)的特定地址范圍內。
向量表的入口是一些跳轉指令,跳轉到專門處理某個異?;蛑袛嗟淖映绦颉?/p>
當異常發生時,分組寄存器r14和SPSR用于保存處理器狀態。
ARM異常處理器模式
每一種異常都會導致內核進入一種特定的模式。
用戶和系統模式是僅有的不可通過異常進入的兩種模式,也就是說,要進入這兩種模式,必須通過編程改變CPSR。
FIQ和IRQ異常中斷
ARM內核只有兩個外部中斷輸入信號nFIQ和nIRQ。但對于一個系統來說,中斷源可有多達幾十個。
為此,在系統集成的時候,一般都會有一個異??刂破?/span>來處理異常信號。
這時候用戶程序可能存在多個IRQ/FIQ的中斷處理函數。為了使從向量表開始的跳轉始終能夠找到正確的處理函數入口,需要設置一套處理機制和方法。
多數情況下是由軟件來處理異常分支的,因為軟件可以通過讀取中斷控制器來獲得中斷源的信息。
S3C2410X中斷控制
1)程序狀態寄存器的F位和I位。如果CPSR程序狀態寄存器的F位被設置為1,那么CPU將不接受來自中斷控制器的FIQ;如果CPSR程序狀態寄存器的I位被設置為1,那么CPU將不接受來自中斷控制器的IRQ。因此,為了使能FIQ和IRQ,必須先將CPSR程序狀態寄存器的F位和I位清零,并且中斷屏蔽寄存器INTMSK中相應的位也要清零。
2)中斷模式(INTMOD)
ARM920T提供了兩種中斷模式,即FIQ模式和IRQ模式。
所有的中斷源在中斷請求時都要確定使用了哪一種中斷模式
3)中斷掛起寄存器(INTPND)
S3C2410X有兩個中斷掛起寄存器:源中斷掛起寄存器(SRCPND)和中斷掛起寄存器(INTPND),用于指示對應的中斷是否被激活。
當中斷源請求中斷的時候,SRCPND寄存器的相應位被置為1,同時INTPND寄存器中也有唯一的一位在仲裁程序后被自動置1。
如果屏蔽位被設置為1,相應的SRCPND位會被置為1,但是INTPND寄存器不會有變化;
如果INTPND被置位,只要標志I或標志F一旦被清零,就會招待相應的中斷服務程序。
在中斷服務子程序中要先向SRCPND中的相應位寫1來清除掛起狀態,再用同樣的方法來清除INTPND的相應位的掛起狀態
4)中斷屏蔽寄存器(INTMSK)
當INTMSK寄存器的屏蔽位為1時,對應的中斷被禁止;當INTMSK寄存器的屏蔽位為0時,則對應的中斷正常執行。
如果一個中斷的屏蔽位為1,在該中斷發出請求時掛起位還是會被設置為1,但中斷請求都不被受理
S3C2410中斷控制寄存器
S3C2410X的中斷控制器有5個控制寄存器:
源掛起寄存器(SRCPND)、中斷模式寄存器(INTMOD)、中斷屏蔽寄存器(INTMSK)、中斷優先權寄存器(PRIORITY)、中斷掛起寄存器(INTPND)。
中斷源發出的中斷請求首先被寄存器在中斷源掛起寄存器(SRCPND)中,INTMOD把中斷請求分為兩組:快速中斷請求(FIQ)和中斷請求(IRQ),PRIORITY處理中斷的優先級。
1)中斷模式控制器(INTMOD)
<注意>中斷控制寄存器中只有一個中斷源可以被設置為FIQ模式,因此只能在緊急情況下使用FIQ。
2)中斷掛起寄存器(INTPND)
當中斷請求被響應的時候,相應的位會被設置為1。
在某一時刻只有一個位能為1,因此在中斷服務子程序中可以通過判斷INTPND來判斷哪個中斷正在被響應。
在中斷服務子程序中必須在清零SRCPND中相應位后清零相應的中斷掛起位,清零方法和SRCPND相同
<注意>向INIPND等于“1”的位寫入“0”時,INTPND寄存器和INTOFFSET寄存器會有無法預知的結果,因此,千萬不要向INTPND的“1”位寫入“0”。推薦方法是把INTPND的值重新寫入INTPND。
本文轉自infohacker 51CTO博客,原文鏈接:http://blog.51cto.com/liucw/1191820
總結
以上是生活随笔為你收集整理的【ARM】arm异常中断处理知识点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: openstack+essex+quan
- 下一篇: 配置Squid服务