Delen via


GPIO-onderbrekingen

Sommige general-purpose I/O (GPIO)-controllerapparaten kunnen hun GPIO-pinnen configureren om te functioneren als onderbrekingsaanvraaginvoer. Deze interruptaanvraaginvoeren worden aangestuurd door randapparatuur die fysiek zijn verbonden met de GPIO-pinnen. De stuurprogramma's voor deze GPIO-controllers kunnen de interruptverzoeken voor afzonderlijke GPIO-pinnen inschakelen, uitschakelen, maskeren, ontmaskeren en wissen.

Ondersteuning voor GPIO-interrupts is optioneel. De GPIO Framework-extensie (GpioClx) vereist geen GPIO-controllers om GPIO-interrupts te ondersteunen.

In deze sectie

Onderwerp Beschrijving

Primaire en secundaire interrupts

GPIO-interruptafhandeling is inherent een proces met twee fasen. De interrupt van de GPIO-controller (General-Purpose I/O), die ervoor zorgt dat de onderbrekingsserviceroutine (ISR) van de GPIO-frameworkextensie (GpioClx) wordt uitgevoerd, wordt de primaire interrupt genoemd. Deze ISR wijst de onderbrekende GPIO-pin toe aan een globale systeemonderbreking (GSI) en geeft deze GSI door aan de hardwareabstractielaag (HAL). De HAL genereert een secundaire interrupt om een tweede ISR uit te voeren die logisch is verbonden met de GPIO-pin via deze GSI. Dit proces wordt weergegeven in het diagram in het gpio-stuurprogrammaondersteuningsoverzicht.

GPIO-Based Onderbrekkingbronnen

Stuurprogramma's voor randapparaten die interrupts verzenden naar GPIO-pinnen verkrijgen GPIO-interrupts als abstracte Windows-interruptbronnen. KMDF-stuurprogramma's (Kernel Mode Driver Framework ) ontvangen deze resources via hun EvtDevicePrepareHardware-gebeurtenis callback-functies.

Passive-Level ISRs

Vanaf Windows 8 kunnen stuurprogrammaframeworks (KMDF) en gebruikersmodus-stuurprogramma's (UMDF) optioneel hun interruptserviceroutines (ISR's) registreren om op passief niveau te worden uitgevoerd.

Interrupt-Related Callbacks

Als optie kan het stuurprogramma voor een GPIO-controller (general-purpose I/O) ondersteuning bieden voor GPIO-interrupts. Ter ondersteuning van GPIO-interrupts implementeert een GPIO-controllerstuurprogramma een set callbackfuncties om deze interrupts te beheren. Het stuurprogramma bevat verwijzingen naar deze callbackfuncties in het registratiepakket dat het stuurprogramma levert wanneer zich registreert als een client van de GPIO frameworkuitbreiding (GpioClx).

Synchronisatie onderbreken voor GPIO-controllerstuurprogramma's

GPIO-controllerstuurprogramma's kunnen de GPIO_CLX_AcquireInterruptLock en GPIO_CLX_ReleaseInterruptLock methoden aanroepen om interruptvergrendelingen te verkrijgen en los te laten die intern worden geïmplementeerd door de GPIO Framework-extensie (GpioClx). Stuurprogrammacode die wordt uitgevoerd op IRQL = PASSIVE_LEVEL kan deze methoden aanroepen om te synchroniseren met de onderbrekingsserviceroutine (ISR) in GpioClx. GpioClx wijdt een afzonderlijke interruptvergrendeling aan elke bank van pinnen in de GPIO-controller.

Gedeelde GPIO-interrupts in- en uitschakelen

In sommige gevallen kunnen onderbrekingsaanvraaglijnen van twee of meer randapparaten verbonden zijn met dezelfde fysieke GPIO-pin (General-Purpose I/O). De GPIO-pin voor een gedeelde interruptlijn wordt doorgaans geconfigureerd voor door niveau geactiveerde interrupts.

GPIO-interruptie-maskers

GPIO-pinnen (General-Purpose I/O) die als interrupt-invoer zijn geconfigureerd, kunnen naast in- en uitschakelen ook worden gemaskeerd en ontmaskerd.