SPx_RSCKDIV ( SPORTx Receive Serial Clock Divider )レジスタは、シリアルポートの受信クロックを決めるためのレジスタです。
SPORTが3系統あるため、SP0_RSCKDIV、SP1_RSCKDIV、SP2_RSCKDIVの三本が用意されています。
このレジスタは16ビットの整数レジスタです。リセット後は0に初期化されます。
SPx_RCRのICLKを1にするとSPORTは受信クロックを内部生成します。このとき、受信クロックの周波数はSPx_RSCKDIVで決定します。受信クロック周波数は以下の式で決まります。
SPx_RCLK[Hz] = HCLK[Hz] / 2 / ( SPx_RSCKDIV + 1 )
HCLKは内蔵ペリフェラルの動作クロックです。詳細はPLLCTLを参照してください。上の式から受信クロックの最大周波数はHCLK/2であることがわかります。ADSP-2191Mの場合は40MHzです。
C/C++言語用に以下のインターフェースが用意されています。宣言はsysreg.hで行われています。SPx_RSCKDIVにアクセスする前には必ず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_RSCKDIV, 値) // SP0_RSCKDIVに値を設定 変数 = io_space_read(SP0_RSCKDIV) // SP0_RSCKDIVの値を取得
SPORT1の場合は以下のとおりです。
// #include <sysreg.h> // #include <def2191.h> sysreg_write(sysreg_IOPG, SPORT1_Controller_Page) // SPORT1ページに設定 io_space_write(SP1_RSCKDIV, 値) // SP1_RSCKDIVに値を設定 変数 = io_space_read(SP1_RSCKDIV) // SP1_RSCKDIVの値を取得
SPORT2の場合は以下のとおりです。
// #include <sysreg.h> // #include <def2191.h> sysreg_write(sysreg_IOPG, SPORT2_Controller_Page) // SPORT2ページに設定 io_space_write(SP2_RSCKDIV, 値) // SP2_RSCKDIVに値を設定 変数 = io_space_read(SP2_RSCKDIV) // SP2_RSCKDIVの値を取得
項目 | マニュアルのページ等 |
---|---|
レジスタ説明 | HR B-35 |
クロック設定 | HR 9-19 |
マルチチャンネル | HR 9-30 |