日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【ARM】arm异常中断处理知识点

發布時間:2024/4/17 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ARM】arm异常中断处理知识点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ARM處理器7種類型異常

  按優先級從高到低的排列如下:

  復位異常(Reset)

  數據異常(Date Abort)

  快速中斷異常(FIQ)

  外部中斷異常(IRQ)

  預取異常(Prefetch Abort)

  軟件中斷異常(SWI)

  未定義指令異常(Underfined instruction)



當異常發生時

  處理器會把PC設置為一個特定的存儲器地址。

  這一地址放在被稱為向量表(vector table)的特定地址范圍內。

  向量表的入口是一些跳轉指令,跳轉到專門處理某個異常或中斷的子程序。

  當異常發生時,分組寄存器r14和SPSR用于保存處理器狀態。



ARM異常處理器模式

  每一種異常都會導致內核進入一種特定的模式。

  用戶和系統模式是僅有的不可通過異常進入的兩種模式,也就是說,要進入這兩種模式,必須通過編程改變CPSR。



FIQ和IRQ異常中斷

  ARM內核只有兩個外部中斷輸入信號nFIQ和nIRQ。但對于一個系統來說,中斷源可有多達幾十個。

  為此,在系統集成的時候,一般都會有一個異常控制器來處理異常信號。

  這時候用戶程序可能存在多個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

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的【ARM】arm异常中断处理知识点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。