SPx_MCMC1 ( SPORTx Multi-Channel Configuration 1 )レジスタは、シリアルポートのマルチチャンネル動作を設定するための16ビットレジスタです。このレジスタは送受兼用です。
SPORTが3系統あるため、SP0_MCMC1、SP1_MCMC1、SP2_MCMC1の三本が用意されています。
このレジスタは16ビットレジスタです。リセット後は0に初期化されます。図1にレジスタの構造を示します。
図1 レジスタの構造
以下に各フィールドの説明を行います。値はSPORTがディセーブルのときにだけ変更できます。
マルチチャンネルモードを有効にします。
マルチチャンネルモードにおいてフレーム信号からフレームの最初のビットまでの遅延量を示す負号無し整数フィールドです。単位はビットです。
ウインドウ幅を指定する4ビットの負号無し整数フィールドです。ここに値Nを設定すると、ウインドウ幅WはW=8*(N+1)となります。フィールドの初期値は0ですので、ウインドウ幅の初期値は8となります。
ウインドウのオフセットを指定する7ビットの負号無し整数フィールドです。ここに値Nを設定すると、データ転送ウインドウはN番目のチャンネルから始まります。
上で出てくるウインドウとは、大規模なマルチチャンネル転送において実際にデータ転送を行うチャンネル領域を指定するものです。例えば128chのシリアル転送で全チャンネル用のバッファを用意すると、大きなメモリーを必要とします。しかし、実際に転送するチャンネルが例えば8-15chであれば、実際に転送に必要なのは8chだけとなり、メモリーを浪費していることになります。そこで、上の8-15chをウインドウとして指定してやれば(WOFF=8, WSIZE=0)、転送用のDMAバッファは8ワードで済みます。このようにウインドウを使えばDMAバッファを節約できます。
C/C++言語用に以下のインターフェースが用意されています。宣言はsysreg.hで行われています。SPx_MCMC1にアクセスする前には必ずIOPGにSPORTx_Control_Pageを設定してください。SPORTはポートごとにIOページが異なりますので注意が必要です。
SPORT0の場合は以下のとおりです。
// #include <sysreg.h> // #include <def2191.h> sysreg_write(sysreg_IOPG, SPORT0_Controller_Page) // SPORT0ページに設定 io_space_write(SP0_MCMC1, 値) // SP0_MCMC1に値を設定 変数 = io_space_read(SP0_MCMC1) // SP0_MCMC1の値を取得
SPORT1の場合は以下のとおりです。
// #include <sysreg.h> // #include <def2191.h> sysreg_write(sysreg_IOPG, SPORT1_Controller_Page) // SPORT1ページに設定 io_space_write(SP1_MCMC1, 値) // SP1_MCMC1に値を設定 変数 = io_space_read(SP1_MCMC1) // SP1_MCMC1の値を取得
SPORT2の場合は以下のとおりです。
// #include <sysreg.h> // #include <def2191.h> sysreg_write(sysreg_IOPG, SPORT2_Controller_Page) // SPORT2ページに設定 io_space_write(SP2_MCMC1, 値) // SP2_MCMC1に値を設定 変数 = io_space_read(SP2_MCMC1) // SP2_MCMC1の値を取得
アナログデバイセズが配布しているmcmの中のビット定義ファイルdef2191bit.hから関連するビット定義部分をここに引用します。
#define WOFF_OFST 9 #define WOFF_MASK ( 0x7f << WOFF_OFST ) #define WSIZE_OFST 5 #define WSIZE_MASK ( 0x0f << WSIZE_OFST ) #define MFD_OFST 1 #define MFD_MASK ( 0x0f << MFD_OFST ) #define MCM 1
項目 | マニュアルのページ等 |
---|---|
レジスタ説明 | HR B-40 |
ウインドウ | HR 9-35 |