フラッシュ メモリ内のハンドラーへの有効なベクターで適切に初期化された RAM ベースのベクター テーブルがあります。SVC 命令を実行すると、例外処理は HardFault にエスカレートします。ベクター テーブルから SVC ハンドラー アドレス (LSB セット) を取得できないようです。ただし、HardFault ハンドラーは適切に取得され、実行されます。このハンドラーでは、次の値を読み取ります。
スタックポインタ:
SP 0x20027E68
EXC_RETURN 0xFFFFFFA8
スタックされたLR、PC、およびXPSR:
リンクst 0x00004523
PCst 0x00004468
XPSRst 0x69000000
レジスター:
VTOR 0x20020000
SHCSR 0x00070004
CFSR 0x00000000
HFSR 0x40000000
HFSR は強制された (エスカレートされた) HardFault を示します。
これは SDK なしのベアメタルです。RAM C0 はテスト セットアップに使用され、ベクター テーブルが下部に、スタックが上部に配置されます。(テスト) SVC ハンドラーは最小限で、無限ループのみです。45、60、180 MHz のシステム クロック (より高いクロック レートの場合は FIRC、OD コア電圧) でテストしました。
何が足りないのでしょうか?ありがとう!
問題は、プログラムが初期 PC 値 (アドレス 0x04) を介して実行を開始したときに、Cortex-M33 コアが、対応するリファレンス マニュアルに記載されているリセット状態ではなく、ブート ROM コードによって設定された PRIMASK = 1 になっていることです。その結果、SVC 命令は HardFault にエスカレートします。PRIMASK をリセット状態 (CPSIE I) にリセットすると、問題は解決します。
こんにちは@ygrayne
ご投稿ありがとうございます。
MCX A34x シリーズは新しい製品なので、低レベルでの構成に関する情報はあまりありませんが、Cortex-M コアのArm ベクター テーブルの再配置を最小限のメモリ オーバーヘッドで RAM に最適化する次の情報を見つけたので、参考にすることができます。この情報は NXP によってテストまたは検証されておらず、Cortex-M の汎用情報であるSO、目標を達成するための参照としてのみ使用してください。また、 Arm ® Cortex ® -M33 プロセッサ テクニカル リファレンス マニュアルを確認することをお勧めします。
BR