SPx_TFSDIV

SPx_TFSDIV ( SPORTx Transmit Frame Sync Divider )レジスタは、シリアルポートの送信フレーム同期信号の周期を決めるためのレジスタです。

SPORTが3系統あるため、SP0_TFSDIV、SP1_TFSDIV、SP2_TFSDIVの三本が用意されています。

レジスタの構造

このレジスタは16ビットの整数レジスタです。リセット後は0に初期化されます。

SPx_TCRのITFSを1にするとSPORTは送信フレーム信号を内部生成します。このとき、送信フレーム信号の周期はSPx_TFSDIVで決定します。送信フレーム周期は以下の式で決まります。

フレーム周期[送信クロック] = SPx_TFSDIV + 1 

フレーム周期の単位は送信クロックです。例えばSPx_TFSDIVに15を設定すると、16送信クロックごとにフレーム信号が生成されます。フレーム周期の最小値は上の式より1となります。この場合フレーム信号はトグルせず、常にDC値が出力されます。しかし、シリアルポートに接続されたデバイスを正常動作させるには、普通はフレーム信号周期をSPx_TCRのSLENで指定するワード長と同じかより大きなものにしなければなりません。

マルチチャンネル設定時の注意

マルチチャンネル(TDM)でSPORTを使う場合、シリアルポートは送信フレーム信号を作らず、常に受信フレーム信号を流用します。したがってマルチチャンネルモードでは送受信のフレームはいつも同期しています。

TFSxはフレーム信号ではなく、「送信データ有効」フラグとして用いられます。すなわちマルチチャンネルモードでは、TFSxが1のとき、そのシリアルポートから信号が出力されています。

API

C/C++言語用に以下のインターフェースが用意されています。宣言はsysreg.hで行われています。SPx_TFSDIVにアクセスする前には必ず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_TFSDIV, 値)         // SP0_TFSDIVに値を設定
変数 = io_space_read(SP0_TFSDIV)       // SP0_TFSDIVの値を取得

SPORT1の場合は以下のとおりです。

// #include <sysreg.h>
// #include <def2191.h>

sysreg_write(sysreg_IOPG, SPORT1_Controller_Page)   // SPORT1ページに設定

io_space_write(SP1_TFSDIV, 値)         // SP1_TFSDIVに値を設定
変数 = io_space_read(SP1_TFSDIV)       // SP1_TFSDIVの値を取得

SPORT2の場合は以下のとおりです。

// #include <sysreg.h>
// #include <def2191.h>

sysreg_write(sysreg_IOPG, SPORT2_Controller_Page)   // SPORT2ページに設定

io_space_write(SP2_TFSDIV, 値)         // SP2_TFSDIVに値を設定
変数 = io_space_read(SP2_TFSDIV)       // SP2_TFSDIVの値を取得

参照情報

項目 マニュアルのページ等
レジスタ説明 HR B-36
クロック設定 HR 9-20
マルチチャンネル HR 9-31

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