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/....
に修正
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿