GPIO_CLX_AcquireInterruptLock-Funktion (gpioclx.h)

Die GPIO_CLX_AcquireInterruptLock-Methode ruft eine Interruptsperre für eine Pinbank im GPIO-Controller (Universelle E/A) ab.

Syntax

void GPIO_CLX_AcquireInterruptLock(
  [in] PVOID   Context,
  [in] BANK_ID BankId
);

Parameter

[in] Context

Ein Zeiger auf den Gerätekontext des GPIO-Controllertreibers. Die GPIO-Frameworkerweiterung (GpioClx) übergibt diesen Zeigerwert als Parameter an die Rückruffunktionen, die vom GPIO-Controllertreiber implementiert werden.

[in] BankId

Der Bezeichner für diese Bank von GPIO-Pins. Wenn N die Anzahl der Banken im GPIO-Controller ist, ist BankId eine ganze Zahl im Bereich von 0 bis N–1.

Rückgabewert

Keine

Bemerkungen

Ein GPIO-Controllertreiberthread ruft diese Methode auf, um mit der Interruptdienstroutine (ISR) in GpioClx zu synchronisieren. Während der Aufrufer die Interruptsperre hält, kann die ISR keine vom Treiber implementierten Rückruffunktionen aufrufen, um auf GPIO-Register in der angegebenen Bank zuzugreifen. Ein GPIO-Controllertreiber sollte diese Methode aufrufen, bevor er versucht, auf GPIO-Register zuzugreifen, auf die möglicherweise von der GpioClx ISR zugegriffen wird.

Die GpioClx ISR ruft vom Treiber implementierte Rückruffunktionen auf, um auf Interrupt-status zuzugreifen und Register im GPIO-Controller zu aktivieren. Abhängig von den Funktionen des GPIO-Controllers wird die ISR entweder bei DIRQL oder bei PASSIVE_LEVEL aufgerufen. Weitere Informationen finden Sie unter Interrupt-bezogene Rückrufe.

Wenn die GpioClx ISR auf diese Interruptregister bei DIRQL zugreift, hebt GPIO_CLX_AcquireInterruptLock die IRQL des aufrufenden Threads auf den DIRQL-Wert aus, unter dem die ISR ausgeführt wird. Wenn die ISR bei PASSIVE_LEVEL ausgeführt wird, ändert diese Methode den IRQL des aufrufenden Threads nicht.

Die GPIO_CLX_ReleaseInterruptLock-Methode gibt eine Interruptsperre frei, die bei einem vorherigen Aufruf von GPIO_CLX_AcquireInterruptLock abgerufen wurde. Der Parameter BankId gibt die Bank an, die von der Sperre betroffen ist. Um eine Sperre für eine Bank freizugeben, muss der BankId-Parameter des GPIO_CLX_ReleaseInterruptLock-Aufrufs mit dem BankId-Parameter des GPIO_CLX_AcquireInterruptLock-Aufrufs übereinstimmen, der die Sperre abgerufen hat. Wenn der GPIO_CLX_AcquireInterruptLock Aufruf die IRQL des aufrufenden Threads ausgelöst hat, stellt GPIO_CLX_ReleaseInterruptLock den ursprünglichen IRQL dieses Threads wieder her.

Der GPIO-Controllertreiber kann Unterbrechungssperren für die verschiedenen Banken im GPIO-Controller unabhängig voneinander abrufen und freigeben. Es ist jedoch ein schwerwiegender Fehler für den Fahrer, zu versuchen, eine Sperre auf einer bestimmten Bank zu erwerben, wenn der Fahrer bereits eine Sperre auf dieser Bank hält.

Wenn der Context-Parameter NULL ist oder auf einen ungültigen GPIO-Gerätekontext verweist, führt diese Methode zu einer Fehlerüberprüfung in Debugbuilds von GpioClx.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 8.
Zielplattform Universell
Header gpioclx.h
Bibliothek Msgpioclxstub.lib
IRQL DIRQL oder bei PASSIVE_LEVEL. Siehe Hinweise.

Weitere Informationen

GPIO_CLX_ReleaseInterruptLock