クモとの戯れ方(1)

STATUS: 故障中x2


 さて、実際にUSBSPYDER08を使ってみましょう。
 買って来たままの状態で標準インストールした場合の説明をします。(という自分用メモ)


● 開発環境のインストール


 付属のCD-ROMの「Setup.exe」を実行するとインストーラーのメニューが起動します。
 次の2つをインストールしました。
 「Install CodeWarriot Development Studio for Freescale H(S)08/RS08 Microcontrollers (v.5.1)」
 「Install USBSPYDER08 additional components (v.1.01)」


 インストール自体はデフォルトでどんどん進めていきます。
 また、自動アップデートプログラムが最後に起動されるので、必要なら最新版に更新できます。(※ここで、「すでにインストーラが起動しているから実行できない」という意味のダイアログがでました。最初に起動したインストーラーを終了したら続行できました)


 このあたりは、以下のURLからダウンロードできるマニュアルに記載されています(PDF/日本語)。


クイック・スタート・ガイド
ユーザー・マニュアル
※P.8〜9がインストール方法の解説
※以下の解説はだいたいユーザーマニュアルに載ってることです


● USBSPYDER08の接続


 PCのUSBポートに接続してください。
 PCからの給電により、USBSPYDER08上のマイコンが起動しデモプログラムが実行されます(USBSPYDER08上のLEDが明滅します)


CodeWarriorの起動 / サンプルプログラムのロード


 スタートメニューから、「プログラム」→「Freescale CodeWarrior」→「CW for HC08 V5.1」→「CodeWarrior IDE」を起動します。
 CodeWarriorが起動すると、「Starup」ダイアログが表示されます。
 このダイアログは、「X」ボタンで閉じます。


 まずはデモプログラムを試したいので、メニューの「File」→「Open」でプロジェクトを開きます。
 USBSPYDER08のサンプルは以下のフォルダです。
 

1) C:\Program Files\Freescale\CodeWarrior for HC08 V5.1\(CodeWarrior_Examples)\HCS08\Evaluation Board Examples\USBSPYDER08\QD4\Demo
2) C:\Program Files\Freescale\CodeWarrior for HC08 V5.1\(CodeWarrior_Examples)\HCS08\Evaluation Board Examples\USBSPYDER08\QD4\Timer


 1)のdemoのほうを開いてみます。
 「Demo.mcp」がプロジェクトファイルですので、これを開いてください。


 このサンプルプログラムは、USBSPYDER08上のLEDを1秒周期で点滅するものです。


● サンプルプログラムを眺める


 サンプルプログラムを開くと、CoreWarrierの左側にソースやリソースがツリーで表示されます。
 とりあえず見るべきファイルは「Sources」ツリーの下の「main.c」です。


 普通に、main()から実行されます。
 ループのなかのコード「PTAD ^= 0x01;」がLED点滅処理部分です。
 PTADはメモリーマップされたI/Oポートのアドレスです(MC9S08QD4.hに定義されている)。
 I/Oの操作はこんな調子で書いていけばよさそうです。
 実際には先立ってI/Oの設定初期化が必要ですが、これは PeriphInit 関数内で処理されています。



● サンプルプログラムを実行する


 メニューの「Project」→「Debug」を選択するか「F5」キーを押すと実行できます。
 まず別プログラムの「Tru-TIme Simulator & Real-Time Debugger」が起動します。
 「Target Connection」ダイアログが開きますので、以下のように選択して「Connect」ボタンを押してください。


COde: USBSPYDER08
Device code: MC9S08QD4
※実際にはデフォルトで上記の状態になっていますので改めて選択の必要はありません。


 「Connect」ボタンを押すと、USBSPYDER08にプログラムが転送され、実行が開始されます。
 ここまで自動的に進みます。簡単ですねぇ。
 この時点で既にFLASHにプログラムは書き込まれているので、電源さえ供給すれば(PCのUSBポートにつなげば)いつでも実行できます。


 画面には、ソースコード(Source)やアセンブラコード(Assembly)、レジスタ内容(Register)、メモリ内容(Memory)等が表示されています。


● ソースレベルデバッグ


 「Source」ウィンドウには「main.c」ソースが表示されていると思います。
※他のソースが表示されている場合は、メニューの「Source」→「Open Source File...」でソース選択ダイアログがひらきますので、「main.c」を選びなおしてください。


 下のほうにスクロールすると、main()関数があります。
 このなかの、「PTAD ^= 0x01;」の行で右クリックして、「Set Breakpoint」を選択してください。赤い「→」が行頭に表示されました。これで、ブレークポイントの設定ができました。
 プログラムはブレークポイントで停止し、LEDの点滅も止まったはずです。
 メニューの「Run」→「Single Step」(または、F11キー)で、1命令ずつステップ実行ができます。
 上記操作では、LEDの状態を書き換える直前で停止させたので、ステップ実行を行うと、LEDが点灯(または消灯)すると思います。


 停止中は、レジスタやメモリーの内容が各ウィンドウに表示されます。この値は直接変更することもできます。(マウスでクリックすると編集できます)
 まるでPC上で動いているプログラムを操作しているような感覚でつかえるのですねえ。こっちの分野は初めてなのでびっくりです。
(ステップ実行などは、1操作ごとに2〜3秒程度かかりますが、これは仕方ないですね)


 メニューの「Run」→「Start/Continue」(または、F5キー)で処理を再開できます。


● デバッガ上でI/Oを書き換えてみる。


 I/Oはメモリーマップに割り当てられているので、デバッガ上の「Memory」のウィンドウで直接書き換えることができます。
 LEDは、「PTAD」ポートのビット0で制御されています。
 MC9S08QG8 データシートのP.43〜にポート(レジスタ)の一覧が載っています。
 「PTAD」は、0x0000 でした。


 プログラム実行中でも書き換えは出来ますが、すぐLEDの状態がかわってしまってわかりづらいので、一度プログラムを停止します。
 メニューの「Run」→「Halt」(または、F6キー)を選択してください。
 プログラムが停止し、LEDの点滅が止まります。


 このとき、「Memory」ウィンドウの、最初の値(0000 の行の一番左)は、「20」または「21」になっています。
 最下位ビットが、LEDのON/OFFなので、「20」を「21」、または、「21」を「20」に書き換えるとLEDの点灯状態が変わりますよ。
(値をダブルクリックすると編集できる状態になります)


 I/Oを直接操作する方法がわかりましたので、データシートみながらいろんな機能を試してみようと思います。