AKI-H8 One Page


Intro

AKI-H8を買うと似たような説明書が何枚も付いてきて意味わからなくなるので必要最低限の情報だけをメモ。
一応H8/3048F。一応cygwinで秋月のコンパイラ。つまりH8/3048F CPUボードとマザーボードと秋月Cコンパイラを買ってきてなぜかcygwin上のくせにgcc使わずに秋月せいコンパイラでコンパイルする手順をまとめたもの。


ハードウェアをつくる


かわいらしいへいれつていこう
9pinのRS232Cのはいせん
9pin 2 (RXD)25pin 3 (RXD)
9pin 3 (TXD)25pin 2 (TXD)
9pin 5 (GND)GND
9pin 7 9pin 8
じっさいのしゃしん

ページ末尾に買うものリストを書きました。
んじゃマザーボードをはんだづけしましょうか。説明書の図見ながら。気をつけるとこだけ書きます。ジャンパをつけるのを忘れないように。(←)の黄色い線たちです。これを忘れてて1ヶ月悩みました。あほだ。。。
H8/3048Fのときはスイッチング電源に電源電圧設定用の抵抗R38を付け替えましょう。デフォルトは3kΩがついてて19Vになってます。 10kΩを4つ並列でつけて2.5kΩにして大体16Vくらいにしてますが(→)。4にんあつまっててなんかかわいい。 9ピンのRS232C端子を使ってパソコンとつなぐ場合は説明書に書いてない結線が必要です。こんな感じ→
3048F CPUボードの方はピンヘッダをつけるだけです。ピンヘッダと基板コネクタは一回はんだつけするとまず取れないので気をつけたいです。対角線の2つだけとりあえずつけて、あと使うとこだけはんだつけ…。
あと3052Fのときはいろいろマザーボード改造したり、CPUボードのMDジャンパをつけたりする必要があります。できたら 電源OFF→書き込みON→電源ONにしてAKI-H8/3048FのCDの D:\MB\MBTEST.MOT をライタで転送後、電源OFF→書き込みOFF→電源ONでLCDにスイッチの状態やらなんやらが現れれば成功。あと、LCDがないときは AKI-H8/3052FのCDの D:\ASM\SAMPLE\TIMER.MOT ならタイマでLEDが点滅したりして動作確認できる。


ソフトウェアをせいびする

はい。次はソフトウェアのインストール。 AKI-H8/3048FのCDの D:\ASM\*.EXE とCコンパイラのCDの D:\*.EXE をパスの通ったディレクトリ[BIN]にコピー。
あとCコンパイラのCDの D:\*.{C,H,LIB} をディレクトリ[LIB]にコピー。以上。


ひつようなソース

はい。流れ的にはC言語ソース書いてコンパイルして、必要に応じてアセンブラ言語書いてアセンブルして、転送形式MOTに変換して転送、という感じ。 適当なディレクトリ[project01]に入って基本的に書く必要があるのはベクタ定義のアセンブリ言語ソース (*.mar) とC言語ソースと、リンク処理の羅列であるリンカスクリプト (*.SUB) です。 まず、最低一つ、プログラムの格納位置とかC言語へのどの関数から実行を開始するかなど(*1)を指定するためのアセンブリ言語ソース (仮にstartup.mar) が必要です。
ここ(東京高専のページ)のしたあたりにある StartupBasic.src を参考に こんなの(startup.mar)を用意します。 これをいったん[project01]に置けば、エントリポイントをint main(void){}意外にするとき以外は変更する必要はないです。 あと、リンカスクリプトはこんなのが必要です(linkscript.sub↓(*2))。あ、libraryの行は[LIB]内のc38hab.libのパスに書き換えてください。
うーん。C言語を書くときに気をつけることはなんだろう…。#include <3048F.h>くらいかな。int main(void){...くらいかな。 あと割り込み関数の前に

#programa (割り込み関数名)
void 割り込み関数名(void){
	...
}
かな。あと割り込みベクタ定義テーブル inttable.mar あたりに割り込み関数名を書いておくと(*3)。

startup.marinttable.marlinkscript.sub
初めはいるとこの指定とか割り込み起きたときに入るところの指定とかリンク用のスクリプト。
案外でかいので
別ファイル
    .CPU 300HA
    .IMPORT _showLEDMatrix
    .SECTION A,DATA,LOCATE=H'000000
    .ORG    H'000070        ;IMIA1
    .DATA.L _showLEDMatrix  ;handler
    .END
library d:\h8\lib\c38hab.lib
ROM (D,X)
START P,C,D(100),X,B(0FEF10)
EXIT


コンパイルからてんそうまで

最終的にモトローラS4フォーマットというファイル (MOTという拡張子のついたファイル) 1個に変換してライタで転送します。 それまでの経緯を図で表すとこんな感じ↓

この道のりが長い…。C言語ソースが複数あるときは別々にコンパイルしてOBJ複数つくってL38H.EXEでリンクさせるのが正しいやり方みたいですが extern 宣言しないとみれなかったり、リンクのときにややこしいので 私は c01.c から他のファイルは全部includeして、Cのコンパイルはc01.cだけにしたりしてだましだましやってます。

C言語ソースは CC38H.EXE というコンパイラでコンパイル。

CC38H.EXE -cpu=300ha -include=$(LIB) c01.c
これでコンパイルに成功すれば c01.OBJ ができます。 エラーメッセージは標準出力に出力されます。$(LIB)にはディレクトリ[LIB]のパスを書いておきます。
どうしてもCで書けないアセンブラ言語ソース (割り込みベクタ定義など。この場合は例としてasm02.mar) と startup.marA38H.EXE でコンパイル。 めんどくさいなら全部 startup.mar に書いてもいいんですが、分けたほうが使い回しがききます。
A38H.EXE startup.mar
A38H.EXE asm02.mar
とか。これは簡単。startup.OBJとかasm02.marとかができます。
次にOBJが出揃ったらリンク。
L38H.EXE startup,asm02,c01 -output=project01 -print=project01 -subcommand=linkscript.SUB
引数にはOBJファイル全部をコンマ区切り、あとオプションです。 -output-printにはプロジェクト名みたいなのを入れると[プロジェクト名].ABSとか[プロジェクト名].MOTとかができていい感じです。 これでエラーなしで project01.ABS ができたらリンク成功。
最後に
C38H.EXE project01.ABS
として転送ファイルproject01.MOTができます。お疲れ様でした


Makefile

cygwin用のMakefileの例をここにアップ。$(LIB)に[LIB]のパス、$(WRITER)にライタのパスを書けばOKです。 リンカとかエラーコードを返してくれないのでコンパイル/リンク時にいちいち*.logというファイルにエラーメッセージを書く仕様になっています。 make allで全コンパイル、 make writerでライタH8writerTurboの設定変更、 make installで転送までできて便利です。


Makefileを作るMakefile.perl

あ、このMakefilelinkscript.subを生成するperlスクリプトMakefile.perlおいときます。 Makefile書くのめんどくさいんで。

せっていほうほう
#!パールのパス(cygwin形式)

#begin settings
$PROJECT_NAME        = "プロジェクト名(MOTファイルの名前)";
$LIB_WINDIR          = "[LIB]のパス(windows形式、かつ\は2重にする)";
$WRITER_CYGWINPATH   = "ライタのパス(cygwin形式)";
$LINKSCRIPT          = "リンカスクリプト";
$ASM_EXT             = "アセンブリ言語ソースの拡張子、ドットは省く";
$OPTIMIZE            = 1だと最適化あり、0なら最適化なし;
$CPU                 = "300ha";
@C_SRCS      = ("C言語ソース1","C言語ソース2", "C言語ソース3(全部拡張子、ドットなし)");
@C_DEPENDS1 = ("C言語ソース1に依存するhとかcとかひとつめ.h", "2つめ.h", "あ、全部ドットあり、拡張子ありで.c");
@C_DEPENDS2 = ("C言語ソース2に依存するhとかcとかひとつめ.h", "2つめ.h");
@C_DEPENDS3 = ("C言語ソース3に依存するhとかcとかひとつめ.h", "なかったら()とかにしといて");
@ASM_SRCS    = ("アセンブリ言語ソース1", "アセンブリ言語ソース1(全部拡張子、ドットなし)");
#end settings


Makefile.perlを作るMakefile.perl.perl

じゃあこの Makefile.perl を作る Makefile.perl.perl はってさすがそれはいr


あ、お疲れ様でした





ふろく:かうものリスト

コンパイル/書き込みに必要なものは「書込」、完成してさぁケースに組み込んで電池駆動、ってときに必要なものは「動作」に○をしています。あれば便利なものは△で。×は不要なものです。

名前何ですかそれは入手書込動作
CPUボード
正式名称はAKI-H8/3048Fマイコンボード。3048Fのチップとその動作に必要な周辺回路の基板。でもこれだけでは書き込みはできません。書き込み用の12V電圧とかRS232C端子とか付いてないので。 K-179
マザーボード
正式名称はAKI-H8専用マザーボード。CPUボードを載せて書き込みとかデバッグとかするためのもの。書き込み回路、RS232C端子、スイッチ、評価用にLED2つ、ボタンスイッチ4つ、8bitDIPスイッチ、LCDモジュールがついてます。配線を変えれば4052Fも使えるみたいです LCD付K-5
LCD, CPU付K-4
×
H8用アセンブラ(A38H.EXE)/リンカ(L38H.EXE)/コンバータ(C38H.EXE)の入ったCDアセンブラソースをアセンブルしたりくっつけたり転送形式に変換したりするWindowsソフト。 K-4とかに付属×
ライタ(h8WriterTurbo)motファイルを転送するWindowsソフト。3052Fセットに付属してたh8WriterTurboが一番使いやすかった。代替案は3048F付属のK-ZTATとか。これはフリーでいっぱいあります ×
H8用Cコンパイラの入ったCDH8用のC言語コンパイラ。Windowsソフト。秋月のver1.0というものを使います。代替案としてはフリーでgcc、非フリーではRenesasのhew、ver2.0(トラ技付属?)など。コンパイラ変えると激しくコンパイル方法が変わりますが。 K-179×
電池スナップと電池
動作だけならたぶん9VでOK。あっさりうごきました。あ、電池スナップとは9Vの電池をつける銅線です。 ×
USB-RS232C変換ケーブルUSBとRS232Cを変換するケーブル。ノートパソコンでやろうとするとRS232Cコネクタがなかったりするのであると便利。動作時にノートとRS232Cでおはなしするならいるかも M-720
基板コネクタとピンヘッダ
基板と基板を合体して2階建て構造にするのに便利。ばんばん使うので大量に購入。 ×
LCDモジュール
写真の正式名称はSC1602BSLB。SC1602BS*Bはバックライトなし。16文字x2行。主にsprintfとかでデバッグ用に使ってます。ただ、LCDモジュールで変数監視するとすごく遅くなる…。 P-38
スルーホール基板
両面にはんだがついているユニバーサル基板。普通の基板でもいいんですが、2階建てにするには両面はんだがある方が便利です。でも両面高い。。 ×




ちゅうしゃく

*1 startup.marを全部説明すると、リセット時のエントリポイントの設定、スタックポインタの設定、static宣言され初期された変数のROM(領域D)からRAM(領域X)へのコピー、static宣言されて初期化されていない変数のゼロ埋め、C言語エントリポイントmain()へのエントリ、関数E_INT(),D_INT()の実装、各種領域アドレスの設定。

*2 inttable.marの中身は IMIA1(割り込み1) のハンドラ(この場合LEDマトリクスを表示するためのshowLEDMatrix関数)の設定

*3 linkscriptの中身はライブラリにd:\h8\lib\c38hab.libを使って、領域Dを領域Xに関連付け、番地0x100(ROM)から 領域P,C,Dを配置して、ここからプログラムスタート、番地 0x0FEF10(RAM) から 領域 X,Bを配置。





update: Jan 5, 2006