Sdílet prostřednictvím


Přehled podpory ovladačů GPIO

Počínaje Systémem Windows 8 zjednodušuje rozšíření GPIO framework (GpioClx) úlohu zápisu ovladače pro zařízení kontroleru GPIO. Kromě toho GpioClx poskytuje podporu ovladačů pro periferní zařízení, která se připojují k kolíkům GPIO. GpioClx, což je rozšíření dodané systémem na rozhraní ovladače režimu jádra (KMDF), provádí úlohy zpracování, které jsou společné členům třídy zařízení GPIO.

Tento přehled popisuje následující články:

Ovladače kontroleru GPIO

Dodavatelé hardwaru dodávají ovladače pro řízení svých řadičů GPIO. Ovladač kontroleru GPIO je ovladač KMDF, který spravuje všechny operace specifické pro hardware pro řadič GPIO. Ovladač kontroleru GPIO spolupracuje s GpioClx na zpracování vstupně-výstupních požadavků pro skupiny pinů GPIO nakonfigurovaných jako vstupy dat a výstupy dat. Kromě toho tento ovladač spolupracuje s GpioClx na zpracování žádostí o přerušení z pinů GPIO, které jsou nakonfigurovány jako přerušovací vstupy.

Zařízení ovladače GPIO má nějaký počet pinů GPIO. Tyto kolíky mohou být fyzicky připojeny k periferním zařízením. Kolíky GPIO lze nakonfigurovat jako datové vstupy, datové výstupy nebo vstupy pro požadavky na přerušení. Kolík GPIO je obvykle vyhrazený pro periferní zařízení a není sdílen dvěma nebo více zařízeními. Připojení mezi kolíky GPIO a periferními zařízeními jsou pevná a uživatel je nemůže změnit (například odebráním periferního zařízení a jeho nahrazením jiným zařízením). Přiřazení špendlíků GPIO k periferním zařízením lze tedy popsat ve firmwaru platformy.

Následující diagram znázorňuje ovladač kontroleru GPIO a GpioClx.

blokový diagram GPIO komponent.

Ovladač řadiče GPIO a GpioClx vzájemně komunikují prostřednictvím rozhraní gpioClx device-driver interface (DDI). Ovladač GPIO volá metody podpory ovladače, které jsou implementovány GpioClx. GpioClx volá funkce zpětného volání událostí, které jsou implementovány ovladačem řadiče GPIO, .

Ovladač kontroleru GPIO přistupuje přímo k hardwarovým registrům zařízení kontroleru GPIO.

GpioClx zpracovává vstupně-výstupní požadavky z ovladačů pro periferní zařízení, která se fyzicky připojují k pinům GPIO. GpioClx tyto vstupně-výstupní požadavky překládá do jednoduchých hardwarových operací, které provádí voláním funkcí zpětného volání událostí implementovaných ovladačem kontroleru GPIO. Pokud například chcete číst data ze sady pinů GPIO nebo je zapisovat do sady pinů GPIO, GpioClx volá funkce zpětného volání událostí, jako jsou CLIENT_ReadGpioPins a CLIENT_WriteGpioPins. GpioClx spravuje fronty vstupně-výstupních operací pro řadič GPIO a tím zbavuje ovladač řadiče GPIO této úlohy.

Kromě toho GpioClx zpracovává primární přerušení ze zařízení kontroleru GPIO a mapuje tyto přerušení na sekundární přerušení, které jsou zpracovávány ovladači periferních zařízení. Primární přerušení jsou přerušení, která jsou generována hardwarovými zařízeními. Sekundární přerušení jsou generována operačním systémem v reakci na určité primární přerušení. Primární i sekundární přerušení jsou identifikována globálními přerušeními systému (GSI). Firmware ACPI pro hardwarovou platformu přiřazuje identifikátory GSI k primárním přerušením, a za běhu operačního systému přiřazuje identifikátory GSI k sekundárním přerušením.

Například firmware přiřadí GSI hardwarovému přerušení z řadiče GPIO a operační systém přiřadí GSI k GPIO kolíku, který je nakonfigurovaný jako vstup pro přerušení.

GpioClx implementuje ISR, který zpracovává hardwarově generované primární přerušení ze zařízení řadiče GPIO. Když periferní zařízení vyvolá přerušení na GPIO pinu a na tomto pinu jsou přerušení povolena a nemaskována, řadič GPIO přeruší procesor. V reakci na to obslužná rutina zachytávače jádra naplánuje spuštění ISR GpioClx. Aby bylo možné identifikovat pin GPIO, který způsobil přerušení, volá GpioClx ISR funkci zpětného volání události CLIENT_QueryActiveInterrupts, která je implementována ovladačem řadiče GPIO. GpioClx ISR pak vyhledá GSI přiřazené k tomuto pinu a předá GSI do vrstvy abstrakce hardwaru (HAL). HAL generuje sekundární přerušení voláním ISR, který je zaregistrován pro tuto GSI. Toto ISR patří ovladači periferního zařízení, které původně vyvolalo přerušení.

Další informace o primárních a sekundárních přerušeních naleznete v části GPIO Přerušení.

Ovladače pro periferní zařízení, která používají piny GPIO

Při spuštění vytvoří správce PnP (Plug and Play) výčet zařízení PnP i zařízení, která nejsou zařízeními PnP. U jiných zařízení než PnP s pevnými připojeními k pinům GPIO se správce PnP dotazuje firmwaru platformy, aby určil, které piny GPIO jsou k těmto zařízením přiřazeny jako hardwarové prostředky spravované systémem.

Ovladač KMDF pro periferní zařízení obdrží přiřazené hardwarové prostředky během EvtDevicePrepareHardware zpětné volání. Tyto prostředky mohou zahrnovat piny GPIO, které mohou být nakonfigurovány jako datové výstupy, datové vstupy nebo vstupy pro požadavky na přerušení.

Vstupně-výstupní prostředek GPIO je nový typ prostředku Windows ve Windows 8. Tento prostředek se skládá ze sady jednoho nebo více kolíků GPIO, které lze použít jako vstupy dat nebo výstupy dat. Pokud ovladač periferního zařízení otevře prostředek GPIO I/O pro čtení, použije všechny piny v tomto prostředku jako vstupy dat. Pokud ovladač otevře prostředek GPIO I/O pro zápisy, ovladač jako výstupy dat použije všechny piny v daném prostředku. Příklady kódu, které ukazují, jak ovladač periferního zařízení otevře logické připojení k sadě kolíků GPIO I/O, najdete v následujících tématech:

připojení ovladače KMDF k vstupně-výstupním kolíkům GPIO

Pin GPIO, který je nakonfigurován jako vstup přerušení, je přiřazen ovladači jako běžný prostředek přerušení Windows. Abstrakce prostředku přerušení skryje skutečnost, že přerušení může být implementováno pomocí pinu GPIO místo například programovatelného kontroleru přerušení. Ovladač tedy může zacházet s prostředkem přerušení založeným na GPIO stejně jako s jakýmkoli jiným prostředkem přerušení.

Pro přístup ke kolíkům GPIO v prostředku GPIO I/O musí ovladač periferního zařízení navázat logické připojení ke kolíkům. Ovladač KMDF volá metodu WdfIoTargetOpen pro otevření připojení. Prostřednictvím tohoto připojení může ovladač odesílat vstupně-výstupní požadavky na piny GPIO. Ovladač odesílá IOCTL_GPIO_READ_PINS žádosti o čtení dat z těchto špendlíků (pokud se jedná o vstupní pin kódy) nebo IOCTL_GPIO_WRITE_PINS žádosti o zápis dat do nich (pokud jsou výstupní špendlíky).

Aby bylo možné přijímat přerušení z GPIO pinu ve zdroji přerušení, ovladač periferního zařízení musí zaregistrovat svou rutinu služby přerušení (ISR), aby přijímal přerušení ze zdroje přerušení implementovaného tímto pinem. Ovladač KMDF volá metodu WdfInterruptCreate pro připojení ISR k přerušení.