[H8-ML(1696)] TOPPERS on 秋月H8/3048(その後) 
From: Keiji Matsuzono <k-zono@xxxxxxxxxxxxxxxx>
Date: 2002年03月23日(土)01時56分31秒
まつぞの です

「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 のソースと矛盾するのでは
    ないか、と。これから調べてみます。

長文になってしまいましたが、同じことをやろうとする方がいらっしゃるかもと
思い、すこし細かく書かせていただきました。

スレッド概略
[1678(R)](起点)
 └[1679(U)]
   └[表示中]
     └[1697(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]