まつぞの です 「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 のソースと矛盾するのでは ないか、と。これから調べてみます。 長文になってしまいましたが、同じことをやろうとする方がいらっしゃるかもと 思い、すこし細かく書かせていただきました。