PortCls 系統驅動程式會實作 IInterruptSync 介面,以取得迷你埠驅動程式的優點。 IInterruptSync 代表中斷同步處理物件,可將中斷服務常式 (ISR) 清單與非中斷常式的執行同步處理。
中斷同步物件提供兩個關鍵功能:
執行 ISR 清單以回應中斷。 同步物件會連線到中斷來源。 每次發生中斷時,同步物件都會根據選取的模式,以指定的順序執行 ISR。 (請參閱以下三種模式的說明。
執行非 ISR 的例行程式。 這些非中斷例程未連接至同步物件的中斷。 相反地,非中斷例程會在呼叫端選擇的時間執行。 不過,同步處理物件會與物件的 ISR 清單同步執行非岔斷常式。 換句話說,非中斷常式會在同步物件清單中的任何 ISR 開始執行之前執行完成,反之亦然。
中斷同步物件在處理多個 ISR 時很靈活。 ISR 位於同步物件在中斷期間訪問的鏈結串列中。 當迷你埠驅動程式向同步處理物件註冊 ISR 時,它會指定 ISR 是否應該新增至此清單的開頭或結尾。
迷你埠驅動程式會呼叫 PcNewInterruptSync 函式來建立中斷同步處理物件。 在此呼叫期間,驅動程式會指定物件在中斷時間周遊其 ISR 清單的方式。 呼叫支援下表中 INTERRUPTSYNCMODE 列舉常數所指定的三個選項。
| 常數 | 意義 |
|---|---|
InterruptSyncModeNormal |
呼叫清單中的每個ISR,直到其中一個ISR傳回STATUS_SUCCESS為止。 |
InterruptSyncModeAll |
不論先前 ISR 的傳回碼為何,請呼叫清單中的每個 ISR 一次。 |
InterruptSyncModeRepeat |
遍歷整個ISR清單,直到清單中沒有ISR返回STATUS_SUCCESS為止。 |
在 InterruptSyncModeNormal 模式中,同步處理物件會呼叫清單中的每個 ISR,直到其中一個傳回 STATUS_SUCCESS為止。 不會呼叫清單中此ISR後面的任何ISR。 此模式模擬作業系統通常處理 ISR 的方式。 如果沒有任何 ISR 傳回STATUS_SUCCESS,則行為與 InterruptSyncModeAll 相同。
在 InterruptSyncModeAll 模式中,不論上述 ISR 的傳回碼為何,清單中的每個 ISR 都會只呼叫一次。 這適用於中斷來源不確定的更原始硬體,儘管它在其他情況下也可能有用。 例如,兩個中斷來源可能會在每個中斷上緊密同步,而不論特定中斷來自兩個來源中的哪一個。
在 InterruptSyncModeRepeat 模式中,同步處理物件會重複周遊整個 ISR 清單,直到清單中沒有任何常式傳回STATUS_SUCCESS為止。 此模式適用於來自多個來源的中斷可能同時在同一條中斷線上觸發,或者在 ISR 處理期間可能有第二個中斷觸發的情況。 每一個岔斷來源都必須能夠判斷是否需要處理。 如果一律傳回 STATUS_SUCCESS 的 ISR 在此模式中註冊到同步物件,系統將無法回應。
在任何這些模式下,如果註冊的任何 ISR 傳回 STATUS_SUCCESS,則同步物件會向作業系統確認中斷。 在所有三種模式中,如果所有中斷來源都指出它們未成功處理中斷,同步處理物件會將失敗的結果碼傳回給作業系統。
IInterruptSync 介面支援下列方法: