Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

PSoC 6 MCU での CM4 コアデバッグ時の問題 - KBA227094 - Community Translated (JA)

PSoC 6 MCU での CM4 コアデバッグ時の問題 - KBA227094 - Community Translated (JA)

ChaitanyaV_61
Employee
Employee
50 questions asked 25 likes received 25 sign-ins

Community Translated by  MoTa_728816          Version: **

質問:

PSoC® Creator™ 4.2PDL 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 の先頭に無限ループを追加す

このループはデバッガが実行中のターゲットにアタッチして状態を変更するまで続きます。実行はループの中で停止することになります

  1. main_cm4.c main() 関数の開始部に下記のコードを追加します。
    volatile int flag = 0 ;
    while (flag == 0) { }
  2. デバイスをプログラムします。
  3. MCU の電源を切ってから再投入するか、(あれば) リセットボタンを押します。
  4. PSoC Creator 内で、 Debug > Attach to Running Target を選択します。デバッグプローブに CM4 をターゲットとして選択します。Halt target on attach が有効になっていることに注意してください。  
    pastedImage_0.png

デバッガは無限ループで止まっています。   
pastedImage_1.png

 5. flag 変数の値を '0' から他の値に変更します

 6. Step over をして、デバッグセッションを続けてください

デバッグがもう不要になり、リセットイベント後、すぐに CM4 ードを実行したい場合には、ワークアラウンド部分を main() から削除してください。

0 件の賞賛
242 件の閲覧回数
寄稿者