Compartir a través de


Control de interrupciones de tarjeta SD

Los controladores de tarjeta Digital (SD) seguros no tienen rutinas de servicio de interrupción (ISR) y no adquieren recursos de solicitud de interrupción (IRQ). El controlador de bus SD detecta e intercepta interrupciones de hardware y, a continuación, los informa al controlador del dispositivo mediante la rutina de devolución de llamada de notificación de interrupción PSDBUS_CALLBACK_ROUTINE, como se explica en las secciones Secure Digital (SD) Driver Stack y Opening and Initializing an SD Bus Interface.

El controlador de dispositivo no tiene que completar el procesamiento de interrupciones en el contexto de la rutina de devolución de llamada de notificación de interrupción. El controlador puede volver de la rutina de devolución de llamada y completar el procesamiento de interrupciones en su propio contexto. Cuando el controlador termina de procesar la interrupción, informa al controlador de autobús mediante una llamada explícita a una rutina de confirmación de interrupción proporcionada con la interfaz de bus SD. Para obtener más información sobre la rutina de confirmación de interrupción, consulte PSDBUS_ACKNOWLEDGE_INT_ROUTINE. Cuando el controlador de autobús recibe esta llamada, vuelve a habilitar la interrupción.

Los controladores de dispositivos SD tienen dos opciones con respecto a los niveles irQ (IRQ) en los que se ejecutan. Un controlador SD se puede ejecutar exclusivamente en PASSIVE_LEVEL, o puede ejecutarse en DISPATCH_LEVEL mientras se encuentra en el contexto de la rutina de devolución de llamada de notificación de interrupción y en PASSIVE_LEVEL el resto del tiempo. Cuando un controlador de dispositivo SD se ejecuta exclusivamente en PASSIVE_LEVEL, el controlador de autobús asume la responsabilidad de sincronizar interrupciones. Elija esta opción si el dispositivo puede funcionar sin límites estrictos en la latencia de interrupción, ya que simplificará el diseño del controlador. Además de descargar la tarea de sincronización de interrupciones en el controlador de autobús, existen otras ventajas. Por ejemplo, los controladores deben transferir con frecuencia datos en respuesta a una interrupción. Si la rutina de devolución de llamada del controlador se ejecuta en PASSIVE_LEVEL, es libre de realizar una operación de E/S sincrónica en lugar de una asincrónica. Si la rutina de devolución de llamada se ejecuta en DISPATCH_LEVEL, el controlador debe esperar hasta que se ejecute en un IRQL inferior antes de realizar E/S sincrónica.

Un controlador de dispositivo SD especifica el IRQL en el que se ejecutará cuando inicialice la interfaz del bus SD. Para ejecutarse en DISPATCH_LEVEL de la rutina de devolución de llamada de notificación de interrupción, el controlador debe establecer el miembro CallbackAtDpcLevel de la estructura de SDBUS_INTERFACE_PARAMETERS en TRUE y pasar esta estructura a la rutina de inicialización de interfaz. Para obtener una descripción de la rutina de interfaz, consulte PSDBUS_INITIALIZE_INTERFACE_ROUTINE. Para ejecutarse exclusivamente en PASSIVE_LEVEL, el controlador debe establecer CallbackAtDpcLevel en FALSE.