Nios II Gen2 プロセッサー・リファレンス・ガイド

ID 683836
日付 10/28/2016
Public
ドキュメント目次

3.7.13.4. 割り込みおよび命令関連の例外からの戻り値

eret命令は、例外前のアドレスで実行を再開するために使用されます。

例外ハンドラーがレジスターを変更すると、レジスターが戻る際にそれらが復元されるようにする必要があります。これは次のいずれかの方法で処理できます。

  • ISR の場合、EIC インターフェイスとシャドー・レジスター・セットが実装されていて、ISR に専用のレジスターセットがある場合は、ソフトウェアのアクションは必要ではありません。Nios II プロセッサーはレジスター内容を復元する eretを実行すると、前のレジスターセットに戻ります。
  • 詳しくは、この章の「外部割り込みコントローラーを使用したネスト式例外」のセクションを参照してください。
  • 割り込み以外の例外、内部割り込みコントローラーのあるシステムの ISR、および専用のシャドー・レジスター・セットがない ISR の場合、例外ハンドラーはエントリー上のレジスターを保存し、終了時にそれらを復元する必要があります。レジスター内容をスタックに保存することは一般的であり、再入可能な実装です。
注: 例外一時 (et または r24) レジスターを保存および復元する必要はありません。

eret 命令を実行すると、プロセッサーは次のタスクを実行します。

  1. 次のように、statusの以前の内容を復元します。
    • status.CRSが 0 の場合 estatusstatusにコピーする。
    • status.CRSがゼロ以外の場合、 sstatusstatusにコピーする。
  2. status.CRSの元の値で指定されたレジスターセット内の ea レジスター (r29) のアドレスに、プログラム実行を転送します。
注: eret 命令はプロセッサーが NMI モードを終了させることができます。しかしながら、プロセッサーを NMI モードにすることはできません。言い換えると、status.NMI が 0 で estatus.NMI ( または sstatus.NMI) が 1 の場合、eretの実行後も、status.NMIはまだ 0 のままです。この制限は、プロセッサーが誤って NMI モードに入るのを防ぎます。
注: EIC インターフェイスおよびシャドー・レジスター・セットが Nios II コアに実装されている場合、ISR を含めたソフトウェアは Nios II EDS のバージョン 9.0 以降を含めた GCC コンパイラーのバージョンで構築されている必要があります。それ以前のバージョンはシャドー・レジスター・セットと互換性のない eret命令が実装されています。