IOPG

IOPG( IO Page )はIO空間転送命令がIOレジスタをアクセスするときのページ(上位8ビット)として働きます。下位10ビットは命令が指定するインデックスレジスタに入っています。

IOプロセッサのDMAはIOPGを使いません。IOPGを使うのはIO空間転送だけです。

レジスタの構造

IOPGは8ビット長です。IOPGと16ビットレジスタとの間でデータをやり取りする場合は右詰で転送し、上位は0フィル扱いになります。

IOPGレジスタ

図1 レジスタの構造

このレジスタの初期値は記載されていません。実験では0になりましたが自分で初期化しましょう。

このレジスタには構造はありません。

API

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
2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |