IOPG( IO Page )はIO空間転送命令がIOレジスタをアクセスするときのページ(上位8ビット)として働きます。下位10ビットは命令が指定するインデックスレジスタに入っています。
IOプロセッサのDMAはIOPGを使いません。IOPGを使うのはIO空間転送だけです。
IOPGは8ビット長です。IOPGと16ビットレジスタとの間でデータをやり取りする場合は右詰で転送し、上位は0フィル扱いになります。
図1 レジスタの構造
このレジスタの初期値は記載されていません。実験では0になりましたが自分で初期化しましょう。
このレジスタには構造はありません。
C/C++言語用に以下のインターフェースが用意されています。宣言はsysreg.hで行われています。
// #include <sysreg.h> sysreg_write(sysreg_IOPG, 値) // 値をIOPGに代入します 変数 = sysreg_read(sysreg_IOPG) // IOPGの値を取得します // IOPGにページを設定したあと、以下の組み込み関数で // IOレジスタにアクセスします。 io_space_write(レジスタアドレス、値) // IOレジスタに値を代入します。 変数=io_space_read(レジスタアドレス) // IOレジスタから値を取得します
IJPGのレイテンシは以下のとおりです。
命令 | IOPG=value/reg; | |
---|---|---|
レイテンシ | 2 |
レイテンシが1のとき、直後の命令からその値を使うことができます。レイテンシが2以上のとき、直後の命令でその値を参照しようとすると、インターロック機構によって1サイクルのストールが発生します。なお、この表のレイテンシの数え方はHRとは異なっています。
項目 | マニュアルのページ等 |
---|---|
解説 | HR 5-13 |
レイテンシ | HR 3-6, A-5 |
IO空間転送命令 | ISR 7-59 |