6.11. データアボートハンドラ

MMU が存在しない場合は、データアボートハンドラでエラーを通知して終了する必要があります。MMU が存在する場合は、データアボートハンドラによって仮想メモリのメモリ障害を解決する必要があります。

lr_ABT はデータアボートを発生させた命令よりも 2 つ先の命令を指すため、データアボートを発生させた命令の位置は lr_ABT - 8 となります。

このアボートを発生する可能性のある命令には以下のような種類があります。

単一レジスタロード/ストア命令(LDR または STR)

応答はプロセッサタイプによって異なります。

  • アボートが ARM7TDMI® などの ARM7 プロセッサで発生した場合、アドレスレジスタが更新されているので、変更を元に戻す必要があります。

  • アボートが ARM9、ARM10、または StrongARM 以降のプロセッサで発生した場合、プロセッサは命令開始前に保持されていた値をそのアドレスに復元します。この変更を元に戻す操作は必要ありません。

スワップ命令(SWP)

この命令に関連してアドレスレジスタが更新されることはありません。

多重ロード/ストア命令(LDM または STM)

応答はプロセッサタイプによって異なります。

  • アボートが ARM 7 ベースのプロセッサで発生し、ライトバックがイネーブルされている場合には、転送全体が発生したかのようにベースレジスタが更新されます。

    レジスタリスト内にベースレジスタを指定して LDM を使用した場合、プロセッサは後で回復できるように、上書きされた値を修正されたベース値で置き換えます。元のベースアドレスは、使用されるレジスタの数を使用して再計算されます。

  • アボートが ARM9、ARM10 あるいは StrongARM 以降のプロセッサで発生し、ライトバックがイネーブルされている場合には、命令開始前に保持されていた値をベースレジスタに復元します。

上記 3 つのどのケースでも、MMU は要求された仮想メモリを物理メモリにロードできます。MMU のフォールトアドレスレジスタ(FAR)には、アボートを発生させたアドレスが保持されます。これにより、ハンドラは復帰して命令を再実行することができます。

データアボートハンドラのサンプルコードは、主なサンプルディレクトリの ...\databort に収録されています。

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0203GJ
Non-Confidential