Udostępnij przez


Passive-Level ISR-y

Począwszy od systemu Windows 8, sterowniki Kernel-Mode Driver Framework (KMDF) i User-Mode Driver Framework (UMDF) mogą opcjonalnie zarejestrować swoje procedury obsługi przerwania (ISR) do działania na poziomie pasywnym.

Aby uzyskać więcej informacji na temat pasywnopoziomowych ISR dla sterowników KMDF i UMDF, odwiedź następujące tematy:

Jeśli urządzenie peryferyjne używa wyprowadzenia GPIO do przekazywania żądania przerwania do procesora, abstrakcja przerwań w systemie Windows umożliwia sterownikowi tego urządzenia wygodne ignorowanie sprzętowych szczegółów kontrolera GPIO, z którym to wyprowadzenie jest powiązane. Gdy program obsługi pułapek jądra jest uruchamiany w odpowiedzi na żądanie przerwania przekazywane przez GPIO z urządzenia, ta procedura obsługi automatycznie czyści lub maskuje, w zależności od potrzeby, przerwanie w rejestrach sprzętowych GPIO. Ponadto program obsługi pułapek jądra bezpośrednio wywołuje isr urządzenia lub planuje uruchomienie tego isr w innym wątku.

Często rejestry sprzętowe GPIO są mapowane w pamięci, w tym przypadku program obsługi pułapek jądra może bezpośrednio uzyskać do nich dostęp w DIRQL. Jednak rejestry sprzętowe urządzenia peryferyjnego mogą nie być mapowane na pamięć, w tym przypadku sterownik urządzenia peryferyjnego musi używać żądań we/wy, aby uzyskać do nich dostęp. Jeśli tak, ISR dla sterownika urządzenia peryferyjnego musi działać na poziomie IRQL = PASSIVE_LEVEL, aby można było użyć żądań we/wy do wyciszenia przerwania lub wykonania początkowej obsługi przerwania. IsR na poziomie pasywnym może wysyłać żądanie we/wy synchronicznie i, w razie potrzeby, zablokować do momentu ukończenia żądania.

Aby obsługiwać pasywne ISR dla urządzenia peryferyjnego, które generuje sygnał żądania przerwania wyzwalanego przez krawędź, obsługa pułapek jądra czyści oczekujące przerwanie na pinie GPIO, a następnie planuje uruchomienie ISR w wątku jądra na poziomie pasywnym.

Aby obsługiwać pasywne ISR dla urządzenia peryferyjnego, które generuje sygnał żądania przerwania wyzwalanego na poziomie, program obsługi języka pułapki jądra maskuje oczekujące przerwanie na pinie GPIO, a następnie planuje uruchomienie ISR w wątku jądra działającym na poziomie pasywnym. ISR jest odpowiedzialny za wyczyszczenie żądania przerwania w urządzeniu peryferyjnym. Po powrocie funkcji ISR wątek jądra rozmaskowuje przerwanie na pinie GPIO.

Ponieważ przerwanie pozostaje maskowane do momentu powrotu ISR, ISR na poziomie pasywnym urządzenia powinien wykonać tylko początkową obsługę przerwania, a następnie powrócić, aby uniknąć opóźnienia pasywnych ISR dla innych urządzeń. Zazwyczaj sterownik powinien odroczyć dodatkowe przetwarzanie związane z przerwaniami do wątku obsługi przerwania, działającego z niższym priorytetem niż ISR.