Partager via


Gestion des interruptions de carte SD

Les pilotes SD (Secure Digital) carte n’ont pas de routines de service d’interruption (ISR) et ils n’acquièrent pas de ressources de demande d’interruption (IRQ). Le pilote de bus SD détecte et intercepte les interruptions matérielles, puis les signale au pilote de périphérique au moyen de la routine de rappel de notification d’interruption PSDBUS_CALLBACK_ROUTINE, comme expliqué dans les sections Secure Digital (SD) Driver Stack et Opening and Initializing an SD Bus Interface.

Le pilote de périphérique n’a pas besoin d’interrompre le traitement dans le contexte de la routine de rappel de notification d’interruption. Le pilote peut revenir à partir de la routine de rappel et terminer le traitement des interruptions dans son propre contexte. Lorsque le pilote termine le traitement de l’interruption, il informe le pilote de bus par un appel explicite à une routine d’accusé de réception d’interruption fournie avec l’interface du bus SD. Pour plus d’informations sur la routine d’accusé de réception d’interruption, consultez PSDBUS_ACKNOWLEDGE_INT_ROUTINE. Lorsque le pilote de bus reçoit cet appel, il réactive l’interruption.

Les pilotes de périphérique SD ont deux options en ce qui concerne les niveaux IRQ (IRQL) auxquels ils s’exécutent. Un pilote SD peut s’exécuter exclusivement à PASSIVE_LEVEL, ou il peut s’exécuter à DISPATCH_LEVEL dans le contexte de la routine de rappel de notification d’interruption et à PASSIVE_LEVEL le reste du temps. Lorsqu’un pilote de périphérique SD s’exécute exclusivement à PASSIVE_LEVEL, le pilote de bus assume la responsabilité de la synchronisation des interruptions. Choisissez cette option si votre appareil peut fonctionner sans limiter strictement la latence des interruptions, car elle simplifiera la conception de votre pilote. En plus de décharger la tâche de synchronisation d’interruption sur le pilote de bus, il existe d’autres avantages. Pour instance, les pilotes doivent fréquemment transférer des données en réponse à une interruption. Si la routine de rappel du pilote s’exécute à PASSIVE_LEVEL, il est libre d’effectuer une opération d’E/S synchrone plutôt qu’une opération asynchrone. Si la routine de rappel s’exécute à DISPATCH_LEVEL, le pilote doit attendre qu’il s’exécute à un niveau d’IRQL inférieur avant d’effectuer des E/S synchrones.

Un pilote de périphérique SD spécifie l’IRQL auquel il s’exécutera lorsqu’il initialise l’interface du bus SD. Pour s’exécuter à DISPATCH_LEVEL dans la routine de rappel de notification d’interruption, le pilote doit définir le membre CallbackAtDpcLevel de la structure SDBUS_INTERFACE_PARAMETERS sur TRUE et passer cette structure à la routine d’initialisation de l’interface. Pour obtenir une description de la routine d’interface, consultez PSDBUS_INITIALIZE_INTERFACE_ROUTINE. Pour s’exécuter exclusivement à PASSIVE_LEVEL, le pilote doit définir CallbackAtDpcLevel surFALSE.