2012年7月2日月曜日

JTAGICE3

 今日の小物は「JTAGICE3」です。AVRマイコンにISP書き込みしたり、DebugWireでデバッグしたりできます。


 AVR Dragon でいいじゃんという話もありますが、はい、そのとおりです。ただ単に好きなんです。ICEとかエミュレータが。一応、自分の中ではJTAGICE3がメインでDragonは(Fuses書き込みでダメにしたチップの復活のための)パラレル書き込み用ということで。
 実は(つかいもしないのに)ルネサスのRXやRL用のE1エミュレータとかSH、H8用のBITRANのJTAGデバッガとか持っていたりします。なんていうか、デバッガをつなぐとマイコンと心が通じ合ったような気分になれて、こんにちはマイコンって感じ(このマイコンはパソコンの意味のMyコンピュータだけど)です。
 今回は、JTAGICE3とAtmel Studio 6でArduinoのスケッチぽいものを動かせるか試してみようと思います。
 まず、Arduinoは秋月の互換ボード、Akiduinoとでも勝手に呼ばしてもらいましょう、で。MPUはATmega368Pを載せています。
 Atmel StudioでATmega368P用のプロジェクトを作成して、プロジェクト設定でincludeパスにArduino-IDEの hardware\arduino\cores\arduino を指定して、さらに同フォルダの *.cと*.cpp ファイルをプロジェクトに追加します。また、 hardware\arduino\variants\standard をincludeパスに追加して pins_arduino.h がここから読まれるようにします。別のArduino Megaボードなどはそれに合わせたincludeパスを指定することになると思います。
 この状態で、プロジェクトの *.cpp ファイルに Arduino.h をincludeしてスケッチ相当の処理を書きます。main()関数などはmain.cに書かれています。
 ひとまず、コンパイルをかけると「F_CPUが定義されていない」的なエラー。Arduino-IDE内のソースやファイルを適当に眺めていると、hardware\arduino\boads.txt というテキストファイルにボード構成情報があり、その中に"f_cpu=16000000L"という記述があり、ソース内では #ifdef F_CPU のような記述があったので、プロジェクトのリンカオプションで -D"F_CPU=16000000L"になるように設定してみたところ、ビルドが通って hex ファイルが作成されました。早速ISP書き込みして実行すると、










おっ、動いた。シリアルポートにメッセージを出力して、LEDが点滅を始めました。やったね。

気をよくして、ステップ実行の確認。setupに入ったところでブレークして、ステップ実行でメッセージ表示とLED点灯までをコマ送りで確認。Loop()に入ってからの点滅はタイマが絡むせいか、ブレーク状態と噛み合わない感じ。

今後、もう少し調べてみるつもりです。Arduinoの各関数やライブラリを使えるかとか、ブレーク時の変数ウォッチとか、条件ブレークなんかもできるのかな?