適用先: ULINK USB-JTAG Debugger
回答
この記事に含まれている情報の適用先:
- ULINK USB-JTAG Adapter
- ULINK2 USB-JTAG Adapter
- µVision Debugger for ARM
質問
µVision Debugger での ULINK デバッグ中に RESET コマンドを使用しても、LPC2000 周辺機器はデータ シートで定義されている RESET 状態に設定されません。また、Debugger によってユーザ アプリケーションの実行が開始されるようです。
デバイスを確実に RESET 状態に設定する方法を教えてください。
回答
µVision の RESET ボタンを使用すると、デバイスを確実に RESET 状態に設定できます(JTAG コネクタの Chip Reset ピンを使用)。
ただし、ARM Embedded ICE は通常、RESET 直後の停止には対応していません(この機能をサポートするのは、一部のデバイスに限定されます)。
Philips ARM デバイスでは、JTAG 停止コマンドを発行して、RESET 後のプログラム実行を停止する必要があります。ULINK は、このコマンドを発行して、RESET 直後にデバイスを停止しようと試みます。
ただし、シリアル通信の特性と LPC2000 デバイスの実行速度に起因して、起動コードはすでに実行済みで、周辺機器が初期化された後のタイミングになってしまう可能性があります。
いずれの場合でも、ULINK がプログラム カウンタをゼロに戻します(RESET の場合)。この方法では、初期化コードを追跡できますが、初期化コードの一部はすでに実行済みの可能性があります。
この問題には、次のような解決方法が用意されています。
1.ドライバの開発時に Keil µVision Simulator を使用します。 Simulator は RESET 後に処理を停止して、初期化シーケンスの適切なデバッグを可能にします。 2.起動コードに含まれているフラグに対してクエリを実行し、このフラグをゼロに設定します。 デバッガからフラグを有効にしない限り、コードの実行は停止します。 この方法では、ULINK USB JTAG-Adapter を使用してアプリケーションの初期化コードをデバッグできます。 以下に示すのは、main の冒頭に使用できる簡単な例です。 void main (void) { int volatile startup = 0; while (startup==0); // set startup to 1 in the debugger to continue execution : // rest of your main program 3. main の冒頭に約 0.3 秒の遅延ループを使用することで、CPU を制御下に置くための時間をデバッガに与えられます。 void main (void) { unsigned long volatile start; // volatile avoids loop optimization for (start = 0; start <10000000; start++)="start++)" {="{" ;=";" wait="wait" for="for" debugger="debugger" connection="connection" (about="(about" 0.3="0.3" sec)="sec)" }="}"></10000000;>
重要:
(PC の変更により)RAM でプログラムをテストする場合でも、デバイスでは、オンチップ Flash ROM の既存のコードがそのまま実行される可能性があります。したがって、Flash の内容を消去するか、オンチップ Flash ROM への無限ループをプログラミングすることが重要になります。
詳細
- ULINK® User's Guide の Reset Sequence を参照してください。
- ARM Getting Started User's Guide
関連項目
- ULINK: LPC2000 SINGLE STEP AT RESET APPEARS TO FAIL