Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйверы карт Secure Digital (SD) не имеют обработчиков прерываний (ISR), а также не используют ресурсы запроса прерываний (IRQ). Драйвер шины SD обнаруживает и перехватывает аппаратные прерывания, а затем передает их драйверу устройства с помощью подпрограммы обратного вызова прерывания PSDBUS_CALLBACK_ROUTINE, как описано в разделах Стек драйверов Secure Digital (SD) и Открытие и инициализация интерфейса шины SD.
Драйвер устройства не должен выполнять обработку прерываний в контексте подпрограммы обратного вызова уведомления об прерывании. Драйвер может вернуться из коллбэк-функции и завершить обработку прерываний в своем контексте. Когда водитель завершает обработку прерывания, он сообщает водителю автобуса явным вызовом подпрограммы подтверждения прерывания, предоставленной интерфейсом SD bus. Дополнительные сведения о подпрограмме подтверждения прерываний можно найти в PSDBUS_ACKNOWLEDGE_INT_ROUTINE. Когда водитель автобуса получает этот вызов, он повторно включает прерывание.
Драйверы устройств SD имеют два варианта относительно уровней IRQL, на которых они работают. Драйвер SD может работать исключительно на PASSIVE_LEVEL, или он может работать на DISPATCH_LEVEL в контексте обработчика обратного вызова уведомлений о прерывании и на PASSIVE_LEVEL в остальное время. Когда драйвер устройства SD работает исключительно на уровне PASSIVE_LEVEL, драйвер шины берёт на себя ответственность за синхронизацию прерываний. Выберите этот параметр, если устройство может работать без строгих ограничений на задержку прерываний, так как это упрощает проектирование драйвера. Помимо разгрузки задачи синхронизации прерываний на водитель автобуса, существуют и другие преимущества. Например, водители должны часто передавать данные в ответ на прерывание. Если функция обратного вызова драйвера выполняется на уровне PASSIVE_LEVEL, она может выполнять синхронную операцию ввода-вывода вместо асинхронной. Если подпрограмма обратного вызова выполняется на уровне DISPATCH_LEVEL, драйвер должен дождаться, пока она не будет выполняться на более низком уровне IRQL, прежде чем выполнять синхронное ввод-вывод.
Драйвер устройства SD указывает уровень IRQL, который будет использоваться при инициализации интерфейса шины SD. Чтобы выполнить на DISPATCH_LEVEL в подпрограмме обратного вызова уведомления о прерывании, драйвер должен установить член CallbackAtDpcLevel структуры SDBUS_INTERFACE_PARAMETERS в значение TRUE и передать эту структуру в подпрограмму инициализации интерфейса. Описание подпрограммы интерфейса см. в PSDBUS_INITIALIZE_INTERFACE_ROUTINE. Чтобы запускаться исключительно в PASSIVE_LEVEL, драйвер должен установить для CallbackAtDpcLevel значение FALSE.