異常向量表
(1)異常向量表中各個向量的相對位置固定的,但是他們的起始位址時不固定的,各種soc可以不一樣,而且複雜arm中還可以讓使用者通過軟體來設定這個異常向量表的基位址。
(2)異常和中斷的區別和聯絡
·針對soc來說,傳送復位,軟中斷,中斷,快速中斷,取指令異常,資料異常,我們統一叫異常,所以說:中斷其實是異常的一種。
·異常就是soc發生突發事件,打斷cpu的正常常規業務,cpu不得不跳轉到異常向量表中去執行異常處理程式。 中斷時異常的一種,一般特指 soc內部外設產生的打斷soc常規業務,或者外部中斷(soc的gpio引腳傳回來的中斷)
(3)像記憶體一樣去訪問異常向量表
·s5pv210的異常向量表可以改變(在cp15協處理器中),以適應作業系統的需求。但是目前系統剛剛啟動時,此時dram尚未初始化,程式都在sram中執行。210在iram中設定了異常向量表,供暫時性使用。
函式名實質就是函式的首位址
(1)函式名在c語言中的理解方法和變數名其實沒區別。編譯器會把這個函式體對應的**段和這個函式的函式名(實質是符號)對應起來,等我們在使用這個函式名的時候,編譯器會將函式的函式體實際上做替換。因為函式體不止4位元組,而函式名這個符號只能對應的是函式體那個**段的首位址。
(2)c語言語法來說,函式名就是這個函式的函式指標。
為什麼中斷處理要先在彙編中進行?
(1)中斷處理要注意保護現場(中斷從svc模式來,則儲存svc模式下的必要的暫存器的值)和恢復現場(不然的話中斷處理完成後,準備返回svc模式前,要將儲存的svc模式下的必要暫存器的值恢復回去,不然到了svc模式後暫存器的值就亂了,svc模式下正在執行的任務就無法恢復執行)
(2)儲存現場包括
第一:設定irq棧
第三:儲存r0-r12
(3)為啥儲存lr暫存器?要考慮中斷返回問題?
中斷執行完成後返回回來執行原來的**,中斷返回其實取決於我們儲存的現場,執行中斷前將scv模式下暫存器pc的值儲存在暫存器lr(硬體自動)中,然後寫軟體將lr的值存到棧中,而cpsr(硬體自動)儲存在irq模式下的spsr中。中斷執行完後返回位址(從棧中讀出來)給pc,spsr只有在中斷返回和模式切換的時候才會有
S5PV210 裸機中斷
這裡我以外部中斷為例畫出了中斷響應的過程。當外部中斷得到響應,會由硬體自動轉到異常向量表,執行對應的異常處理程式。在這裡指的就是irq的處理程式。在異常處理程式irq handle中將會執行現場的保護與恢復,以及最重要的中斷處理函式 注意,這裡就來到了中斷處理部分,而不是異常處理了,相當於是乙個兩級...
s5pv210 中斷實戰
以下內容源於部落格的學習,以及朱有鵬老師課程的學習,和網路資源的整理。1 建立異常向量表 2 中斷初始化 3 使能 如外部中斷,寫中斷處理函式 4 建立中斷號與中斷處理函式的聯絡,使能。當中斷發生時,中斷處理函式會自動處理中斷 流程如下圖 下面按上述步驟編寫 內容細節見部落格 s5pv210 裸機 ...
S5PV210中斷處理
start 1 設定棧空間 防止之前的uboot 被覆蓋,應為c中需要棧空間 mov r0,0x53 msr cpsr cxsf,r0 b main main函式 1 led燈引腳功能設定 gpj2con 0xf 0 gpj2con 1 0 2 中斷初始化 2 1 註冊中斷函式 功能函式 start...