gpio インターフェイスは、ハードウェアとのデータ通信に使用されます。gpio は、「General Purpose I/O Ports」の略で、汎用の入出力ポートを意味します。そのピンは、ユーザーが自由に使用できます。プログラム制御により、インターフェース経由でハイレベルとローレベルを出力したり、ピンの状態がハイレベルかローレベルかを読み取ることができます。
このチュートリアルの動作環境: Windows 10 システム、DELL G3 コンピューター。
GPIOとは、汎用入出力の略で、8051のP0~P3と同様の機能を持っています。そのピンはユーザーが自由に使用できます。 PIN ピンは、clk ジェネレーター、チップ セレクトなどの汎用入力 (GPI)、汎用出力 (GPO)、または汎用入出力 (GPIO) として使用できる実用的な考慮事項です。 GPIO (汎用 I/O ポート) とは、一般的な入出力ポートを意味します。平たく言えば、ハイレベルとローレベルを出力したり、ピンの状態 (ハイレベルかローか) を読み取ることができるピンです。レベル。
GPIO ポート 1 は比較的重要な概念です。ユーザーは、データ対話 (UART など)、ハードウェア動作の制御 (LED、ブザーなど)、および動作状況の読み取りのために GPIO ポートを介してハードウェアと対話できます。ハードウェアのステータス信号(割り込み信号など)などGPIO ポートは広く使用されています。
GPIO インターフェイスの使用方法GPIO を使用するには、システムはまず GPIO を割り当て、gpio_request() を使用して GPIO を割り当てる必要があります。システムへの GPIO。
次に行うことは、GPIO の方向をマークすることです。通常は、GPIO を使用して platform_device (ボードのセットアップ コードにあります) を作成するときに使用します。
/* set as input or output, returning 0 or negative errno */ int gpio_direction_input(unsigned gpio); int gpio_direction_output(unsigned gpio, int value);
示す場合は 0 を返します。成功、または負の errno エラー コード。 get/set 呼び出しではエラーが返されず、構成ミスがある可能性があるため、確認する必要があります。通常、これらの呼び出しはスレッド コンテキストで使用する必要があります。ただし、スピンロック セーフ GPIO の場合は、タスク処理が有効になる前に、初期のシングル ボード ビルドとして使用することもできます。
出力 GPIO の場合、value パラメーターは初期出力値を提供します。これは、システム起動時の信号干渉を回避するのに役立ちます。
初期の GPIO インターフェイスと互換性を持たせるために、GPIO 方向を設定するには暗黙的に GPIO を申請する必要があります。この互換性は、オプションの gpiolib アーキテクチャから削除されています。
GPIO 番号が無効な場合、または指定された GPIO が対応するモードで動作できない場合、方向の設定は失敗します。ブート機能が検証されていない可能性があるため (ブート Linux を除く)、ブート ファームウェアに依存して GPIO 方向を設定することは通常は得策ではありません。 (同様に、シングルボードのセットアップ コードでは、ピンを GPIO として多重化し、適切なプルアップ/プルダウンを構成する必要がある場合があります。)
スピンロックセーフ GPIO アクセス
ほとんどの GPIOコントローラには、メモリの読み取りおよび書き込み命令を使用してアクセスできます。これらはスリープを必要とせず、内部ハードウェア割り込み処理 (非スレッド) および同様のコンテキストから安全に完了できます。
これらの GPIO にアクセスするには、次の呼び出しを使用します。このとき、gpio_cansleep は常にエラー
/* GPIO INPUT: return zero or nonzero */ int gpio_get_value(unsigned gpio); /* GPIO OUTPUT */ void gpio_set_value(unsigned gpio, int value);
を返します。値はブール値パラメーターで、ゼロは低いことを意味し、ゼロ以外は高いことを意味します。出力ピンの値を読み取る場合、返される値はピンに表示される値である必要があります。 。 。オープンドレイン信号と出力遅延の問題により、これは指定された出力値と常に一致するとは限りません。
「無効な GPIO」は gpio_direction_*() によって早期に報告されるはずであるため、get/set 呼び出しはエラーを返しません。それにもかかわらず、すべてのプラットフォームが出力ピンの値を読み取れるわけではなく、読み取れないプラットフォームでは常に 0 を返す必要があります。同時に、スリープを引き起こす可能性がある GPIO を備えたこれらのインターフェイスを使用することは間違いです。
プラットフォーム固有の実装では、GPIO 値を取得するためにこれら 2 つの呼び出しを最適化することが推奨されます。 GPIO 番号が一定の場合、通常、アクセスするには 1 対の命令 (ハードウェア レジスタの読み取りまたは書き込み) のみが必要であり、スピンロックは必要ありません。このような最適化により、ビット分割アプリケーションを (時間と空間の点で) より効率的にすることができます (サブルーチン呼び出しに大量の命令を費やすのと比較して)。
GPIO インターフェイスは何をしますか? 出力値を書き込むことができます (high=1) 、低=0)。一部のチップは、「ワイヤード OR」または同様のスキーム (オープン ドレイン信号線) をサポートするために、これらの値を駆動する方法を選択することもできます。
入力値は読み取り可能です (1、0)。一部のチップは、出力ピンのリードバックをサポートしています。これは、(双方向信号ラインをサポートするための) ワイヤ OR 状況で役立ちます。 GPIO コントローラーには入力フェイルセーフ/アンチバウンス ロジックが搭載されている場合があり、場合によってはソフトウェア制御が搭載されている場合もあります。
入力は割り込み信号としてよく使用され、通常はエッジでトリガーされますが、レベルでトリガーされる場合もあります。これらの割り込みは、システムを低電力モードからウェイクアップするシステム ウェイクアップ イベントとして構成できます。
GPIO は、さまざまな製品ボードの要件に応じて双方向入出力として構成されることがよくありますが、単方向の場合もあります。
ほとんどの GPIO は、スピンロックの取得時にアクセスできますが、シリアル バス経由でアクセスされる GPIO は通常、この方法では操作できません (休止状態の理由)。一部のシステムには両方の形式の GPIO が存在します。
特定のボード上では、各 GPIO は、MMC/SD カードの挿入/取り外しの監視、カード書き込み保護ステータスのチェック、LED の駆動、トランスミッターの構成、シリアル バス ビットの削除、ハードウェア ウォッチドッグのトリガーなど、特定の目的に使用されます。スイッチなどをトリガーします。
関連知識の詳細については、FAQ 列をご覧ください。
以上がgpioインターフェースは何をするのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。