GPIO 原理#
GPIO は MIO を通じて 54 のインターフェースを提供し、そのうち 16 は bank 500 に、残りは bank 501 にあります。また、EMIO インターフェースを通じて PL から 64 の入力と 128 の出力を提供します。GPIO 制御および状態レジスタのメモリマッピングは基底アドレス $0xE000_A000$ にあります。
ZYNQ の GPIO ピンは 4 つの bank に分かれており、合計 118 の GPIO があります。
GPIO 内部構造#
図から、GPIO には 3 つの機能があることがわかります:入力、出力、割り込み。
その中で MIO 7 と 9 は出力のみ可能です。
1 組のレジスタは 1 つの GPIO bank のすべてのピンを制御できます。
デバイスピンの GPIO 制御#
入出力レジスタ#
レジスタ名 | 説明 |
---|---|
DATA_RO | GPIO ピンの値はこのレジスタに格納され、GPIO が入力または出力に設定されている場合でも、このレジスタを読み取ることで GPIO ピンの値を取得できます。 これは読み取り専用レジスタ(ソフトウェアにとって)であり、ソフトウェアがこのレジスタに書き込む操作は無視されます。 |
DATA | 出力データレジスタで、GPIO が出力に設定されている場合にのみ機能します。このレジスタの値が出力ピンに出力されます。 このレジスタに書き込むことは GPIO の出力値を設定することを意味し、 このレジスタを読み取ると、GPIO の前回の出力値が返され、現在の値ではありません。 |
MASK_DATA_LSW | Mask Data Least Significant Words、出力データの下位 16 ビットマスクレジスタで、このレジスタは下位 16 ビットのみが有効です。 対応するビットが 1 の場合、DATA レジスタの下位 16 ビット中の対応するビットの値を変更できます。 1 でない場合、DATA レジスタの下位 16 ビット中の対応するビットは元の値を保持します。 |
MASK_DATA_MSW | Mask Data Most Significant Words、出力データの上位 16 ビットマスクレジスタで、 機能は MASK_DATA_LSW と同じですが、DATA レジスタの上位 16 ビットに対応します。 |
DIRM | Direction Memory、方向レジスタで、デフォルトは 0 で入力を示し、1 に設定すると出力を示します。 注意:DIRM が 1 であっても、ソフトウェアはこのピンのレベルを入力として読み取ることができます。 |
OEN | Output Enable、出力有効レジスタで、 DIRM が 0 のときのみ有効で、1 は出力有効を示し、 0 は出力無効を示し、このとき対応するピンの値は三態値になります。 |
割り込み制御レジスタ#
レジスタ名 | 説明 |
---|---|
INT_TYPE | Interrupt Type 割り込みタイプレジスタで、 GPIO 割り込みがレベルトリガーかエッジトリガーかを制御します。 |
INT_POLARITY | Interrupt Polarity 割り込み極性レジスタ GPIO 割り込みが低レベル / 下降エッジ有効か、高レベル / 上昇エッジ有効かを制御します。 |
INT_ANY | Interrupt Any、両エッジレジスタで、 INT_TYPE がエッジトリガーの場合のみ、このレジスタは有効で、両エッジで割り込みをトリガーできるかを制御します。 |
INT_STAT | Interrupt State、割り込み状態レジスタで、 このレジスタの値は接続された INT State D フリップフロップによって読み取られます。 D フリップフロップは割り込み状態を保存し、ソフトウェアはこの D フリップフロップの出力を読み取ることで割り込みが発生したかどうかを判断します。 この D フリップフロップをクリアすることで割り込み状態をクリアします。 |
INT_MASK | Interrupt Mask、割り込みマスクレジスタで、 現在どのビットがマスクされ、どのビットが有効かを表示します。 |
INT_DIS | Interrupt Disable、割り込み無効レジスタで、 このレジスタの任意のビットに 1 を書き込むと、その割り込み信号がマスクされます。 このレジスタを読み取ると予測できない値が返されます。 |
INT_EN | Interrupt Enable、割り込み有効レジスタで、 このレジスタの任意のビットに 1 を書き込むことで、割り込み信号のマスクを有効 / 解除できます。 このレジスタを読み取ると予測できない値が返されます。 |
GPIO の割り込み番号は ==52== で、割り込み優先度は固定されており、GPIO の割り込み優先度を設定する必要はありません。GPIO のすべてのピンは同じ割り込みを共有しており、2 つのピンの割り込みを有効にしても、ソフトウェアはどのピンから割り込みが発生したかを判断できません。
EMIO と MIO#
MIO、Multiuse I/O、複数用途の入力 / 出力で、PS 側の構成可能な多機能ピンに対応します。
EMIO、Extent MIO、PL 側の構成可能な多機能ピンに対応します。
MIO は周辺機器の基本ピンで、MIO のピン数が少ないため、ZYNQ は EMIO インターフェースを提供して MIO を拡張し、周辺機器は EMIO インターフェースを介して PL 側のピンに接続され、MIO とほぼ同じ機能を実現します。
MIO と EMIO の違いは以下の通りです:
- MIO は PL 側に対して透明で、PL は MIO ピンのレベルを読み取ることができません;PS 側は EMIO を介して PL 側と通信できます。
- 周辺機器は MIO と固定的に組み合わされており、初期化時には開発ボードの回路図に基づいてピンの制約を選択する必要があります。EMIO は比較的柔軟で、ピンは任意に指定でき、xdc ファイルの制約で PL 側の特定のピンに指定できます。
- MIO ピンは周辺回路に近いため、EMIO に比べて一部の周辺機器は MIO を使用する方が性能が良く、他の周辺機器は MIO のみを使用することができます。
MIO bank とパッケージの bank の違いと関係#
MIO は Bank 0 と Bank 1 に分かれており、Bank 0 はパッケージ Bank 500 の一部ピンを含み、Bank 1 はパッケージ bank 501 の一部ピンを含みます。
Bank 0 には MIO 0〜15 の合計 16 個の MIO が含まれ、bank 1 には MIO 16〜53 の合計 38 個の MIO が含まれ、合計 54 個の MIO があります。EMIO は合計 64 個です。