次の方法で共有


GPIO_CLX_AcquireInterruptLock関数 (gpioclx.h)

GPIO_CLX_AcquireInterruptLock メソッドは、汎用 I/O (GPIO) コントローラーのピンのバンクに割り込みロックを取得します。

構文

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

パラメーター

[in] Context

GPIO コントローラー ドライバーの デバイス コンテキストへのポインター。 GPIO フレームワーク拡張機能 (GpioClx) は、このポインター値をパラメーターとして、GPIO コントローラー ドライバーによって実装されるコールバック関数に渡します。

[in] BankId

GPIO ピンのこのバンクの識別子。 N が GPIO コントローラー内のバンクの数である場合、 BankId は 0 から N から 1 の範囲の整数です。

戻り値

なし

解説

GPIO コントローラー ドライバー スレッドは、このメソッドを呼び出して、GpioClx の割り込みサービス ルーチン (ISR) に同期します。 呼び出し元が割り込みロックを保持している間、ISR はドライバーによって実装されたコールバック関数を呼び出して、指定されたバンクの GPIO レジスタにアクセスすることはできません。 GPIO コントローラー ドライバーは、GpioClx ISR によってアクセスされる可能性がある GPIO レジスタへのアクセスを試みる前に、このメソッドを呼び出す必要があります。

GpioClx ISR は、ドライバーによって実装されたコールバック関数を呼び出して割り込み状態にアクセスし、GPIO コントローラーでレジスタを有効にします。 GPIO コントローラーの機能に応じて、ISR は DIRQL または PASSIVE_LEVEL で呼び出されます。 詳細については、「 割り込み関連のコールバック」を参照してください。

GpioClx ISR が DIRQL でこれらの割り込みレジスタにアクセス すると、GPIO_CLX_AcquireInterruptLock は呼び出し元スレッドの IRQL を ISR が実行される DIRQL に上げます。 ISR がPASSIVE_LEVELで実行されている場合、このメソッドは呼び出し元スレッドの IRQL を変更しません。

GPIO_CLX_ReleaseInterruptLock メソッドは、GPIO_CLX_AcquireInterruptLockの前の呼び出しで取得された割り込みロックを解放します。 BankId パラメーターは、ロックの影響を受けるバンクを指定します。 銀行のロックを解除するには、GPIO_CLX_ReleaseInterruptLock呼び出しの BankId パラメーターが、ロックを取得したGPIO_CLX_AcquireInterruptLock呼び出しの BankId パラメーターと一致している必要があります。 GPIO_CLX_AcquireInterruptLock呼び出しで呼び出し元のスレッドの IRQL が発生した場合、GPIO_CLX_ReleaseInterruptLockはこのスレッドの元の IRQL を復元します。

GPIO コントローラー ドライバーは、GPIO コントローラーのさまざまなバンクで割り込みロックを個別に取得および解放できます。 ただし、ドライバーが既にこのバンクのロックを保持している場合、ドライバーが特定の銀行のロックを取得しようとすると致命的なエラーになります。

Context パラメーターが NULL であるか、無効な GPIO デバイス コンテキストを指している場合、このメソッドは GpioClx のデバッグ ビルドでバグ チェックを引き起こします。

要件

要件
サポートされている最小のクライアント Windows 8以降で使用できます。
対象プラットフォーム ユニバーサル
Header gpioclx.h
Library Msgpioclxstub.lib
IRQL DIRQL または PASSIVE_LEVEL。 「解説」を参照してください。

こちらもご覧ください

GPIO_CLX_ReleaseInterruptLock