SPISTx

SPISTx( SPI Status )はSerial Peripheral Interfaceの状態を表示します。

SPIが2系統あるため、SPIST0, SPIST1の2本が用意されています。

レジスタの構造

このレジスタは図1のような構造をもっています。初期値は0x0001です(HR B-58では0x0000となっていますが、B-9やSPIFの定義によれば0x0001であるべきです)。

図1 レジスタの構造

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

SPIF : SPI Finished

SPIによる転送が終了したことを表示します。RO

  • 0 : 転送は終了していません。
  • 1 : 終了しました。
MODF : MODE Failure

マスターモードにおいて他のデバイスがマスターになっていることを検出したときに1になります。W1C

  • 0 : 異常なし
  • 1 : 他のデバイスがマスターになっています。
TXE : TX Error

送信アンダーフローが発生したことを知らせます。W1C

  • 0 : 異常なし
  • 1 : 送信データが無いのに送信しました。
TXS : TX Data Buffer Status

送信データバッファの状態を表示します。RO

  • 0 : 空
  • 1 : データあり
RBSY : RX Busy

受信オーバーフローが発生したことを知らせます。W1C

  • 0 : 異常なし
  • 1 : 受信データが空で無いのに受信しました。。
RXS : RX Data Buffer Status

受信データバッファの状態を表示します。RO

  • 0 : 空
  • 1 : データあり
TXCOL : Transmit Collection Error

DMAとコアによるTDBRへの書き込みが衝突したことを知らせます。W1C

  • 0 : 異常なし
  • 1 : 衝突が発生した恐れがあります。

API

C/C++言語用に以下のインターフェースが用意されています。宣言はsysreg.hで行われています。SPISTxにアクセスする前には必ずIOPGにSPIx_Controller_Pageを設定してください。

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

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

sysreg_write(sysreg_IOPG, SPI0_Controller_Page)   // SPI0ページに設定

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

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

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

sysreg_write(sysreg_IOPG, SPI1_Controller_Page)   // SPI1ページに設定

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

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

                // Definition for SPISTx B-58
#define SPI_SPIF                BIT_0
#define SPI_MODF                BIT_1
#define SPI_TXE                 BIT_2
#define SPI_TXS                 BIT_3
#define SPI_RBSY                BIT_4
#define SPI_RXS                 BIT_5
#define SPI_TXCOL               BIT_6

参照情報

項目 マニュアルのページ等
説明 HR B-54
2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |