处理 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 设备驱动程序指定初始化 SD 总线接口时运行它的 IRQL。 若要在中断通知回调例程DISPATCH_LEVEL运行,驱动程序必须将SDBUS_INTERFACE_PARAMETERS结构的 CallbackAtDpcLevel 成员设置为 TRUE,并将此结构传递给接口初始化例程。 有关接口例程的说明,请参阅 PSDBUS_INITIALIZE_INTERFACE_ROUTINE。 若要在PASSIVE_LEVEL以独占方式运行,驱动程序必须将 CallbackAtDpcLevel 设置为 FALSE。