2009年9月30日水曜日

SH2:モニタプログラムのコンパイル 軽くはまる(^-^;;

秋月電子 SH2 7144 マザーボードセット
Renesus monitorのビルド
HEW
FDT FlashDevelopmentToolkit
開発環境WindowsXP
MONITOR-AKI7144.MOT
について書かれています(^-^

Renesusのmonitorプログラムは
SRAMにプログラムをRS-232Cで送り実行でき、しかも、メモリダンプ、
レジスタの確認、ブレークポイントの設定、ステップ実行、
printf、scanfが使えるという

monitorプログラムがrenesusから無料で公開されいるので、
ビルド、SH2/7144へ書き込み、実行してみたが
SHビギナーな私にとってはまりどころが満載なのでメモ。

手順:
HEWでモニタプログラムをビルド
FDTでモニタプログラムをSH2へ書き込む
SH2でモニタを起動
htermかteratermでモニタと通信をする


(1)ダウンロード
次のところからダウンロード

ルネサスサンプルプログラム
モニタプログラム

http://japan.renesas.com/fmwk.jsp?cnt=seminar_sample_downsh.htm&fp=/support/seminar/child_folder/sample_program/&title=%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0

HEW3,HEW4(C/C++ Compiler Ver. 8.0以降)対応版 SH-2用 モニタプログラム

をダウンロード

Hterm も一緒にダウンロード

モニタプログラムを解凍する

以下
SH2/Monitor/readme.htm 組み込み型モニタのカスタマイズ方法
をよーーーーーく読みながら作業をする。(重要)



(2)C言語によるユーザイニシャライズモジュールの修正

monitor.c
/************************************************************************/
/* SH7600 Monitor Program Ver. 2.0A */
/* Copyright (C) 2003 Renesas Technology Corp. */
/************************************************************************/
/*#include "7040s.h" /* */
#include "7144s.h" /* */
/************************************************************************/
/* User Initialize Module */
/* Input PR <-- Return Address */
/* Output Nothing */
/* Used Stack Area --> 0(0) Byte */
/************************************************************************/
#pragma noregsave(INITIALIZE) /* Non Register Save */
void INITIALIZE(void) /* */
{ /* */
PFC.PACRL2.BIT.PA4MD = 1; /* PA4 is TxD1 */
PFC.PACRL2.BIT.PA3MD = 1; /* PA3 is RxD1 */
/* */
} /* Goto Monitor Program */


(3)リンケージサブコマンドファイルの修正

monitor.sub
========
INPUT SUPERH,MONITOR,LOWER
LIST MONITOR.MAP
SHOW SYMBOL
OUTPUT MONITOR.MOT
FORM STYPE
CHANGE INFORMATION=1320
NOOPTIMIZE
LIBRARY SUPERH,7144
LIBRARY MONITOR
DEFINE $BRR=27
DEFINE $STACK=0
START VECTOR/0,ROM,P,C/400,RAM/FFFFE000,USER/FFFFE160,SCI/FFFF81B0


========
DEFINE $BRR=27

RS-232Cのボーレートを設定します。
計算式は

$BBR = <周辺クロック> / 32 / <ボーレート> - 1

周辺クロックはマザーボードのMODEスイッチ(MD2,MD3)で設定されたものになります。
[秋月 Base-Board マニュアル参照]
クロックモード番号が3なら周辺クロックはx2なので12.5MHzのクリスタルが乗った
ものならば25MHzになります。
ボーレートを19200にするには

$BBR = 25000000 / 32 / 19200 - 1 = 39.69 ≒ 0x27

となります。
特に115200bpsあたりまで高速になると、0x5では誤差が大きくなりすぎるようで、
文字化けてしまいますが、0x6ならば正常に表示されます。
が、四捨五入してうまくいくときと文字化けするときとがあるので、
前後の値を試してみたほうがいいかもしれません。

monitor.subに記述するときは16進数で記述するので、
間違えて10進数で記述すると文字化けします。


BBRビットレート一覧 (周辺クロック25MHz)
115200 0x6
57600 0xC (HTermの最高速度)
38400 0x13
19200 0x27
9600 0x50
4800 0xA1
2400 0x144 (設定できず)


SCI/FFFF81B0
秋月のシリアルポート0のアドレスを指定しています。
Pin48:PA3/RxD1
Pin49:PA4/TxD1


(4)組み込み型モニタの機能選択

コマンドプロンプト(CMD)を起動する

リンカー OPTLNK.EXE へパスを通す
以下monitor、OPTLINK.EXEのパスは各自の展開時のパスに依存します。
各自修正してください。

C:\>SET PATH=%PATH%;C:\HEW2\TOOLS\HITACHI\SH\7_0_0\BIN;
C:\>cd sh2\monitor\Release
C:\sh2\monitor\Release> MONITOR.BAT

SuperH RISC engine Monitor Configuration Batch
Copyright (C) 2003 Renesas Technology Corp.

Link with Breakpoint Command Module ? {y/n} : Y   (ブレークポイント)
Link with Dump Command Module ? {y/n} : Y   (メモリ内容のダンプ)
Link with DisAssemble Command Module ? {y/n} : Y   (逆アセンブル)
Link with Fill Command Module ? {y/n} : Y   (データの書き込み)
Link with Go Command Module ? {y/n} : Y   (ユーザプログラムの実行)
Link with SH status Command Module ? {y/n} : Y   (内蔵周辺機能の状態表示)
Link with Load Command Module ? {y/n} : Y   (ダウンロード)
Link with Memory Command Module ? {y/n} : Y   (メモリ内容の表示、変更)
Link with Register Command Module ? {y/n} : Y   (CPUレジスタの一覧表示)
Link with Step Command Module ? {y/n} : Y   (シングルステップの実行)
Link with . Command Module ? {y/n} : Y   (CPUレジスタの表示、変更)
Link with help Command Module ? {y/n} : Y   (コマンドヘルプ)
Link with return Command Module ? {y/n} : N   (繰り返し実行)
Link with . Command Module ? {y/n} : N   (コマンド履歴)
Link with interrupt Function ? {y/n} : Y   (内蔵周辺機能割込み管理)
Link with abort Function ? {y/n} : Y   (アボート管理)

Configuration Execute OK ? {y/n} : Y


readme.htmに記述されている
COMMAND /E:1024 /C MONITOR.BAT
を実行すると『環境のためのメモリが足りません』と表示が出て実行できません。
バッチファイルを読んでみると、
C:\sh2\monitor\Release\SUPERH.lib
を直接加工しているようですので、わざわざCOMMANDを実行しなくても
XPネイティブのCMDで動作させても問題ないようで、
monitor.batのダブルクリックでOKです。


HEWでビルド

作成されたMOTファイルを掲載しておきます。
MONITOR-AKI7144.MOT

FDTで書き込み


Teraterm(通信ソフト)で接続
 ファイル>新しい接続>シリアル

通信速度の設定
 設定>シリアルポート

ボーレート 19200
データ 8bit
パリティー none
ストップ 1bit
フロー制御 Xon/Xoff


うまくできれば、マザーボードをリセットした後に
-----
SH7144 Series SuperH RISC engine Monitor Ver. 2.0B
Copyright (C) 2003 Renesas Technology Corp.
:
-----
と表示されます

ヘルプが表示できるか確認してみましょう。

:?[Enter]
Monitor Vector 00000000 - 000002BF
Monitor ROM 00000400 - 00005749
Monitor RAM FFFFE000 - FFFFE15F
User Vector FFFFE160 - FFFFE41F

. : Changes contents of SH7600 registers.
B : Sets or displays or clear breakpoint(s).
D : Displays memory contents.
DA : Disassembles memory contents.
F : Fills specified memory range with data.
G : Executes real-time emulation.
L : Loads user program into memory from host system.
M : Changes memory contents.
R : Displays contents of SH7600 registers.
S : Executes single emulation(s) and displays instruction and registers.
SH : Displays contents of SH7144 peripheral registers.

こんな感じで表示されるはずです。
いろいろコマンドを試してみてください。

モニタ上でHelloWorldを表示する SH2/7144 へ続く

0 件のコメント:

コメントを投稿