基於s5pv210的中斷和外部按鍵中斷
--參考朱有鵬arm裸機課堂
1、什麼是中斷?
中斷的目的就是為了處理更加重要的事情和任務。
並行的處理事情,單核的cpu在微觀上是無法實現並行的,只能實現巨集觀的並行。
2、soc對中斷的實現機制:異常向量表;
為什麼cpu可以實現中斷?因為我們機器的執行都是按照位址的順序執行下去。
但是為什麼cpu可以實現中斷?主要是因為cpu可以執行間接定址的功能,
也就是可以通過指標的方式跳轉到別的地方繼續執行。
異常向量表是cpu中某些特定位址的特定定義,當中斷發生的時候,中斷想辦法
通知cpu去處理中斷,怎麼做到的,就是要靠異常向量表。
3、異常和中斷的區別和聯絡
(1)對於soc來說,發生復位、軟中斷、中斷、快速中斷、取指令異常、資料異常都是屬於異常
(2)異常的定義就是突發事件,打算了cpu的正常的工作,cpu就需要通過異常向量表中去執行程式。
(3)中斷是異常的一種,異常包含於中斷
4、異常向量表的程式設計處理
(1)s5pv210的異常向量表可以改變,以適應於作業系統的需求,
但是系統在剛剛啟動的時候,此時dram尚未初始化,程式都是在sram中執行。
210在iram中設定了異常向量表,供暫時使用。
iram中的異常向量表其實位址是0xd0037400 知道異常向量表的起始位址後,
各個異常對應的入口位址就知道了,因為他們的位址是靠在一起的。
5、函式名的實質是函式的首位址
(1)函式名在c語言中的理解方式和變數名其實沒有區別。
編譯器就把這個函式的函式體對應的**段和這個函式的函式名對應起來,
當我們使用這個函式名的時候,實際上就是可以呼叫這個函式體。
為什麼不直接把函式體繫結在需要的異常入口位址處?
因為異常的入口的地方不好規定一塊固定大小的值,只能提供乙個4位元組的
位置放置位址比較合適。
(2)函式名就是這個函式的函式指標。
(3)當我們將異常處理程式的首位址和異常向量表繫結好了之後,
異常的處理的初步階段就完成了。
6、為什麼中斷處理要在彙編中進行
(1)中斷處理要注意保護現場(中斷一般是從svc模式來的,則儲存svc模式下的必要暫存器的值)
和恢復現場(中斷處理完成後,準備返回svc模式前要將儲存在svc模式下的必要暫存器的值
恢復回去,不然到了svc模式後暫存器的值就亂了,svc模式下面原來進行的常規任務也會別你搞壞了)
(2)儲存現場包括:第一:在進入中斷時,設定irq棧,第二,儲存lr,儲存r0-r12
(3)為什麼要儲存lr暫存器?要考慮中斷返回的問題。
中斷返回時候最關鍵的兩個暫存器pc和cpsr。
和cpsr儲存起來,將來恢復的時候才可以將中斷返回位址給pc,將儲存的spsr返回去cpsr。
(4)中斷返回的位址就是儲存在lr暫存器中的,而cpsr(在發生中斷的時候)會自動的儲存在irq模式下面的spsr
S5PV210 裸機中斷
這裡我以外部中斷為例畫出了中斷響應的過程。當外部中斷得到響應,會由硬體自動轉到異常向量表,執行對應的異常處理程式。在這裡指的就是irq的處理程式。在異常處理程式irq handle中將會執行現場的保護與恢復,以及最重要的中斷處理函式 注意,這裡就來到了中斷處理部分,而不是異常處理了,相當於是乙個兩級...
S5PV210的中斷模式
異常向量表 1 異常向量表中各個向量的相對位置固定的,但是他們的起始位址時不固定的,各種soc可以不一樣,而且複雜arm中還可以讓使用者通過軟體來設定這個異常向量表的基位址。2 異常和中斷的區別和聯絡 針對soc來說,傳送復位,軟中斷,中斷,快速中斷,取指令異常,資料異常,我們統一叫異常,所以說 中...
s5pv210 中斷實戰
以下內容源於部落格的學習,以及朱有鵬老師課程的學習,和網路資源的整理。1 建立異常向量表 2 中斷初始化 3 使能 如外部中斷,寫中斷處理函式 4 建立中斷號與中斷處理函式的聯絡,使能。當中斷發生時,中斷處理函式會自動處理中斷 流程如下圖 下面按上述步驟編寫 內容細節見部落格 s5pv210 裸機 ...