GPIO-Interruptmasken

GPIO-Pins (General-Purpose E/O), die als Interrupteingaben konfiguriert sind, können maskiert und enttarnt werden, zusätzlich dazu aktiviert und deaktiviert werden.

Wenn ein pegelausgelöster Interrupt von einem Peripheriegerät aktiviert und aktiv ist, der Kernel-Trap-Handler jedoch nicht sofort die Interruptdienstroutine (ISR) des Geräts ausführen kann, um den Interrupt zu löschen, maskiert der Handler den Interrupt am GPIO-Pin, um zu verhindern, dass der Pin wiederholt weitere Interrupts verursacht. Später, nachdem der ISR ausgeführt und den Interrupt gelöscht hat, kann der Interrupt sicher entmasket werden.

Durch maskieren eines Interrupts wird der Interrupt nicht gelöscht oder deaktiviert. Wenn ein GPIO-Interrupt aktiviert, aktiv und maskiert ist, bewirkt das Aufheben 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 0 fest. Das heißt, der Interrupt wird zunächst enttarnt, nachdem er aktiviert wurde.

Ein wichtiger Unterschied zwischen dem Maskieren und Deaktivieren eines GPIO-Interrupt-Pins besteht darin, dass die Maskierung die Interruptkonfigurationseinstellungen des Pins behält, während das Deaktivieren des Pins nicht der Fall ist. Während ein GPIO-Interruptnadel maskiert ist, behält er seinen zuvor programmierten Interruptmodus (edge-triggered oder level-triggered), Polarity (aktiv-hoch, aktiv-niedrig oder aktiv-beide) und Debounce-Einstellungen bei. Diese Einstellungen werden wieder wirksam, sobald der Interrupt entmasket wird. Wenn ein Interrupt jedoch deaktiviert ist, gehen alle Interruptkonfigurationseinstellungen des Pins verloren. Nachdem der Pin aktiviert wurde, muss er erneut mit den erforderlichen Interruptkonfigurationseinstellungen programmiert werden.

Einige GPIO-Controller implementieren in der Hardware Interrupt-Mask-Register, die getrennt sind und sich von Interruptaktivierungsregistern unterscheiden.

Andere GPIO-Controller bieten jedoch einen einzelnen Satz von Hardwareregistern, die die Funktionen interrupt-mask und interrupt-enable kombinieren. Die Treiber für diese Controller emulieren separate Interrupt-Masken und Interrupt-Enable-Register in Software. Dazu verfolgen diese Treiber die logischen Zustände der Interrupt-Enable-Bits und Interrupt-Mask-Bits und bearbeiten die entsprechenden Bits im Hardwareregister, um das Verhalten der kombinierten logischen Interrupt-Enable- und Interrupt-Mask-Bits für jeden GPIO-Interrupt genau widerzuspiegeln.