まつぞの です
「TOPPERS を秋月の H8/3048 開発キットで動かそう!」の中間報告です。
まずは TOPPERS についている sample1.c を gdb で動かすことを目指しました。
現状はこんなかんじです。
[できること]
- サンプルをカーネルと一緒にコンパイルし、jsp(coffフォーマット),
jsp.S (S フォーマット)を作成
(a) kermit で H8 上のモニタデバッガ(日立製改)に接続し、jsp.S を
L コマンドでロード、G コマンドで実行
(b) h8/300H 用 gdb で jsp を H8 にダウンロード、実行
(a),(b) の両方成功しました。
[できないこと]
- サンプルプログラムにシリアルポート経由で文字入力すること
サンプルプログラムは、メインタスクが stdin から文字を受け取り、
動作を変えるようになっているのですが、文字を入力したとたん、
Unexpected interrupt.
PC = 8402213c SP = 0002ec04
ER0 = 0002f164 ER1 = 0002f044 ER2 = 00000000 E
ER4 = 00000000 ER5 = 0002f044 ER6 = 0002f030
となってしまいます。
[やったこと、注意点]
(1) 開発ツール (binutils,gcc,newlib,gdb)
基本的に user.txt に従ってコンパイルしました。
- binutils
user.txt のとおりに、--disable-nls をミソでした。
以前に H8 用にコンパイルしていた binutils があったので、
はじめはそれを使ってみたのですが、そっちはこのオプションを
つけずにコンパイルしたもので、TOPPERSのカーネルコンフィグ
レーションのときに nls 関係のエラーがでました。
- gcc,newlib
user.txt どおりです
- gdb
これは user.txt と手順は同じですが、ソース自体に日立の
モニタ用のパッチが当ててあります。
(2) リンカスクリプトの指定
TOPPERS の H8 は、秋月製のモニタデバッガを対象としているので、
日立のモニタとメモリマップが異なります。それをリンカスクリプトで
指定するわけですが、それをどこで設定するのか最初はわかりませんでした。
jsp/config/h8/akih8_3048f/Makefile.config
にその設定があったので、自前のリンカスクリプト(SRAM 1MBit を
エリア1に割り当て)指定しました。
(3) シリアルポートの設定
TOPPERS はカーネルがログ機能を提供しており、サンプルプログラムも
それを利用しています。サンプルプログラムは H8 の SCI1 を使うように
なっています。
ところが、秋月のマザーボードのパターン及び日立のモニタの設定が
SCI1 を使うようになっています。
(GDB+日立のモニタ)と(TOPPERSのログ機能)がおなじシリアルポートを
使うことになっています。もしかしたら共用できるのかもしれませんが、
さけた方が無難な気がしました。そこで2つの案を考えました。
(a) マザーボードのパターンカットとジャンパとばし
&日立モニタの設定変更
(b) TOPPERS 側の SCI の設定変更
(a) のほうが面倒に思えたので、(b) でやってみました。
jsp/config/h8/akih8_3048f/Makefile.config
にその設定がありました。
(4) RS232C ケーブルの作成
(b)を採用したので、 SCI0 用のケーブルが必要になりました。
TOPPERS のソースのコメントによると、フロー制御は xon/xoff を
使っているので、ケーブルでは RTS や CTS は接続しなくてよいと
判断しました。
(ソース:jsp/config/h8/hw_serial.h)
思った通り、TxD,RxD,GND の 3 つだけで通信できました(^^)v
<余談>
RS-232C のコネクタは秋月などで見ていてどこで手に入れるか検討が
ついていたのですが、ケーブルをどこで買ったらよいか迷いました。
たかが3芯なので、ビニール線でもよいのですが、さすがにカッコ悪い。。。
結局、ラジオでパートの前のケーブル屋さん(名前失念)で、4芯の
シールドケーブル(?というのでしょうか)を 2 m 買いました。
</余談>
[次の課題]
・前述の割り込みのエラー
いまあやしいとにらんでいるのは、割り込みベクタのメモリマップが
つじつまがあっていないのではないか、ということです。
自前のリンカスクリプトではエリア1の先頭 0x20000 から 0x100 だけ
アプリケーション用(モニタ用ではないという意味)のベクタテーブルに
割り当てているのですが、これが TOPPERS のソースと矛盾するのでは
ないか、と。これから調べてみます。
長文になってしまいましたが、同じことをやろうとする方がいらっしゃるかもと
思い、すこし細かく書かせていただきました。