SPxDR_CFG

SPxDR_CFG( SPORTx DMA Receive Configuration )はSPORT 受信DMAの設定を行います。

SPORTが3系統あるため、SP0DR_CFG、SP1DR_CFG、SP2DR_CFGの三本が用意されています。

レジスタの構造

このレジスタは図1のような構造をもっています。初期値は0です。

図1 レジスタの構造

各ビットの意味は以下のとおりです。

DEN : DMA Enable

DMAを有効にします。

  • 1を書き込むとDMAを開始します。
  • 0を書き込むとDMAを停止します。
TRAN : Transfer to Memory

転送方向を決めます。このビットはデスクリプターDMAの場合、デスクリプタからのロードでだけ設定できます。

  • 1を書き込むとメモリーへの書き込みであることを意味します。かならず1を書き込んでください。
  • 0を書き込むとメモリーからの読み出しであることを意味します。
DCOME : Interrupt on DMA Complete

ブロック転送後の割り込みの有無を決めます。このビットはデスクリプタDMAではデスクリプタからのロードでだけ設定できます。

  • 1を書き込むとメモリーブロックの転送後に割り込みを生起します。
  • 0を書き込むと割り込みは生起しません。
DAUTO : DMA Autobuffer Mode

DMAをオートバッファーDMAに変更します。

  • 1を書き込むとオートバッファーDMAです。
  • 0を書き込むとデスクリプターDMAです。
FLSH : Flush

直前のDMA転送が失敗に終ったとき、バッファをクリアするために使います。

  • 1を書き込むとバッファをクリアします。
  • 0を書き込んでも何も変化しません。
DERE : Interrupt on DMA Error

ブロック転送時のエラーによる割り込みの有無を決めます。このビットはデスクリプターDMAの時にはデスクリプタからのロードでだけ設定できます。

  • 1を書き込むとエラー発生時に割り込みを生起します。
  • 0を書き込むと割り込みは生起しません。
FS : FIFO Status

FIFOの状態をあらわします。

  • 11のとき、FIFOには3ワードあります
  • 10のとき、FIFOには2ワードあります
  • 01のとき、FIFOには1ワードあります
  • 00のとき、FIFOにはデータがありません
DS : DMA status

DMAの終了ステータスです。

  • 1のとき、異常終了です。
  • 0のとき、正常終了です
DOWN : DMA Owns descriptor

デスクリプターDMAでDMAデスクリプタのオーナーをあらわします。このステータスはメモリー上のデスクリプタにも反映されます。

  • 1はソフトウェアがセットし、デスクリプタが準備完了であることをDMAに知らせます。
  • 0はDMAエンジンがセットし、デスクリプタによるデータ転送が完了したことを知らせます。

API

C/C++言語用に以下のインターフェースが用意されています。宣言はsysreg.hで行われています。SPxDR_CFGにアクセスする前には必ずIOPGにSPORTx_Control_Pageを設定してください。SPORTはポートごとにIOページが異なりますので注意が必要です。

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

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

sysreg_write(sysreg_IOPG, SPORT0_Controller_Page)   // SPORT0ページに設定

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

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

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

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

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

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

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

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

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

アナログデバイセズが配布しているmcmの中のビット定義ファイルdef2191bit.hから関連するビット定義部分をここに引用します。

                // Definition for DMA_CFG of commond operation
                // HISTORY of CHNGE FS_xxx is fixed
#define DOWN            BIT_15
#define DS              BIT_14
#define FS_OFST         12
#define FS_MASK         ( 3 << FS_OFST )
#define FS_EMPTY        ( 0 << FS_OFST )
#define FS_ONE_WORD     ( 1 << FS_OFST )
#define FS_TWO_WORD     ( 2 << FS_OFST )
#define FS_THREE_WORD   ( 3 << FS_OFST )
#define DERE            BIT_8
#define FLSH            BIT_7
#define DAUTO           BIT_4
#define DTYPE           BIT_3
#define DCOME           BIT_2
#define TRAN            BIT_1
#define DEN             BIT_0

参照情報

項目 マニュアルのページ等
説明 HR B-44
DMAの解説 HR 6-1
SPORT DMA HR 6-16
DMA パッキング HR 9-36
2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |