Interruzioni GPIO

Alcuni dispositivi controller di I/O (GPIO) per utilizzo generico possono configurare i pin GPIO per funzionare come input di richiesta di interruzione. Questi input di richiesta di interruzione sono basati su dispositivi periferici connessi fisicamente ai pin GPIO. I driver per questi controller GPIO possono abilitare, disabilitare, mascherare, smascherare e cancellare le richieste di interruzione nei singoli pin GPIO.

Il supporto per gli interruzioni GPIO è facoltativo. L'estensione del framework GPIO (GpioClx) non richiede controller GPIO per supportare gli interruzioni GPIO.

Contenuto della sezione

Argomento Descrizione

Interruzioni primarie e secondarie

La gestione degli interruzioni GPIO è intrinsecamente un processo a due fasi. L'interruzione dal controller di I/O (GPIO) per utilizzo generico, che causa l'esecuzione della routine del servizio di interruzione GpioClx (GpioClx), viene chiamata interruzione primaria. Questo ISR esegue il mapping del pin GPIO interrotto a un interruzione di sistema globale (GSI) e passa questo GSI al livello di astrazione hardware (HAL). Hal genera un interruzione secondario per eseguire un secondo ISR connesso logicamente al pin GPIO tramite questo GSI. Questo processo viene illustrato nel diagramma in Panoramica del supporto driver GPIO.

Risorse di interruzione basate su GPIO

I driver per i dispositivi periferici che inviano interruzioni ai pin di I/O (GPIO) generici acquisiscono interruzioni GPIO come risorse di interruzione di Windows astratte. I driver del framework driver in modalità kernel ricevono queste risorse tramite le funzioni di callback degli eventi EvtDevicePrepareHardware.

ISR a livello passivo

A partire da Windows 8, il framework driver in modalità kernel (KMDF) e i driver in modalità utente (UMDF) possono, come opzione, registrare le routine di servizio di interruzione per l'esecuzione a livello passivo.

Callback correlati all'interruzione

Come opzione, il driver per un controller di I/O (GPIO) per utilizzo generico può fornire supporto per gli interruzioni GPIO. Per supportare gli interruzioni GPIO, un driver del controller GPIO implementa un set di funzioni di callback per gestire questi interruzioni. Il driver include puntatori a queste funzioni di callback nel pacchetto di registrazione fornito dal driver quando si registra come client dell'estensione del framework GPIO (GpioClx).

Sincronizzazione degli interruzioni per i driver del controller GPIO

I driver del controller GPIO possono chiamare i metodi GPIO_CLX_AcquireInterruptLock e GPIO_CLX_ReleaseInterruptLock per acquisire e rilasciare i blocchi di interruzione implementati internamente dall'estensione del framework GPIO (GpioClx). Il codice driver eseguito in IRQL = PASSIVE_LEVEL può chiamare questi metodi per sincronizzare la routine del servizio di interruzione (ISR) in GpioClx. GpioClx dedica un blocco di interruzione separato a ogni banca di pin nel controller GPIO.

Abilitazione e disabilitazione di interruzioni GPIO condivise

In alcuni casi, le righe di richiesta di interruzione da due o più dispositivi periferici potrebbero connettersi allo stesso pin di I/O (GPIO) per utilizzo generico fisico. Il pin GPIO per una riga di interruzione condivisa è in genere configurato per gli interruzioni attivati a livello.

Maschere di interruzione GPIO

Pin di I/O (GPIO) per utilizzo generico configurati come input di interruzione possono essere mascherati e non mascherati oltre a essere abilitati e disabilitati.