中斷原理
isr中斷服務程式
中斷配置的過程
配置gpio暫存器(略)
配置好gpio後,需要根據與觸發gpio暫存器相對應的ext_int_?_con,將其配置為相應的觸發方式(上公升觸發等),
清除中斷掛起標誌,禁止中斷遮蔽位
清除中斷向量位址暫存器的資料,將中斷服務函式的入口位址放入中斷向量位址暫存器(複數)中
中斷執行的過程
當乙個中斷觸發時,cpu會讀取向量位址暫存器,從中讀出中斷服務程式入口位址,
拿到中斷服務程式入口位址後,cpu就會去執行中斷服務函式,而這個中斷服務函式的入口位址就存放在向量位址暫存器(複數)中。
(也就是說,中斷一旦發生,存放於中斷向量位址暫存器(複數)中的中斷服務函式的入口位址就會被放在中斷向量暫存器中)
***問題出來了,中斷向量位址暫存器(複數)約有130個,基本與gpio暫存器數量相對應,那麼二者是如何對應的呢?(gph2_3對應v0_16)
核心中的中斷其實都是假中斷,僅僅是利用真正的中斷去呼叫乙個函式,然後立即結束中斷而已,當假中斷到來時,
核心中的程序排程被終止直到中斷函式返回固定的返回巨集,因此,當中斷裡出現問題時,核心會列印出大量的堆疊
資訊,而不是直接crash
也就是說,核心會做這麼一件事:
當我們在核心中註冊乙個中斷時,核心會利用真實的中斷去執行當前已經註冊的中斷選擇,找出需要呼叫的中斷服務函式(假),
因此,乙個引腳可以註冊多個中斷服務函式(假)
若我們在核心環境下,或裸機環境下,不使用核心提供的中斷註冊流程,而是自己實現乙個中斷,那才是真正意義上的中斷
s5pv210中除了gph族暫存器以外,還有能夠配置成中斷的引腳嗎?
核心中斷實際流程:
註冊乙個真實中斷,給其乙個中斷服務函式入口(真),然後當中斷觸發時,呼叫這個中斷服務函式(真),在此函式內部,會開啟乙個核心執行緒,
然後讓執行緒的入口函式為我們實際註冊的中斷入口函式,並且啟動它,然後真中斷結束,返回。而我們想要實現的中斷實際執行在乙個
暫停了所有程序排程的程序上下文中(笑),當執行緒函式結束後(其實就是我們的中斷服務函式(假)),程序排程就會再次開始。
這樣,有乙個中斷標誌位的問題也可以解釋清楚了
其他gpio的中斷配置
見gpa0_int
***中斷源與引腳的對應關係
當使用eint16-31號中斷時,中斷向量位址暫存器(複數)都使用0-16號暫存器,也就是說,gph族暫存器的中斷基本都只對應中斷向量位址暫存器(複數)0-16
那麼,比如,當gph2-3被觸發時,本應該呼叫eint19中斷,但cpu將中斷向量位址暫存器(複數)0-16中中斷服務函式位址搬運到中斷向量位址暫存器中,
類似的,gph2-4,5,6等gpio引腳都是使用中斷向量位址暫存器(複數)0-16暫存器,而前面的中斷號則各自對應自己的中斷向量位址暫存器(複數)
具體中斷源對應關係 見晶元手冊此關鍵字vectored interrupt controller
舉例子,當使用一號定時器觸發中斷時,需要呼叫中斷向量位址暫存器(複數)22中存放的中斷服務函式位址。
其他gpio暫存器的中斷則均使用gpioint,也就是第0組中斷向量位址暫存器(複數)的30號
linux中斷處理原理分析
1 中斷概念 為什麼需要中斷?1 外設的處理速度一般慢於cpu 2 cpu不能一直等待外部事件 所以裝置必須有一種方法來通知cpu它的工作進度,這種方法就是中斷。2 中斷實現 在linux驅動程式中,為裝置實現乙個中斷包含兩個步驟 1 向核心註冊中斷 2 實現中斷處理函式 3 中斷註冊 reques...
linux中斷處理原理分析
首先需要了解一下中斷的概念 乙個 中斷 僅僅是乙個訊號,當硬體需要獲得處理器對它的關注時,就可以傳送這個訊號。核心維護了乙個中斷訊號線的登錄檔,該登錄檔類似於i o埠的登錄檔。模組在使用中斷前要先請求乙個中斷通道 或中斷請求irq 然後在使用後釋放該通道。用到的api就是request irq 以及...
linux中斷處理原理分析
部落格 fireaxe.blog.chinaunix.net tasklet作為一種新機制,顯然可以承擔更多的優點。正好這時候smp越來越火了,因此又在tasklet中加入了smp機制,保證同種中斷只能在乙個cpu上執行。在軟中斷時代,顯然沒有這種考慮。因此同一種中斷可以在兩個cpu上同時執行,很可...