WINCE 驅動中斷機制

2021-05-17 21:25:56 字數 2203 閱讀 5176

02:30:23

在wince的流驅動裡面,要處理的中斷一般是外部裝置物理來的中斷請求。

以arm體系結構為例:為(irq或fiq),其中斷機制完全算是由軟體程式設計控制的。這是看bootloader時得出的結論。

windows ce下的中斷處理分為兩個階段,處於核心模式的中斷服務例程(isr,interrupt service routine)和處於使用者模式的中斷服務執行緒(ist,interrupt service thread)

發生的物理中斷首先經過oal層isr轉換為邏輯中斷,在這他們是多對一的關係。isr通常會向核心返回乙個值,如果中斷與已註冊isr相關聯,將會返回乙個sysintr_***,邏輯中斷號,核心將重新開啟處理器上除已識別的中斷之外的所有中斷。然後,核心將引發與sysintr_***值關聯的事件。驅動程式中的ist將開始執行,驅動程式裡面通過等待事件函式waitforsingleobject(), 其原型如下:

dword waitforsingleobject(

handle hhandle, // 事件的控制代碼

dword dwmilliseconds // 超時的毫秒數,如果超過此引數的時間,函式也會返回。

);waitforsingleobject()函式會阻塞當前的執行緒,等待某個event核心物件標識的事件發生。函式在兩種情況下會返回:事件發生或者超過第二個引數指定的時間。在ist中,通常把第二個引數標識為infinite,表示在此事件上等待無窮長的時間。

然後在使用者態執行相應的中斷處理,最後呼叫interruptdone()通知核心已完成對中斷的處理。核心在接收到sysintr_***值的interruptdone()時,將重新開啟指定的中斷。只有從這時開始,才能接收該裝置的其它中斷。至此,一次中斷處理結束。

下面介紹isr的具體實現:

其工作流程如下:

1. 呼叫picgetcurrentinterrupt中獲取當前硬體中斷

2. 如果該中斷是 intr_timer0(系統計時器),更新curmsec保持時間,檢查並確認是否已經註冊了重新啟動位址reboothandler

3. 如果中斷是 intr_rtc,isr檢查並確認鬧鐘是否已到期sysintr_rtc_alarm。

4. 如果中斷小於intr_maximum呼叫中斷鏈nkcallintrchain,並將nkcallintrchain的返回值設定為臨時返回值。

5. 如果中斷鏈未包含中斷,則通過oemtranslateirq對映當前硬體中斷,並得到從oemtranslateirq返回的syintr值。通常,如果在oeminit函式中註冊過該中斷,則oemtranslateirq會返回邏輯中斷號,否則會返回sysintr_nop。

6. 呼叫picenableinterrupt啟用除當前中斷以外的所有中斷

7. 完成恰當的中斷結束工作以通知pic中斷已完成

從第5步可以知道,要完成乙個物理到邏輯中斷的轉換,有兩種方法:

1.直接修改oal層下面的oem函式,增加相應的中斷號相關的實現。

2.動態生成iisr註冊進核心

ist的實現:

在ist開始時,通常我們可以用cesetthreadpriority函式為ist執行緒設定合適的優先順序。

接著ist需要做的是使用createevent()函式建立乙個event核心物件,

然後使用interruptinitialize()函式負責把某個邏輯中斷號與乙個event核心物件關聯起來,當中斷發生時,作業系統會負責引發這個事件,函式的原形如下:

bool interruptinitialize(

dword idint, // sysintr中斷號

handle hevent, // 與該中斷相關聯的事件控制代碼

lpvoid pvdata, // 傳給oeminterruptenable函式的緩衝區指標

dword cbdata // 緩衝區的大小

);然後,ist通常在前面建立的event物件上使用waitforsingleobject來等待。這樣,當中斷產生時waitforsingleobject就會返回,ist可以對中斷進行處理,例如對裝置進行必要的i/o操作來得到外設中的資料。當中斷處理結束之後,需要呼叫interruptdone來完成本次中斷處理。

中斷的延遲:

1. isr延遲時間

2. isr執行時間

3. os執行系統呼叫的時間

4. 排程ist時間

呵呵,終於還算搞完了,這是我的第一篇部落格,雖然大多都是看書上來的。還請多多支援!

睡個好覺,晚安!! 

QNX驅動開發 中斷處理,中斷響應機制

鋒影 e mail 174176320 qq.com 在作業系統中,對於中斷的處理一直是一件麻煩事,其實主要是對作業系統的中斷管理機制不熟悉。當中斷產生時,核心去執行中斷服務程式 isr,中斷服務程式中要做盡量少的工作,以提高系統執行效率,有些人在中斷服務程式中使用延時函式和 printf 函式和m...

wince5 0 Eboot下USB中斷機制

開始在eboot中使用usb的時候很奇怪中斷響應。因為在eboot和stepldr中都沒有看到有對中斷向量表部分的處理。那麼這個中斷是怎麼觸發?最後在usb.c中的isr init找到這句話 pisr unsigned 0xea000000 unsigned isrhandler 0x8000000...

WINCE中斷例子

軟體包測試你的ce的中斷,安裝軟體包後如下圖 以下是10號中斷測試的具體說明 本流驅動在pb平台安裝完成以後,就可以使用irq10號物理中斷,流輸出的是對應10號中斷的乙個事件,事件到來一次,表示中斷發生一次,在500m的研華pcm3370上,evc呼叫這個流驅動,可以達到40us的響應速度,c 精...