1. 程式人生 > >S5PV210的中斷模式

S5PV210的中斷模式

異常向量表

      (1)異常向量表中各個向量的相對位置固定的,但是他們的起始地址時不固定的,各種soc可以不一樣,而且複雜ARM中還可以讓使用者通過軟體來設定這個異常向量表的基地址。

      (2)異常和中斷的區別和聯絡

                    ·針對Soc來說,傳送復位,軟中斷,中斷,快速中斷,取指令異常,資料異常,我們統一叫異常,所以說:中斷其實是異常的一種。

                     ·異常就是Soc發生突發事件,打斷CPU的正常常規業務,CPU不得不跳轉到異常向量表中去執行異常處理程式。 中斷時異常的一種,一般特指  Soc內部外設產生的打斷SoC常規業務,或者外部中斷(SoC的GPIO引腳傳回來的中斷)

      (3)像記憶體一樣去訪問異常向量表

                   ·S5PV210的異常向量表可以改變(在CP15協處理器中),以適應作業系統的需求。但是目前系統剛剛啟動時,此時DRAM尚未初始化,程式都在SRAM中執行。210在iRAM中設定了異常向量表,供暫時性使用。

                    ·查210的iROM application note 文件中iRAM的地址分配,可知,iRAM中異常向量表起始地址為0xD0037400。知道了異常向量表的起始地址後,各個異常對應的入口通過偏移量就可以很好的知道了。

函式名實質就是函式的首地址

      (1)函式名在C語言中的理解方法和變數名其實沒區別。編譯器會把這個函式體對應的程式碼段和這個函式的函式名(實質是符號)對應起來,等我們在使用這個函式名的時候,編譯器會將函式的函式體實際上做替換。因為函式體不止4位元組,而函式名這個符號只能對應的是函式體那個程式碼段的首地址。

      (2)c語言語法來說,函式名就是這個函式的函式指標。

為什麼中斷處理要先在彙編中進行?

      (1)中斷處理要注意保護現場(中斷從SVC模式來,則儲存SVC模式下的必要的暫存器的值)和恢復現場(不然的話中斷處理完成後,準備返回SVC模式前,要將儲存的SVC模式下的必要暫存器的值恢復回去,不然到了SVC模式後暫存器的值就亂了,SVC模式下正在執行的任務就無法恢復執行)

       (2)儲存現場包括

                        第一:設定IRQ棧

                        第二:儲存LR(暫存函式地址)

                        第三:儲存R0-R12

       (3)為啥儲存LR暫存器?要考慮中斷返回問題?

                         中斷執行完成後返回回來執行原來的程式碼,中斷返回其實取決於我們儲存的現場,執行中斷前將SCV模式下暫存器PC的值儲存在暫存器LR(硬體自動)中,然後寫軟體將lR的值存到棧中,而cpsr(硬體自動)儲存在irq模式下的SPSR中。中斷執行完後返回地址(從棧中讀出來)給PC,spsr只有在中斷返回和模式切換的時候才會有