7.3.2. ターゲットからデバッガへの通信

以下は、ARM コアで実行されているアプリケーションからホストで実行されているデバッガへの通信を行うときのイベントシーケンスです。

  1. ターゲットアプリケーションが、DCC 書き込みレジスタが空いているかどうかを確認します。この操作は、MRC 命令を使用してデバッグ通信チャネル制御レジスタを読み出し、W ビットがクリアされているかどうかを確認することによって行われます。

  2. W ビットがクリアされている場合、通信データ書き込みレジスタはクリアされているので、アプリケーションはコプロセッサ 14 への MCR 命令を使用してこのレジスタにワードを書き込みます。このレジスタへの書き込みによって、W ビットが自動的に設定されます。W ビットが設定されている場合は、デバッガによって通信データ書き込みレジスタがクリアされていません。さらにワードを送信する必要がある場合、アプリケーションでは、W ビットがクリアされるまでこのビットをポーリングする必要があります。

  3. デバッガが、スキャンチェイン 2 を経由して通信データ制御レジスタをポーリングします。W ビットが設定されていることを検出した場合、デバッガは DCC データレジスタを読み出して、アプリケーションから送信されたメッセージを読み出すことができます。このデータ読み出し処理によって、通信データ制御レジスタ内の W ビットが自動的にクリアされます。

Example 7.1 はこれを実装するコードを示しています。このサンプルコードは、主なサンプルディレクトリの ...\dcc\outchan.s に収録されています。

Example 7.1. 

     AREA  OutChannel, CODE, READONLY
     ENTRY
     MOV   r1,#3          ; Number of words to send
     ADR   r2, outdata    ; Address of data to send
pollout
     MRC   p14,0,r0,c0,c0 ; Read control register
     TST   r0, #2
     BNE   pollout        ; if W set, register still full
write
     LDR   r3,[r2],#4     ; Read word from outdata
                          ; into r3 and update the pointer
     MCR   p14,0,r3,c1,c0 ; Write word from r3
     SUBS  r1,r1,#1       ; Update counter
     BNE   pollout        ; Loop if more words to be written
     MOV   r0, #0x18      ; Angel_SWIreason_ReportException
     LDR   r1, =0x20026   ; ADP_Stopped_ApplicationExit
     SVC   0x123456       ; ARM semihosting (formerly SWI)
outdata
     DCB "Hello there!"
     END

サンプルを実行するには

  1. 以下のコマンドを入力し、outchan.s をアセンブルします。

    armasm --debug outchan.s
    
  2. 以下のコマンドを入力し、出力オブジェクトをリンクします。

    armlink outchan.o -o outchan.axf
    

    このリンク手順で、実行可能ファイル outchan.axf が作成されます。

  3. イメージをロードして実行します。詳細については、デバッガのマニュアルを参照して下さい。

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0203GJ
Non-Confidential