2010年5月22日土曜日

SH-2A基板 「GCC対応シリアル・ダウンローダ(TinyMON)」を試す。



CQ出版 Interface誌 付属SH-2A基板特設ページ から「GCC対応シリアル・ダウンローダ(TinyMON)」を入手し、その動作を検証しました。

「GCC対応シリアル・ダウンローダ(TinyMON)」の検証では、GNU GCC 開発環境の検証、この環境で作成したプログラムのROM化の検証が併せて行えたようです。

[概要]
・TinyMONのシリアル通信チャネルをSCIF2からSCIF3に変更
・GNU GCCによる開発環境の検証 (TinyMONのビルド)
・TinyMONの動作確認

1.TinyMONの改造
 シリアル通信チャネルをSCIF2からSCIF3に変更するにあたり、以下の修正をTinyMONに行いました。
 1)cpu_uart.cの修正
  ・UARTコントローラの設定変更
    #define USE_UART_CH 2  => #define USE_UART_CH 3
  ・ポート設定
   付属SH-2A基板のCN3のNo.18(RxD3)No.24(TxD3)を使用するための設定。
    /* ポートコントローラ制御レジスタ */
    #define PGCR3 ((volatile unsigned short int *)(0xFFFE38C8))
    #define PGCR4 ((volatile unsigned short int *)(0xFFFE38C6))
     を追加

    /* ポート設定(RXD3(PG15))*/
    *PGCR3 = (*PGCR3&0x0FFF)|0x3000;
    /* ポート設定(TXD3(PG16))*/
    *PGCR4 = (*PGCR4&0xFFF0)|0x0003;
     を追加

    ※2010.7.18追加
    シリアル通信チャネル3 BaseAddress の設定
    /* FIFO付きシリアルコントローラSCIF(SCIF3) */
    #define BaseAddr (0xFFFE9800)
     を追加
 

    シリアル通信チャネル3 スタンバイ解除
    /* SCIF3スタンバイ解除 */
    *STBCR4 = (*STBCR4 & 0xEF); /* SCIF3動作 */
     を追加

2.TinyMONのビルド
 GNU GCCの開発環境は KPITカミンズ・インフォシステムズ・リミテッド より入手した環境で行いました。
 1)Makefileの修正
  ・各ツールの指定
    GCC = /usr/local/sh-tools/bin/sh-elf-gcc
    LD = /usr/local/sh-tools/bin/sh-elf-ld
    AS = /usr/local/sh-tools/bin/sh-elf-as
    OBJCOPY = /usr/local/sh-tools/bin/sh-elf-objcopy
    =>
    GCC = sh-elf-gcc
    LD = sh-elf-ld
    AS = sh-elf-as
    OBJCOPY = sh-elf-objcopy
    (/cygdrive/c/KPIT_Cummins/GNUSHv10.01-ELF/sh-elf/bin/sh-elf-gcc.exe ..)
    (環境設定で既にPATHが通っているので)
  ・ライブラリの参照指定を変更
    GCCLIB = /usr/local/sh-tools/lib/gcc/sh-elf/3.4.5/m2
    $(LD) -Map $(TARGET).map -T $(LDSCRIPT) $(OBJS) -L$(GCCLIB) -lgcc -o $(TARGET).elf
    =>
    LIBRARY_DIRS = -L ../../../../KPIT_Cummins/GNUSHv10.01-ELF/sh-elf/lib/gcc/sh-elf/4.4-GNUSH_v10.01/m2a -L ../../../../KPIT_Cummins/GNUSHv10.01-ELF/sh-elf/sh-elf/lib/m2a
     $(LD) -Map $(TARGET).map -T $(LDSCRIPT) $(OBJS) $(LIBRARY_DIRS) -lgcc -o $(TARGET).elf
    ※修正前のライブラリディレクトリ指定が m2 で 気休めに m2a に変更しました。

 2)ビルドの実行
   色々、試行錯誤(後述)の結果、無事成功。
 3)シリアルフラッシュROMへの書き込み。
   SPIwreterUserDI(改)により TinyMON を シリアルフラッシュROMに書き込みました。

3.TinyMONの動作検証
 幸か不幸か、HEWをインストールしたPCにシリアル(RS232c)のポートが残っていたので、付属SH-2A基板にRS232CドライバIC(ADM3202)を繋ぐだけでPCとのシリアル通信が実現できました。
 とりあえず、ハイバーターミナルでTinyMONの動作が検証できました。
 ・SH7262リセットで ハイバーターミナルに”Tiny Dump Monitor” が 表示
 ・ヘルプ表示
 ・メモリダンプ
   ためしに、SH7262レジスタ 周波数制御レジスタ(FRQCR)を確認しようと 
   DB FFFE0010 を 実行したが、0x1104 の設定は確認出来なかった。????
   (00 00 であった)
   ・・・課題点

※開発メモ
1.GNU GCCの開発環境(KPIT版)/(付属SH-2A基板特設ページ版)
 今回GNU GCCの開発環境はKPITでリリースされている環境を使用しました、付属SH-2A基板特設ページ(Interface誌)で提供される sh-tools20100424.tar.bz2 で GNU GCCの開発環境を整えた場合、上記のようなMakefileの修正の必要は無く容易にGNU GCCによる開発が出来るようです。

2.GNU GCCの開発環境(KPIT版)での注意点
 1)インストール先について。
 私の場合 WindowsVISTA 64bit版にインストールしました。すると、インストール先が Program Files(x86) になりました。これが Cygwin で結構、厄介なことになります。しかたなく、別ディレクトリ(C:\KPIT_Cummins)にインストールし直しました。

 2)Makeファイルのライブラリ設定。
 ・ビルドエラー ”cannot find -lgcc make: *** [all] Error 1 ”が発生。 最初、libgcc.a の所在を確認し、Makefileでのライブラリ設定に反映させました。しかし、エラーは解消されず、sh-elf-ld が libgcc.a を見つけられないのか不明でした。
 試しに、-lc や -lm 等でも ビルドを行うと、これも同様のエラー libc.a、libm.c が 有るのに見つけられないと言うエラーが起きました。いろいろもがくうちに、ライブラリフォルダの位置が問題と考えるようになりました。
 Windows上で C:\KPIT_Cummins\GNUSHv10.01-ELF配下のライブラリファイルは、Cygwinでは、/cygdrive/c/KPIT Cummins/GNUSHv10.01-ELF配下と表現します。
 Windows上で C:\Cygwin\usr\local\sh-tools等の配下のライブラリファイルは、Cygwinでは/usr/local/sh-tools等の配下と表現します。
 どうも、sh-elf-ld が /cygdrive/c/....の 表記を受け付けないようです。この推測を実証するために、次の対処を行ったところ、ようやくビルドが成功しました。

 (対処) 
  ライブラリ指定を
    LIBRARY_DIRS = -L /cygdrive/c/KPIT_Cummins/GNUSHv10.01-ELF/sh-elf/....
  から
    LIBRARY_DIRS = -L ../../../../KPIT_Cummins/GNUSHv10.01-ELF/sh-elf/....
  に修正

0 件のコメント:

コメントを投稿