
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
PSoC 6 MCU での CM4 コアデバッグ時の問題 - KBA227094 - Community Translated (JA)
Community Translated by MoTa_728816 Version: **
質問:
PSoC® Creator™ 4.2、PDL 3.1.0、 PSoC Programmer 3.28 を使用して PSoC 6 MCU の CM4 コアをデバッグしようとしています。
デバッガが main() の中ではなく、逆アセンブルの画面で停止してしまいます。正しくデバッグするのにはどうしたら良いでしょうか?
回答:
この問題は PDL 3.1.0 の起動コードに追加されたシステムコールが CM4 コアのデバッグセッションが初期化された後では実行できないことに起因します。PSoC Programmer はデバッグアクセスポート (DAP) を除く IPC_INTR_STRUCT.INTR_MASK レジスタ内のすべての割込み通知を無効にします。結果として、PDL からのシステムコールは起動されますが、IPC のロック解除を待つループないで立ち往生してしまいます。この問題は PSoC Programmer 3.28.3 リリースで修正されています。
当面、以下のワークアラウンドのどれかをお使いいただけます:
1: 通常 cyfitter_cfg.c 内にある Cy_SystemInit 起動コード内で、
Cy_SysPm_LdoSetVoltage() をコールする前に CYREG_IPC_INTR_STRUCT0_INTR_MASK レジスタの初期値を設定します。
CY_SET_REG32(CYREG_IPC_INTR_STRUCT0_INTR_MASK, 0x00070000u);
注意:プロジェクトの生成を行うと、このワークアラウンドは消されてしまいます。プロジェクトが生成されてからこの変更を適用してください。
2: main_cm4.c の先頭に無限ループを追加する
このループはデバッガが実行中のターゲットにアタッチして状態を変更するまで続きます。実行はループの中で停止することになります。
- main_cm4.c の main() 関数の開始部に下記のコードを追加します。
volatile int flag = 0 ;
while (flag == 0) { } - デバイスをプログラムします。
- MCU の電源を切ってから再投入するか、(あれば) リセットボタンを押します。
- PSoC Creator 内で、 Debug > Attach to Running Target を選択します。デバッグプローブに CM4 をターゲットとして選択します。Halt target on attach が有効になっていることに注意してください。
デバッガは無限ループで止まっています。
5. flag 変数の値を '0' から他の値に変更します。
6. Step over をして、デバッグセッションを続けてください。
デバッグがもう不要になり、リセットイベント後、すぐに CM4 コードを実行したい場合には、ワークアラウンド部分を main() から削除してください。