Udostępnij za pośrednictwem


Omówienie obsługi sterowników GPIO

Począwszy od systemu Windows 8, rozszerzenie struktury GPIO (GpioClx) upraszcza zadanie pisania sterownika dla urządzenia kontrolera GPIO. Ponadto GpioClx zapewnia obsługę sterowników dla urządzeń peryferyjnych łączących się z wyprowadzeniami GPIO. GpioClx, czyli rozszerzenie dostarczane przez system do struktury sterowników trybu jądra (KMDF), wykonuje zadania przetwarzania wspólne dla elementów członkowskich klasy urządzenia GPIO.

W tym omówieniu omówiono następujące artykuły:

Sterowniki kontrolera GPIO

Dostawcy sprzętu dostarczają sterowniki do kontrolowania kontrolerów GPIO. Sterownik kontrolera GPIO to sterownik KMDF, który zarządza wszystkimi operacjami specyficznymi dla sprzętu dla kontrolera GPIO. Sterownik kontrolera GPIO współpracuje z GpioClx w celu obsługi żądań wejścia/wyjścia dla grup wyprowadzeń GPIO, które są skonfigurowane jako dane wejściowe i wyjściowe. Ponadto ten sterownik współpracuje z GpioClx w celu obsługi zapytań przerwań pochodzących z pinów GPIO skonfigurowanych jako wejścia przerwań.

Urządzenie kontrolera GPIO ma pewną liczbę wyprowadzeń GPIO. Te wyprowadzenia mogą być fizycznie połączone z urządzeniami peryferyjnymi. Wyprowadzenia GPIO można skonfigurować jako dane wejściowe danych, dane wyjściowe lub dane wejściowe żądania przerwania. Zazwyczaj wyprowadzenie GPIO jest przeznaczone dla urządzenia peryferyjnego i nie jest współużytkowane przez dwa lub więcej urządzeń. Połączenia między wyprowadzeniami GPIO i urządzeniami peryferyjnymi są stałe i nie można ich zmienić przez użytkownika (na przykład przez usunięcie urządzenia peryferyjnego i zastąpienie go innym urządzeniem). W związku z tym przypisanie wyprowadzeń GPIO do urządzeń peryferyjnych można opisać w oprogramowaniu układowym platformy.

Na poniższym diagramie przedstawiono sterownik kontrolera GPIO i GpioClx.

diagram blokowy składników gpio.

Sterownik kontrolera GPIO i GpioClx komunikują się ze sobą za pośrednictwem interfejsu gpioClx device-driver interface (DDI). Sterownik kontrolera GPIO wywołuje metody wsparcia sterowników , które są implementowane przez GpioClx. GpioClx wywołuje funkcje wywołania zwrotnego zdarzeń , które są implementowane przez sterownik kontrolera GPIO.

Sterownik kontrolera GPIO uzyskuje bezpośredni dostęp do rejestrów sprzętowych urządzenia kontrolera GPIO.

GpioClx obsługuje żądania we/wy ze sterowników dla urządzeń peryferyjnych, które fizycznie łączą się z wyprowadzeniami GPIO. GpioClx tłumaczy te żądania we/wy na proste operacje sprzętowe, które wykonuje przez wywołanie funkcji zwrotnych zdarzeń zaimplementowanych przez sterownik kontrolera GPIO. Na przykład, aby odczytywać dane z lub zapisywać dane w zestawie wyprowadzeń GPIO, GpioClx wywołuje funkcje zwrotne zdarzeń, takie jak CLIENT_ReadGpioPins i CLIENT_WriteGpioPins. GpioClx zarządza kolejkami we/wy dla kontrolera GPIO, dzięki czemu zwalnia sterownik kontrolera GPIO z tego zadania.

Ponadto GpioClx obsługuje podstawowe przerwania z urządzenia kontrolera GPIO i mapuje te przerwania na pomocnicze przerwania, które są obsługiwane przez sterowniki urządzeń peryferyjnych. Przerwania podstawowe to przerwania generowane przez urządzenia sprzętowe. Dodatkowe przerwania są generowane przez system operacyjny w odpowiedzi na niektóre przerwania podstawowe. Zarówno przerwania podstawowe, jak i pomocnicze są identyfikowane przez globalne przerwania systemowe (GSI). Oprogramowanie układowe ACPI dla platformy sprzętowej przypisuje interfejsy GSI do podstawowych przerwań, a w czasie wykonywania system operacyjny przypisuje interfejsy GSI do przerwań pomocniczych.

Na przykład firmware przypisuje GSI do przerwania sprzętowego z kontrolera GPIO, a system operacyjny przypisuje GSI do pinu GPIO skonfigurowanego jako wejście przerwania.

GpioClx implementuje ISR, który obsługuje sprzętowo generowane pierwotne przerwania z urządzenia kontrolera GPIO. Kiedy urządzenie peryferyjne zgłasza przerwanie na pinie GPIO, a przerwania na tym pinie są włączone i odmaskowane, kontroler GPIO przerywa procesor. W odpowiedzi na to, program obsługi pułapki jądra planuje uruchomienie GpioClx ISR. Aby zidentyfikować wyprowadzenie GPIO, które spowodowało przerwanie, GpioClx ISR wywołuje funkcję wywołania zwrotnego zdarzeń CLIENT_QueryActiveInterrupts, która jest implementowana przez sterownik kontrolera GPIO. GpioClx ISR następnie wyszukuje GSI przypisane do tego pinu i przekazuje to GSI do warstwy abstrakcji sprzętu (HAL). HAL generuje pomocnicze przerwanie przez wywołanie ISR zarejestrowanego dla tego GSI. Ten ISR należy do sterownika urządzenia peryferyjnego, który pierwotnie zgłaszało przerwanie.

Aby uzyskać więcej informacji na temat przerwań podstawowych i wtórnych, zobacz przerwania GPIO.

Sterowniki dla urządzeń peryferyjnych korzystających z wyprowadzeń GPIO

Podczas uruchamiania menedżer Plug and Play (PnP) wylicza zarówno urządzenia PnP, jak i urządzenia inne niż PnP. W przypadku urządzeń innych niż PnP z stałymi połączeniami z wyprowadzeniami GPIO menedżer PnP wysyła zapytanie do oprogramowania układowego platformy w celu określenia, które wyprowadzenia GPIO są przypisane jako zasoby sprzętowe zarządzane przez system do tych urządzeń.

Sterownik KMDF dla urządzenia peryferyjnego otrzymuje przypisane zasoby sprzętowe podczas EvtDevicePrepareHardware callback. Te zasoby mogą obejmować wyprowadzenia interfejsu GPIO skonfigurowane jako wyjścia danych, wejścia danych lub wejścia żądania przerwania.

Zasób we/wy gpIO jest nowym typem zasobu systemu Windows w systemie Windows 8. Ten zasób składa się z zestawu co najmniej jednego wyprowadzenia GPIO, które mogą być używane jako dane wejściowe lub dane wyjściowe. Jeśli sterownik urządzenia peryferyjnego otwiera zasób we/wy gpIO dla operacji odczytu, sterownik używa wszystkich wyprowadzeń w zasobie jako danych wejściowych. Jeśli sterownik otwiera zasób We/Wy GPIO do zapisu, używa wszystkich wyprowadzeń w tym zasobie jako danych wyjściowych. Przykłady kodu pokazujące, jak sterownik urządzenia peryferyjnego otwiera połączenie logiczne z zestawem wyprowadzeń GPIO we/wy, zobacz w następujących tematach:

Łączenie sterownika KMDF z wyprowadzeniami wejścia/wyjścia GPIO

Pin GPIO skonfigurowany jako wejście przerwania jest przypisywany do sterownika jako standardowy zasób przerwania Windows. Abstrakcja zasobów przerwań ukrywa fakt, że przerwanie może być zrealizowane przez wyprowadzenie GPIO zamiast, na przykład, przez programowalny kontroler przerwań. W związku z tym sterownik może traktować zasób przerwania opartego na GPIO tak samo jak każdy inny zasób przerwania.

Aby uzyskać dostęp do wyprowadzeń GPIO w zasobie wejścia/wyjścia GPIO, sterownik urządzenia peryferyjnego musi otworzyć połączenie logiczne z wyprowadzeniami. Sterownik KMDF wywołuje metodę WdfIoTargetOpen, aby otworzyć połączenie. Za pośrednictwem tego połączenia sterownik może wysyłać żądania we/wy do wyprowadzeń GPIO. Sterownik wysyła IOCTL_GPIO_READ_PINS żądania odczytu danych z tych numerów PIN (jeśli są wyprowadzeniami wejściowymi) lub IOCTL_GPIO_WRITE_PINS żądania zapisu danych do nich (jeśli są to wyprowadzenia wyjściowe).

Aby odebrać przerwania z pinu GPIO w źródle przerwania, sterownik urządzenia peryferyjnego musi zarejestrować swoją procedurę obsługi przerwań (ISR), aby odbierać przerwania z tego źródła implementowanego przez ten pin. Sterownik KMDF wywołuje metodę WdfInterruptCreate, aby połączyć ISR z przerwaniem.