AKI-H8/3052で遊ぶ
NKHロボコンのために,H8マイコンを使う機会があったので,そのときのメモ.
AKI-H8/3052とは
AKI-H8はルネサステクノロジのH8マイコンを乗せたボードで,秋月電子通商で販売されています.私はメモリの豊富な,AKI-H8/3052を使っています.
AKI-H8/3052の特徴としては,
- RAM 8K ,ROM 512K
- 25MHz動作
- 動作に必用な部品は実装済み
- RS-232Cで直接書き込める
- レジスタ32ビット,バス16ビット
こんな感じでしょうか.
色々なところに情報があるので,ここには私が躓いた部分だけを書いておきます.
ここで説明しようとしていたことの殆どが,和歌山大のサイトにあったので,そっちを参照してください.少し読んだ限りだと,AKI-H8/3052で開発する上で必用なことが一通りかかれていると思います.
開発環境
以下には出てきませんが,リンカスクリプトやスタートアップルーチンを用意する必要があります.和歌山大のWikiからも入手できます.
Windows
CD-ROMも売られていますが,基本的にインターネット上にあるツールだけで間に合います.
- GCC Developer Lite(GDL) http://www.besttechnology.co.jp/
- H8WriteTurbo http://strawberry-linux.com/
- デバッグモニタ http://japan.renesas.com/ , http://hamayan.ddo.jp/~hamayan/so-net/
- HTerm http://japan.renesas.com/
なぜか私の環境ではGDLがロングファイル名を認識しないらしく,インストールしたままの設定だとC:\Program files以下のプログラムの呼び出しに失敗します.そういう時は,コマンドラインから使うか,必用なファイルを移動しましょう.
と,書きましたが,最近はエディタで書いて,バッチファイルでコンパイルしています.やっぱり使い慣れたエディタが一番効率が良い.
Linux/MacOS X
gccが利用可能ですので,H8用のgccをコンパイルすればOKです.
とりあえず,以下のものをインストール.
- binutils
- gcc
- newlib
- h8write http://mes.sourceforge.jp/h8/index-j.html
- デバッグモニタ http://japan.renesas.com/ , http://hamayan.ddo.jp/~hamayan/so-net/
- Jerminal http://www.bsddiary.net/soft.html
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かも.
特殊なオプションの説明
- -mh : H8/300H用のコードを生成
- -mint32 : intを32ビットに
書き込み
シリアルポートが無いパソコンで書き込むためには,USBシリアル変換ケーブルが必要です.秋月で売っている変換ケーブルが安くて良いですし,メーカのサイトからドライバをダウンロードすればMacOSでも使えました.
ただ,内蔵フラッシュの書き換え保障が100回と少な目なので,このへんは注意した方が良いでしょう.下に,ROMに書き込まずに,RAM上でデバッグする方法を書きます.
Windows
GDLにもライタ等が付いていますが,3052に対応していなかったりするので,H8WriteTurboを使います.関連付けておけば,.motファイルをダブルクリックするだけで書き込めるのでそれほど面倒ではありません.
Linux/MacOS X
Linuxによるマイコンプログラミングからh8writeをダウンロードしてコンパイル.MacOSの場合は基本的にFreeBSDとしてやればOKのようです.
シリアルポートは,秋月のUSBシリアル変換ケーブルを使っているなら,/dev/cu.usbserialのような名前で認識されていると思います.
デバッグ
H8に色々な回路を繋げて動作させる場合,実際にH8上でのデバッグをすることを考えると思いますが,考えなければならないのがフラッシュROMの書き換え制限です.デバッグしていると100回なんてすぐに超えてしまいそうですね.(実際には100回書き込んだからといってすぐに書き込めなくなるわけではないでしょうが…)
そこで,メモリ上にプログラムを転送して実行できるデバッグモニタの出番です.デバッグモニタをH8上に書き込んでおくことで,メモリ上へのプログラムの転送,レジスタやメモリ内容の表示などができるようになります.
デバッグモニタはルネナスのサイトでダウンロードできますが,H8/OS等も便利そうな気がします.
デバッグモニタ上で動作させるプログラムは,メモリ上の配置等が異なるのでリンカスクリプトを変更する必要があります.
通信速度は,多分38400bpsです.
Windows
普通のターミナルでも通信はできますが,プログラムの転送等をしないといけないので,専用ターミナルソフトのHtermが便利です.これは,ルネサステクノロジからダウンロードできます.(今のところ,サポート/半導体セミナー/サンプルプログラムにあるようです)
Linux/MacOS X
Jerminal等の普通のターミナルで一通りのことは出来ます.
プログラムの転送は,Lを入力してから.motファイルをそのまま送ってやればOKのようです.ただし,ファイルの改行コードがCRLFだと上手くいかないので,LFに変換してください.
一回の操作で,改行コードの変換,転送+実行をするスクリプトを書いた方が効率がいいでしょう.
リンク
この文書の履歴
- 2006-03-26 公開
- 2006-11-14 MacOSでの場合を追加