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 |