SPx_RCR ( SPORTx Receive Control )レジスタは、シリアルポートの受信機能を設定するためのレジスタです。
SPORTが3系統あるため、SP0_RCR、SP1_RCR、SP2_RCRの三本が用意されています。
このレジスタは16ビットのレジスタです。リセット後は0に初期化されます。
 
図1 レジスタの構造
以下に各ビットフィールドの説明を行います。詳しくはHRを参照してください。
SPORTの受信機能を有効にします。
RCLKを内部生成するか決めます。
受信データの型を指定します。
SPORT受信データのエンディアンを指定します。
受信ワード長をビット単位で指定します。0,1を指定してはいけません。Nを指定すると、実際のワード長はN+1になります。最大のNは15なので、最大ワード長は16になります。
フレーム同期を内部生成するよう指定します。
フレーム同期を行うかどうか指定します。マルチチャンネル(TDM)時には0にします。
フレーム信号の論理を指定します。
フレーム信号の遅延を指定します。マルチチャンネル(TDM)時には0にします。
クロックとデータの関係を指定します。
RCLKをドライブするかどうか指定します。
マルチチャンネル(TDM)でSPORTを使う場合、一部のビットは値を以下のように設定しなければ正しく動きません。
RCLKピンはTCLKピンと接続してください。
C/C++言語用に以下のインターフェースが用意されています。宣言はsysreg.hで行われています。SPx_RCRにアクセスする前には必ず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_RCR, 値) // SP0_RCRに値を設定 変数 = io_space_read(SP0_RCR) // SP0_RCRの値を取得
SPORT1の場合は以下のとおりです。
// #include <sysreg.h> // #include <def2191.h> sysreg_write(sysreg_IOPG, SPORT1_Controller_Page) // SPORT1ページに設定 io_space_write(SP1_RCR, 値) // SP1_RCRに値を設定 変数 = io_space_read(SP1_RCR) // SP1_RCRの値を取得
SPORT2の場合は以下のとおりです。
// #include <sysreg.h> // #include <def2191.h> sysreg_write(sysreg_IOPG, SPORT2_Controller_Page) // SPORT2ページに設定 io_space_write(SP2_RCR, 値) // SP2_RCRに値を設定 変数 = io_space_read(SP2_RCR) // SP2_RCRの値を取得
アナログデバイセズが配布しているmcmの中のビット定義ファイルdef2191bit.hから関連するビット定義部分をここに引用します。
                // Definition for SPx_TCR
                // Caution. SLEN 03-16 mean, size of slot is 3-16
                // Histry of change : SLENxx->SLEN_xx, added SLEN_OFST, 
                //                  SLEN_MASK, DYTPE_OFST, DTYPE_MASK
#define ICLKD           BIT_15
#define CKRE            BIT_14
#define LATFS           BIT_13
#define LTFS            BIT_12
#define DITFS           BIT_11
#define TFSR            BIT_10
#define ITFS            BIT_9
#define SLEN_OFST       5
#define SLEN_MASK       ( 0x0f << SLEN_OFST )
#define SLEN_3          ( 2 << SLEN_OFST )
#define SLEN_4          ( 3 << SLEN_OFST )
#define SLEN_5          ( 4 << SLEN_OFST )
#define SLEN_6          ( 5 << SLEN_OFST )
#define SLEN_7          ( 6 << SLEN_OFST )
#define SLEN_8          ( 7 << SLEN_OFST )
#define SLEN_9          ( 8 << SLEN_OFST )
#define SLEN_10         ( 9 << SLEN_OFST )
#define SLEN_11         ( 10 << SLEN_OFST )
#define SLEN_12         ( 11 << SLEN_OFST )
#define SLEN_13         ( 12 << SLEN_OFST )
#define SLEN_14         ( 13 << SLEN_OFST )
#define SLEN_15         ( 14 << SLEN_OFST )
#define SLEN_16         ( 15 << SLEN_OFST )
#define SENDN           BIT_4
#define DTYPE_OFST      2
#define DTYPE_MASK      ( 3 << DTYPE_OFST )
#define DTYPE_ZERO      ( 0 << DTYPE_OFST )
#define DTYPE_SIGN      ( 1 << DTYPE_OFST )
#define DTYPE_MU        ( 2 << DTYPE_OFST )
#define DTYPE_A         ( 3 << DTYPE_OFST )
#define ICLK            BIT_1
#define TSPEN           BIT_0
                // Definition for SPx_RCR
#define LRFS            BIT_12
#define RFSR            BIT_10
#define IRFS            BIT_9
#define RSPEN           BIT_0
| 項目 | マニュアルのページ等 | 
|---|---|
| レジスタ説明 | HR B-33 | 
| SPx_TCR設定 | HR 9-15 |