そのため、arm9システムで「プリフェッチアボート」例外が発生します。このシステムにはMMUがないので、とにかくこれはソフトウェアの問題である可能性がありますか?私にはすべてのレジスタが正しいように見え、JTAGの観点からは、コードは正しく(破損していない)見えます。
今のところ、これはある種のハードウェアの問題だと思っています(言いたくはありませんが、ハードウェアは今まで問題ありませんでした)。
あなたが受けている例外は正確には何ですか?
前回これが起こったとき、ARMの「プリフェッチアボート」がデータプリフェッチではなく命令プリフェッチを意味し、データプリフェッチ命令で遊んでいたことに気づかなかったため、しばらくの間間違ったクリークを上りました。これは単に、プログラムが存在しないメモリ位置にジャンプしようとしたことを意味します。(実際の問題は、ブートローダーで「go81000000」を「go81000」と誤って入力したことです。)
参照:
プリフェッチアボートがトリガーしているアドレスは何ですか。これは、プログラムカウンター(PCまたはR15)がマイクロコントローラーで無効なアドレスに設定されているために発生する可能性があります(これは、MMUを使用していない場合でも発生する可能性があります-マイクロコントローラーのアドレス空間に「穴」がある可能性がありますプリフェッチアボートをトリガーします)。不適切にアラインされたアドレスをプリフェッチしようとした場合にも発生する可能性がありますが、これはマイクロコントローラーの実装に依存すると思います(ARM ARMは動作を「UPREDICTABLE」としてリストします)。
CPUは実際に中止モードになっていますか?プリフェッチハンドラーを実行しているがアボートモードではない場合、一部のコードがプリフェッチアボートベクター(通常はアドレス0x0000000c)を介して分岐していることを意味しますが、コントローラーはベクターアドレスの再マップを許可することがよくあります。