自己學驅動18 中斷

2021-06-28 22:51:47 字數 1209 閱讀 6410

1.中斷原理

當某個事件發生時,硬體會設定某個暫存器;cpu在執行完乙個指令時,通過硬體檢視這個暫存器,如果發現所關注的事件發生了,則中斷當前程式流程,跳轉到乙個固定的位址去處理這個事件,最後返回繼續執行被中斷的程式。

2.中斷處理過程

(1)中斷控制器匯集各類外設發出的中斷訊號,然後告訴cpu。

(2)cpu儲存當前程式的執行環境(各個暫存器等),呼叫中斷服務程式(isr,interrupt service routine)來處理這些中斷。

(3)在isr中通過讀取中斷控制器、外設的相關暫存器來識別這是哪個中斷,並進行相應的處理。

(5)最後恢復被中斷程式的執行環境,繼續執行。

3.使用中斷的步驟

(1)設定好中斷模式和快速中斷模式下的棧:當發生中斷irq時,cpu進入中斷模式,這時使用中斷模式(irq)下的棧;當發生快速中斷fiq時,cpu進入快速中斷模式,這時使用快速中斷模式下的棧。

(2)準備好中斷處理函式:

在異常向量表中設定好當進入中斷模式或快速中斷模式時的跳轉函式;

對於irq,讀取intpnd暫存器或intoffset暫存器的值來確定中斷源,然後分別處理,而對於fiq,因為只有乙個中斷可以設定為fiq,則無需判斷中斷源;

清除中斷,清除中斷應該從源頭開始,首先,需要的話,操作具體的外設清除中斷訊號,其次清除subsrcpnd、srcpnd暫存器中相應的位(往相應位寫1即可),最後,清除intpnd暫存器中相應位(往相應位寫1即可),最簡單的辦法"intpnd = intpnd"。

(3)進入、退出irq或fiq時需要儲存、恢復被中斷程式的執行環境。

(4)根據具體中斷,設定相關外設。

(5)對於"request sources(without sub-register)"中的中斷,將intsubmsk暫存器中相應位設為0。

(6)確定使用此中斷的方式:fiq或irq。

如果是fiq,則在intmod暫存器中設定相應位為1;

如果是irq,則在riority暫存器中設定優先順序。

(7)如果是irq,則將intmsk暫存器中相應位設為0(fiq不受intmsk暫存器控制)。

(8)設定cpsr暫存器中的i-bit,使能irq或fiq。

Linux驅動開發 8 中斷分層機制 軟中斷

1 概念 軟中斷是模擬硬體中斷的概念,實現巨集觀上的非同步執行效果。其實tasklet 也是基於軟中斷實現的。2 軟中斷和硬中斷的區別 a 硬中斷是外部裝置對cpu 的中斷,軟中斷時程式對核心的中斷 b 訊號是由核心 或者其他程序 對某個程序的軟中斷 3 結構表示 struct softirq ac...

x86中斷(一) 中斷分類

一 中斷分類 x86系統支援256個中斷源,每個中斷源使用0 255數字標識,該標識稱作中斷向量號 即cpu中斷源的中斷號,要與外部中斷的中斷號irq n相區別 cpu通過獲取中斷向量號識別中斷源。256個中斷源可以分為 其中 1 內部中斷 由cpu內部事件及執行軟中斷指令產生,由除法中斷 溢位中斷...

WinCE 6 0中斷驅動程式分析

windows embedded ce 6.0的中斷處理過程主要分為兩部分 isr的實現在oal oem適配層 中,它只處理最低階的中斷響應,通常是獲取irq和sysintr並設定mcu內部的中斷控制暫存器。中斷處理的主要部分在驅動或者應用的中斷處理執行緒中。中斷處理執行緒與其他普通執行緒一樣,使用...