ENA
命令形式
// 機能を有効化する
ENA <mode>
例
ENA SEC_REG;
ENA INT;
ENA SEC_REG, ENA SEC_DAG; // 複数のENA命令を連結できる
説明
モード制御命令です。実行すると動作モードが変わります。以下のオペランドを採ることができます。
- SEC_REG : Secondary Register (MSTAT[0])
- 演算レジスタ群が裏レジスタに変わります。
- BIT_REV : Bit Reversal (MSTAT[1])
- DAG1レジスタの出力がビット逆順になります。
- AV_LATCH : ALU overflow staus latch mode. (MSTAT[2])
- ASTATのAVビットがラッチモードで動きます。ラッチモードの場合、一旦1になると明示的にクリアするまでは0に戻りません。
- AR_SAT : AR register saturation mode (MSTAT[3])
- ARレジスタをラップアラウンドではなく飽和モードで動かします。
- M_MODE : Multiplier Mode (MSTAT[4])
- 乗算器が整数モードで動きます
- TIMER : TImer Mode (MSTAT[5])
- タイマーを動作させます。なお、このオペランドはADSP-2191では無視されますので使わないでください。
- SEC_DAG : Secondary DAG (MSTAT[6])
- DAGレジスタ群が裏レジスタに変わります。
- INT : Interrupt
- 219xコアが割り込み可能になります。ICNTLレジスタのGIEビットを1にする命令です。
INTを除くモードは、MSTATのビットと一対一対応になっています。そのため、割り込みハンドラ内でこれらのモードを設定してもRTIを実行すると設定が元に戻ってしまいます。
MSTATはロード・レイテンシが長いため、普通に値をロードすると実際にモードが変わるのは数サイクル後になります。反面、ENA命令を使えば次のサイクルでモードが切り替わっています。可能な限りMSTATをいじらずENA命令を使ってください。詳細はHRM
A-6を参照してください。
詳細はISRの8-69ページと、HRMのA-10ページを参照してください。
文法要素
<mode> ::= SEC_REG, BIT_REV, AV_LATCH, AR_SAT, M_MODE, TIMER, SEC_DAG, INT