SSTAT ( System Status ) はその名のとおりADSP-2191のシステム状態を表示するレジスタです。性質上、このレジスタに書き込む必要はありません。ためしに書いてみましたが何の変化もありませんでした。
高級言語からこのレジスタにアクセスすることはまずありません。
レジスタは8ビット長です。転送命令で16ビットレジスタに格納するときには右詰になります。リセット後の初期値は0x54です。HRには0x00と書いていますが、間違いでしょう。Rev 0.1のチップで確認しました。
図1 レジスタの構造
以下にビット変化の概略を説明します。詳細については必ずHRを参照してください。
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 |