GPIO 割り込み

一部の汎用 I/O (GPIO) コントローラー デバイスでは、割り込み要求の入力として機能するよう GPIO ピンを構成できます。 これらの割り込み要求の入力は、GPIO ピンに物理的に接続されている周辺機器によって駆動されます。 これらの GPIO コントローラー用のドライバーにより、個々の GPIO ピンで割り込み要求の有効化、無効化、マスク、マスク解除、およびクリアを実行できます。

GPIO 割り込みのサポートは選択できます。 GPIO フレームワーク拡張機能 (GpioClx) では、GPIO 割り込みをサポートするために GPIO コントローラーを必要としません。

このセクションの内容

トピック 説明

プライマリ割り込みとセカンダリ割り込み

GPIO 割り込み処理は、本質的に 2 段階のプロセスです。 汎用 I/O (GPIO) コントローラーからの割り込みは、GPIO フレームワーク拡張 (GpioClx) 割り込みサービス ルーチン (ISR) を実行し、プライマリ割り込みと呼ばれます。 この ISR は、割り込み GPIO ピンをグローバル システム割り込み (GSI) にマップし、この GSI をハードウェア抽象化レイヤー (HAL) に渡します。 HAL は、セカンダリ割り込みを生成して、この GSI を介して GPIO ピンに論理的に接続されている 2 番目の ISR を実行します。 このプロセスは、GPIO ドライバー サポート概要の図に示されています。

GPIO ベースの割り込みリソース

汎用 I/O (GPIO) ピンに割り込みを送信する周辺機器のドライバーは、抽象 Windows 割り込みリソースとして GPIO 割り込みを取得します。 カーネル モード ドライバー フレームワーク (KMDF) ドライバーは、EvtDevicePrepareHardware イベント コールバック関数を介してこれらのリソースを受け取ります。

パッシブレベルの ISR

Windows 8 以降、カーネル モード ドライバー フレームワーク (KMDF) ドライバーとユーザー モード ドライバー フレームワーク (UMDF) ドライバーはオプションとして、割り込みサービス ルーチン (ISR) を登録してパッシブ レベルで実行することができます。

割り込み関連のコールバック

オプションとして、汎用 I/O (GPIO) コントローラーのドライバーは、GPIO 割り込みのサポートを提供できます。 GPIO 割り込みをサポートするため、GPIO コントローラー ドライバーは、これらの割り込みを管理するためのコールバック関数のセットを実装します。 ドライバーには、GPIO フレームワーク拡張機能 (GpioClx) のクライアントとして登録する際にドライバーが提供する登録パケットに、これらのコールバック関数へのポインターが含まれています。

GPIO コントローラー ドライバーの割り込み同期

GPIO コントローラー ドライバーは、GPIO_CLX_AcquireInterruptLock メソッドと GPIO_CLX_ReleaseInterruptLock メソッドを呼び出して、GPIO フレームワーク拡張機能 (GpioClx) によって内部的に実装される割り込みロックを取得および解放することができます。 IRQL = PASSIVE_LEVEL で実行されるドライバー コードは、これらのメソッドを呼び出して GpioClx の割り込みサービス ルーチン (ISR) と同期できます。 GpioClx は、GPIO コントローラー内のピンの各バンクに個別の割り込みロックを割り当てます。

共有 GPIO 割り込みの有効化と無効化

場合によっては、2 つ以上の周辺機器からの割り込み要求ラインが、同じ物理的な汎用 I/O (GPIO) ピンに接続されることがあります。 共有割り込みラインの GPIO ピンは、通常、レベルによってトリガーされる割り込みに対して構成されます。

GPIO 割り込みマスク

割り込み入力として構成されている汎用 I/O (GPIO) ピンは、有効化および無効化だけではなく、マスク化またはマスク解除化することができます。