SSTAT

SSTAT ( System Status ) はその名のとおりADSP-2191のシステム状態を表示するレジスタです。性質上、このレジスタに書き込む必要はありません。ためしに書いてみましたが何の変化もありませんでした。

高級言語からこのレジスタにアクセスすることはまずありません。

レジスタの構造

レジスタは8ビット長です。転送命令で16ビットレジスタに格納するときには右詰になります。リセット後の初期値は0x54です。HRには0x00と書いていますが、間違いでしょう。Rev 0.1のチップで確認しました。

図1 レジスタの構造

以下にビット変化の概略を説明します。詳細については必ずHRを参照してください。

PCE : PC stack Empty
  • 1のとき、PCスタックが空であることを示します
  • 0のとき、PCスタックは空ではありません
PCF : PC stack Full
  • 1のとき、PCスタックがいっぱいであることを示します
  • 0のとき、PCスタックには空きがあります。
PCL : PC stack hit Level
  • 1のとき、PCスタックの深さは2以下か29以上です
  • 0のとき、PCスタックの深さは3から28です
LSE : Loop Stack Empty
  • 1のとき、ループスタックが空であることを示します
  • 0のとき、ループスタックは空ではありません
LSF : Loop Stack Full
  • 1のとき、ループスタックがいっぱいであることを示します
  • 0のとき、ループスタックには空きがあります。
SSE : Status Stack Empty
  • 1のとき、ステータススタックが空であることを示します
  • 0のとき、ステータススタックは空ではありません
SSV : Stacks overflow
  • 1のとき、スタックのうちどれかがあふれていることを示します
  • 0のとき、どのスタックもあふれていません

API

C/C++言語用に以下のインターフェースが用意されています。宣言はsysreg.hで行われています。

// #include <sysreg.h>

sysreg_write(sysreg_SSTAT, 値)     // 値をSSTATに代入します(多分無意味)
変数 = sysreg_read(sysreg_SSTAT)   // SSTATの値を取得します

sysreg_bit_clr(sysreg_SSTAT, MASK) // MASKの"1"と対応するSSTATのビットを1にします。
sysreg_bit_set(sysreg_SSTAT, MASK) // MASKの"1"と対応するSSTATのビットを0にします。
sysreg_bit_tgl(sysreg_SSTAT, MASK) // MASKの"1"と対応するSSTATのビットを反転します。

ビットマスクはdef219x.hで定義されています。以下にその部分を引用します。なお、ビット名が図1(HR A-11準拠)と異なっているので注意してください。

// Bit Positions
#define SSTAT_PCEM_P   0                       // Bit 0: PC stack empty 
#define SSTAT_PCFL_P   1                       // Bit 1: PC stack full 
#define SSTAT_PCLV_P   2                       // Bit 2: PC stack level 
#define SSTAT_LSEM_P   4                       // Bit 4: Loop stack empty 
#define SSTAT_LSFL_P   5                       // Bit 5: Loop stack full 
#define SSTAT_SSEM_P   6                       // Bit 6: Status stack empty 
#define SSTAT_SSOV_P   7                       // Bit 7: Stacks overflowed 

// Bit Masks
#define SSTAT_PCEM     MK_BMSK_(SSTAT_PCEM_P)  // PC stack empty 
#define SSTAT_PCFL     MK_BMSK_(SSTAT_PCFL_P)  // PC stack full 
#define SSTAT_PCLV     MK_BMSK_(SSTAT_PCLV_P)  // PC stack level 
#define SSTAT_LSEM     MK_BMSK_(SSTAT_LSEM_P)  // Loop stack empty 
#define SSTAT_LSFL     MK_BMSK_(SSTAT_LSFL_P)  // Loop stack full 
#define SSTAT_SSEM     MK_BMSK_(SSTAT_SSEM_P)  // Status stack empty 
#define SSTAT_SSOV     MK_BMSK_(SSTAT_SSOV_P)  // Stacks overflowed 

レイテンシ

SSTATに書き込むことはできないため、レイテンシは問題になりません。

参照情報

項目 マニュアルのページ等
ビット割り当て HR A-11
スタックステータス ISR 8-12
2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |