Condividi tramite


Maschere di interrupt GPIO

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

Se un'interruzione attivata dal livello da un dispositivo periferico è abilitata e attiva, ma il gestore trap del kernel non può eseguire immediatamente la routine del servizio di interruzione del dispositivo (ISR) per cancellare l'interrupt, il gestore maschera l'interrupt nel pin GPIO per evitare che il pin causi più interruzioni. Successivamente, dopo l'esecuzione dell'ISR e la cancellazione dell'interrupt, l'interrupt può essere mascherato in modo sicuro.

La maschera di un interrupt non cancella o disabilita l'interrupt. Se un interrupt GPIO è abilitato, attivo e mascherato, rimuovendo il mascheramento di questo interrupt, il dispositivo controller GPIO segnala una richiesta di interruzione al processore.

Un bit della maschera di interrupt GPIO non ha alcun effetto mentre l'interrupt GPIO è disabilitato. La funzione di callback CLIENT_EnableInterrupt imposta il bit mask per l'interrupt su zero; ovvero, l'interrupt viene inizialmente mascherato dopo l'abilitazione.

Una distinzione importante tra la maschera e la disabilitazione di un pin di interruzione GPIO è che la maschera mantiene le impostazioni di configurazione dell'interrupt del pin, mentre la disabilitazione del pin non lo fa. Mentre un pin di interrupt GPIO viene mascherato, mantiene la modalità di interruzione programmata in precedenza (attivata da edge o attivata a livello), la polarità (attiva-alta, bassa attiva o attiva-entrambe) e le impostazioni di debounce. Queste impostazioni diventano nuovamente effettive non appena l'interrupt non viene mascherato. Tuttavia, quando un interrupt è disabilitato, tutte le impostazioni di configurazione dell'interrupt del pin vengono perse. Dopo aver abilitato il pin, deve essere programmato di nuovo con le impostazioni di configurazione di interrupt necessarie.

Alcuni controller GPIO implementano, in hardware, registri di interrupt-mask separati e distinti dai registri di abilitazione degli interrupt.

Tuttavia, altri controller GPIO forniscono un singolo set di registri hardware che combinano le funzioni interrupt-mask e interrupt-enable. I driver per questi controller emulano registri separati di interrupt-mask e di interrupt-enable nel software. A tale scopo, questi driver tengono traccia degli stati logici dei bit di attivazione degli interrupt e dei bit di interrupt-mask e modificano i bit corrispondenti nel registro hardware per riflettere in modo accurato il comportamento dei bit combinati di interrupt-enable e interrupt-mask per ogni interrupt GPIO.