NKHロボコンのために,H8マイコンを使う機会があったので,そのときのメモ.
AKI-H8はルネサステクノロジのH8マイコンを乗せたボードで, 秋月電子通商で販売されています. 私はメモリの豊富な,AKI-H8/3052を使っています.
AKI-H8/3052の特徴としては,
こんな感じでしょうか.
色々なところに情報があるので,ここには私が躓いた部分だけを書いておきます.
ここで説明しようとしていたことの殆どが, 和歌山大のサイト にあったので,そっちを参照してください. 少し読んだ限りだと,AKI-H8/3052で開発する上で必用なことが一通りかかれていると思います.
以下には出てきませんが,リンカスクリプトやスタートアップルーチンを 用意する必要があります. 和歌山大のWikiからも入手できます.
CD-ROMも売られていますが,基本的にインターネット上にあるツールだけで間に合います.
なぜか私の環境ではGDLがロングファイル名を認識しないらしく, インストールしたままの設定だとC:\Program files以下のプログラムの呼び出しに失敗します. そういう時は,コマンドラインから使うか,必用なファイルを移動しましょう.
と,書きましたが,最近はエディタで書いて,バッチファイルでコンパイルしています. やっぱり使い慣れたエディタが一番効率が良い.
gccが利用可能ですので,H8用のgccをコンパイルすればOKです.
とりあえず,以下のものをインストール.
binutilsをインストールしたら,/usr/local/h8/binにPATHを通しておく. バージョンによってはMacでコンパイルできないようなので,その点を注意.
参考:琉球大の情報工学実験
P5に繋がったLEDを点滅させるサンプルです.AVRのときと殆ど同じプログラム.
/* test_led.c P5に繋がったLEDを点滅させるサンプル by K.Kawahira */ #include <3052.h> // Wait (ms?) volatile void wait(unsigned int w){ while(w--) { int t=10000;while(t--); } } int main() { P5.DDR = 0xFF; // LED while(1){ P5.DR.BYTE = 0xFF; // ON wait(500); P5.DR.BYTE = 0x00; // OFF wait(500); } }
ここで使っているヘッダファイルは ポートに対して構造体や共用体を活用して簡単にアクセスできるようになっています.
ターゲットごとにリンカスクリプトが違うことに注意. 毎回入力するのは無理なので,Makefileを作るかシェルスクリプトを書く.
h8300-hms-gcc -mh -mint32 -O -nostartfiles -Th8rammon.x -Xl,-Map,test_led.map\ -o test_led.elf test_led.c h8crt0.s -ladd3052 h8300-hms-objcopy -O srec test_led.elf test_led.mot
まず,h8300-hms-gccでコンパイルして,objcopyで書き込むためのmot形式のファイルに 変換しています. ライブラリなどの場所は省略したので,構築した環境に合わせてください.
WindowsのGDLについているGCCは,hmsではなくて,coffかも.
シリアルポートが無いパソコンで書き込むためには,USBシリアル変換ケーブルが必要です. 秋月で売っている変換ケーブルが安くて良いですし,メーカのサイトから ドライバをダウンロードすればMacOSでも使えました.
ただ,内蔵フラッシュの書き換え保障が100回と少な目なので,このへんは注意した方が 良いでしょう. 下に,ROMに書き込まずに,RAM上でデバッグする方法を書きます.
GDLにもライタ等が付いていますが,3052に対応していなかったりするので, H8WriteTurboを使います. 関連付けておけば,.motファイルをダブルクリックするだけで書き込めるので それほど面倒ではありません.
Linuxによるマイコンプログラミングから h8writeをダウンロードしてコンパイル. MacOSの場合は基本的にFreeBSDとしてやればOKのようです.
シリアルポートは,秋月のUSBシリアル変換ケーブルを使っているなら, /dev/cu.usbserialのような名前で認識されていると思います.
H8に色々な回路を繋げて動作させる場合,実際にH8上でのデバッグをすることを 考えると思いますが,考えなければならないのがフラッシュROMの書き換え制限です. デバッグしていると100回なんてすぐに超えてしまいそうですね. (実際には100回書き込んだからといってすぐに書き込めなくなるわけではないでしょうが…)
そこで,メモリ上にプログラムを転送して実行できるデバッグモニタの出番です. デバッグモニタをH8上に書き込んでおくことで,メモリ上へのプログラムの転送, レジスタやメモリ内容の表示などができるようになります.
デバッグモニタはルネナスのサイトでダウンロードできますが, H8/OS等も便利そうな気がします.
デバッグモニタ上で動作させるプログラムは,メモリ上の配置等が 異なるのでリンカスクリプトを変更する必要があります.
通信速度は,多分38400bpsです.
普通のターミナルでも通信はできますが,プログラムの転送等をしないといけないので, 専用ターミナルソフトのHtermが便利です. これは,ルネサステクノロジからダウンロードできます. (今のところ,サポート/半導体セミナー/サンプルプログラムにあるようです)
Jerminal等の普通のターミナルで 一通りのことは出来ます.
プログラムの転送は,Lを入力してから.motファイルをそのまま送ってやればOKのようです. ただし,ファイルの改行コードがCRLFだと上手くいかないので,LFに変換してください.
一回の操作で,改行コードの変換,転送+実行をするスクリプトを書いた方が 効率がいいでしょう.