90 ページhttp://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdfで読むことができるように、Raspberry Pi の GPIO は 0x 7E20 0000 と 0x 7E20 00B0 の間でマッピングされます。GPIO ピン レベル レジスタ (GPLEVn) には、すべてのピンの値が含まれます。
ピン レベル レジスタは、ピンの実際の値を返します。LEV{n} フィールドは、それぞれの GPIO ピンの値を示します。
OS はこれらの値をどのように取得しますか? それとも、GPIO は DMA を使用してメモリに直接マップされていますか? さらに、ポーリング頻度については何も言われていません。
割り込みに関して、2 つの興味深いレジスタを見つけました。GPIO 立ち上がりエッジ検出イネーブル レジスタ (GPRENn) と GPIO 非同期立ち上がりエッジ検出イネーブル レジスタ (GPARENn) です。
非同期立ち上がりエッジ検出イネーブル レジスタは、非同期立ち上がりエッジ遷移がイベント検出ステータス レジスタ (GPEDSn) のビットを設定するピンを定義します。非同期とは、着信信号がシステム クロックによってサンプリングされないことを意味します。そのため、非常に短い持続時間の立ち上がりエッジを検出できます。
したがって、クロックごとにピンの値をサンプリングすることによって同期エッジ検出が実装されているように見えますが、非常に短い期間の立ち上がりエッジを検出する必要がある場合は、非同期で行う必要があります。どうすればいいですか?すべてがシステム クロックを使用してスケジュールされていませんか?
GPIO サンプリングはカーネルのどの部分に実装されていますか?