處理 SD 記憶卡中斷
安全數位 (SD) 記憶卡驅動程式沒有 (ISR) 插斷服務常式,而且它們不會 (IRQ) 資源取得中斷要求。 SD 匯流排驅動程式會偵測和攔截硬體中斷,然後透過中斷通知回呼常式PSDBUS_CALLBACK_ROUTINE向裝置驅動程式報告,如安全數位 (SD) 驅動程式堆疊和開啟和初始化 SD 匯流排界面一節所述。
設備磁碟機不需要在中斷通知回呼常式的內容中完成中斷處理。 驅動程式可以從回呼常式傳回,並在自己的內容中完成中斷處理。 當驅動程式完成處理中斷時,它會明確呼叫 SD 匯流排界面所提供的中斷通知常式,通知匯流排驅動程式。 如需中斷通知常式的詳細資訊,請參閱 PSDBUS_ACKNOWLEDGE_INT_ROUTINE。 當匯流排驅動程式收到此呼叫時,它會重新啟用中斷。
SD 設備磁碟機對於 IRQ 層級有兩個選項, (IRQ 層級) 執行。 SD 驅動程式可以在PASSIVE_LEVEL上獨佔執行,DISPATCH_LEVEL 也可以在中斷通知回呼常式的內容中執行,並在其餘時間PASSIVE_LEVEL執行。 當 SD 裝置驅動程式以獨佔方式在PASSIVE_LEVEL執行時,匯流排驅動程式會負責同步處理中斷。 如果您的裝置可以在中斷延遲上不受嚴格限制的情況下運作,請選擇此選項,因為它可簡化驅動程式的設計。 除了將中斷同步處理的工作卸載至匯流排驅動程式之外,還有其他優點。 例如,驅動程式必須經常傳輸資料以回應中斷。 如果驅動程式的回呼常式在PASSIVE_LEVEL執行,則您可以執行同步 I/O 作業,而不是非同步 I/O 作業。 如果回呼常式在DISPATCH_LEVEL執行,驅動程式必須先等到它在較低的 IRQL 執行,再執行同步 I/O。
SD 設備磁碟機會指定 IRQL,當它初始化 SD 匯流排界面時,它會在其中執行。 若要在中斷通知回呼常式的DISPATCH_LEVEL執行,驅動程式必須將SDBUS_INTERFACE_PARAMETERS結構的CallbackAtDpcLevel成員設定為TRUE,並將這個結構傳遞至介面初始化常式。 如需介面常式的描述,請參閱 PSDBUS_INITIALIZE_INTERFACE_ROUTINE。 若要在PASSIVE_LEVEL獨佔執行,驅動程式必須將 CallbackAtDpcLevel 設定為 FALSE。