SPx_RFSDIV ( SPORTx Receive Frame Sync Divider )レジスタは、シリアルポートの受信フレーム同期信号の周期を決めるためのレジスタです。
SPORTが3系統あるため、SP0_RFSDIV、SP1_RFSDIV、SP2_RFSDIVの三本が用意されています。
このレジスタは16ビットの整数レジスタです。リセット後は0に初期化されます。
SPx_RCRのIRFSを1にするとSPORTは受信フレーム信号を内部生成します。このとき、受信フレーム信号の周期はSPx_RFSDIVで決定します。受信フレーム周期は以下の式で決まります。
フレーム周期[受信クロック] = SPx_RFSDIV + 1
フレーム周期の単位は受信クロックです。例えばSPx_RFSDIVに15を設定すると、16受信クロックごとにフレーム信号が生成されます。フレーム周期の最小値は上の式より1となります。この場合フレーム信号はトグルせず、常にDC値が出力されます。しかし、シリアルポートに接続されたデバイスを正常動作させるには、普通はフレーム信号周期をSPx_RCRのSLENで指定するワード長と同じかより大きなものにしなければなりません。
マルチチャンネル(TDM)でSPORTを使う場合、SPx_RFSDIVの値はワード長*ワード数で決まるフレームクロック数にするのが普通です。ただし、システムによってはこれとは違う値を要求するかもしれません。
C/C++言語用に以下のインターフェースが用意されています。宣言はsysreg.hで行われています。SPx_RFSDIVにアクセスする前には必ず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_RFSDIV, 値) // SP0_RFSDIVに値を設定 変数 = io_space_read(SP0_RFSDIV) // SP0_RFSDIVの値を取得
SPORT1の場合は以下のとおりです。
// #include <sysreg.h> // #include <def2191.h> sysreg_write(sysreg_IOPG, SPORT1_Controller_Page) // SPORT1ページに設定 io_space_write(SP1_RFSDIV, 値) // SP1_RFSDIVに値を設定 変数 = io_space_read(SP1_RFSDIV) // SP1_RFSDIVの値を取得
SPORT2の場合は以下のとおりです。
// #include <sysreg.h> // #include <def2191.h> sysreg_write(sysreg_IOPG, SPORT2_Controller_Page) // SPORT2ページに設定 io_space_write(SP2_RFSDIV, 値) // SP2_RFSDIVに値を設定 変数 = io_space_read(SP2_RFSDIV) // SP2_RFSDIVの値を取得
項目 | マニュアルのページ等 |
---|---|
レジスタ説明 | HR B-36 |
クロック設定 | HR 9-20 |
マルチチャンネル | HR 9-31 |