Primäre und sekundäre Interrupts
Die GPIO-Interruptbehandlung ist inhärent ein zweistufiger Prozess. Der Interrupt des GPIO-Controllers (General Purpose E/O), der dazu führt, dass die GPIO-Frameworkerweiterung (GpioClx) interrupt service routine (ISR) ausgeführt wird, wird als primärer Interrupt bezeichnet. Dieser ISR ordnet den unterbrechenden GPIO-Pin einem globalen System interrupt (GSI) zu und übergibt diesen GSI an die Hardwareabstraktionsschicht (HAL). Die HAL generiert einen sekundären Interrupt , um einen zweiten ISR auszuführen, der über diesen GSI logisch mit dem GPIO-Pin verbunden ist. Dieser Vorgang wird im Diagramm in gpio Driver Support Overview (Übersicht) veranschaulicht.
GpioClx implementiert eine ISR zum Dienst von Interruptanforderungen, die der GPIO-Controller über GPIO-Pins empfängt, die als Interrupteingaben konfiguriert sind. Wenn ein Peripheriegerät einen Interrupt auf einem GPIO-Pin behauptet und der Interrupt im GPIO-Controller aktiviert und enttarnt wird, gibt die GPIO-Controllerhardware einen Interrupt für den Prozessor an. Als Reaktion auf diesen Interrupt fragt der ISR in GpioClx den GPIO-Controller ab, um den GPIO-Pin zu identifizieren, der den Interrupt generiert hat, und bestimmt dann, welcher GSI diesem Pin zugewiesen ist. Der GpioClx-ISR übergibt diesen GSI an die HAL, und die HAL ruft den ISR auf, der logisch mit dem GSI verbunden ist.
In der Regel gehört dieser zweite ISR zum Treiber für das Peripheriegerät, das den Interrupt auf dem GPIO-Pin behauptet hat. Informationen dazu, wie ein Peripheriegerätetreiber seinen ISR logisch mit einem GPIO-Interrupt-Pin verbindet, finden Sie unter GPIO-basierte Interruptressourcen.