Udostępnij przez


Obsługa przerwania (UMDF 1)

Ostrzeżenie

UMDF 2 jest najnowszą wersją UMDF i zastępuje UMDF 1. Wszystkie nowe sterowniki UMDF powinny być zapisywane przy użyciu funkcji UMDF 2. Do usługi UMDF 1 nie są dodawane żadne nowe funkcje, a obsługa UMDF 1 na nowszych wersjach systemu Windows 10 jest ograniczona. Sterowniki uniwersalne systemu Windows muszą używać funkcji UMDF 2.

Zarchiwizowane przykłady UMDF 1 można znaleźć w Windows 11, wersja 22H2 - Maj 2022 aktualizacja przykładów sterowników.

Aby uzyskać więcej informacji, zobacz Wprowadzenie do usługi UMDF.

Obsługa przerwania składa się z dwóch kroków:

  1. Szybkie zapisywanie ulotnych informacji (takich jak zawartość rejestrów) w procedurze obsługi przerwania.
  2. Przetwarzanie zapisanych informacji nietrwałych w rutynie zadania roboczego.

Gdy urządzenie generuje przerwanie sprzętowe, platforma wywołuje procedurę obsługi przerwania sterownika (ISR), którą sterowniki oparte na platformie implementują jako funkcję wywołania zwrotnego OnInterruptIsr.

Funkcja wywołania zwrotnego OnInterruptIsr, uruchamiana na poziomie PASSIVE_LEVEL, musi szybko zapisywać informacje o przerwaniu, takie jak zawartość rejestru, kolejkować zadanie robocze do dalszego przetwarzania danych i powrócić z ISR, aby umożliwić obsługę innych przerwań, jeśli linia przerwań jest współużytkowana. Ponieważ ISR sterownika UMDF działa w PASSIVE_LEVEL, obsługa przerwań PCI sterowanych liniowo nie jest zalecana. Te przerwania są zwykle współdzielone między wieloma urządzeniami. Niektóre z tych urządzeń mogą nie akceptować opóźnień ISR. Można jednak obsługiwać przerwania PCI MSI w sterowniku UMDF. Te przerwania mają semantykę krawędzi i nie są udostępniane.

Zazwyczaj funkcja wywołania zwrotnego OnInterruptIsr planuje zadanie robocze, aby później przetworzyć zapisane informacje. Sterowniki oparte na strukturze implementują procedury elementów roboczych jako funkcje wywołania zwrotnego OnInterruptWorkItem.

Większość sterowników używa jednej funkcji OnInterruptWorkItem wywołania zwrotnego dla każdego typu przerwania. Aby zaplanować wykonywanie funkcji wywołania zwrotnego OnInterruptWorkItem, sterownik musi wywołać IWDFInterrupt::QueueWorkItemForIsr w ramach funkcji OnInterruptIsr.

Jeśli sterownik tworzy wiele obiektów kolejki ramowej dla każdego urządzenia, możesz rozważyć użycie oddzielnego obiektu "workitem" i funkcji wywołania zwrotnego OnWorkItem dla każdej kolejki. Aby zaplanować wykonanie funkcji wywołania zwrotnego OnWorkItem, sterownik musi najpierw utworzyć co najmniej jeden obiekt elementu roboczego, wywołując funkcję IWdfDevice3::CreateWorkItem, zazwyczaj w funkcji wywołania zwrotnego IDriverEntry::OnDeviceAdd sterownika. Następnie funkcja sterownika OnInterruptIsr może wywołać funkcję wywołania zwrotnego IWDFWorkItem::Enqueue.

Sterowniki zazwyczaj kończą żądania we/wy w swoich funkcjach zwrotnych OnInterruptWorkItem lub OnWorkItem.

Aby zapoznać się z przykładem sterownika UMDF obsługującego przerwania, zobacz przykładowy sterownik SpbAccelerometer, dostępny począwszy od Zestawu Windows 8 WDK.