Freigeben über


GPIO-Interruptmasken

Allgemeine I/O(GPIO)-Pins, die als Interrupteingaben konfiguriert sind, können zusätzlich zur Aktivierung und Deaktivierung maskiert und entmasket werden.

Wenn eine vom Level ausgelöste Unterbrechung von einem Peripheriegerät aktiviert und aktiv ist, der Kernel-Trap-Handler jedoch nicht sofort die Unterbrechungsdienstroutine (ISR) des Geräts ausführen kann, um den Interrupt zu löschen, maskiert der Handler den Interrupt an der GPIO-Pin, um zu verhindern, dass der Pin wiederholt mehr Unterbrechungen verursacht. Später, nachdem der ISR ausgeführt und den Interrupt gelöscht hat, kann der Interrupt sicher entmasket werden.

Durch das Maskieren eines Interrupts wird der Interrupt nicht gelöscht oder deaktiviert. Wenn ein GPIO-Interrupt aktiviert, aktiv und maskiert ist, bewirkt das Entpacken dieses Interrupts, dass das GPIO-Controllergerät eine Interruptanforderung an den Prozessor signalisiert.

Ein GPIO-Interruptmaskenbit hat keine Auswirkung, während der GPIO-Interrupt deaktiviert ist. Die CLIENT_EnableInterrupt Rückruffunktion legt das Maskenbit für den Interrupt auf Null fest; d. h., der Interrupt wird zunächst nach der Aktivierung entmasket.

Ein wichtiger Unterschied zwischen Maskieren und Deaktivieren eines GPIO-Interrupt-Pins besteht darin, dass die Maskierung die Einstellungen für die Unterbrechungskonfiguration des Pins behält, während das Deaktivieren des Pins nicht funktioniert. Während ein GPIO-Interrupt-Pin maskiert ist, behält er den zuvor programmierten Unterbrechungsmodus (flankengesteuert oder pegelgesteuert), Polarität (aktiv-hoch, aktiv-niedrig oder aktiv-beide) und Entprellungseinstellungen bei. Diese Einstellungen werden wieder wirksam, sobald der Interrupt entmasket wird. Wenn jedoch ein Interrupt deaktiviert ist, gehen alle Einstellungen für die Unterbrechungskonfiguration des Pins verloren. Nachdem der Pin aktiviert wurde, muss er erneut mit den erforderlichen Unterbrechungskonfigurationseinstellungen programmiert werden.

Einige GPIO-Controller implementieren in der Hardware Interruptmaskenregister, die getrennt und von Interruptaktivierungsregistern verschieden sind.

Andere GPIO-Controller bieten jedoch einen einzigen Satz von Hardwareregistern, die die Interruptmaske und die Interrupt-Enable-Funktionen kombinieren. Die Treiber für diese Controller emulieren separate Interruptmasken- und Interrupt-Enable-Register in der Software. Dazu verfolgen diese Treiber die logischen Zustände der Bits zur Unterbrechungserlaubnis und der Interruptmaskenbits und bearbeiten die entsprechenden Bits im Hardwareregister, um das Verhalten der kombinierten logischen Bits zur Unterbrechungserlaubnis und der Unterbrechungsmaske für jeden GPIO-Interrupt genau widerzuspiegeln.