Hitachi Embedded Workshop (HEW) Ver.2.0の使い方
ここでは、日立純正のコンパイラとその統合環境の初期設定について説明しています。 ターゲットは(株)アルファプロジェクト 製のCPUカードAP-SH4-0A を対象とします。 とりあえず、自分の覚書と思って書いています。今回はただ単にカードの上に乗っているLEDを光らせるだけのものです。

まず、Hitachi Embedded Workshop (以下HEW)を起動します。 はじめに、ワークスペースを作るか、既存のものを開くか聞いてきます。 ここでは、新規にプロジェクトを創ります。

つぎに、プロジェクトの名前を決めます。

勿論、CPUはSH4を選択し、CPUタイプはSH7750を選びます。

特に変更なく次に進みます。

Use I/O Liblaryをチェック、Generate Hardware Setup FunctionをC/C++ sorce file にします。

次は、使用するライブラリーの選択です。必要なものだけチェックしましょう。

スタックポインタのアドレスをセットします。alpha project の apsh40a\Sample\big 中にある boot.c の16行目の SPAdd のスタックアドレスの値を入力します。スタックサイズはそのままにします。

サポートファイルを作りますかと聞かれるので、ベクタの定義ファイルを創ってもらいます。

ターゲットはSH4なので、SH4 simulator と With BSC をチェックします。

Bus modeを3にします。シミュレータは2つ選んだので両方とも変更します。

これで、とりあえずワークスペースを作ることができました。 次は、ソースファイルの書き換えとOptionの変更です。

次に hwsetup.c をいじります.
@ alpha project の apsh40a\Sample\big 中にある boot.c の18行目
#define SDMR3 (*(volatile char *)0xFF94008C) /* SDRAM mode set Address */
をhwsetup.cのvoid HardwareSetup()の上あたり(23行目くらいかな)に貼り付けます。

A alpha project の apsh40a\Sample\big 中にある boot.c の50〜64行目あたりの ブートシーケンスをhwsetup.cのvoid HardwareSetup()の関数の中に書き入れます。このとき BSC...のところにP_をつけてP_BSC...とします。whileのある行にもBSCとあるので注意

Bついでに、今回はPORT_Aを使ってみようということなので、ブートシーケンスの中にポートの 初期化を入れてしまいましょう。alpha project の apsh40a\Sample\big 中にある main.c のvoid init_PORT(void)(103行あたり)のなかみも前の作業と同様、hwsetup.cのvoid HardwareSetup() の関数の中に書き入れます。このときも、PORTの前にP_を加えてP_PORT...のようにします。



今度は、resetprg.c をいじります。
#define SR_Init 0x000000F0 を #define SR_Init 0x700000F0にします。(20行目あたり)
これは、SH−4のステータスレジスタSRの初期値を設定します。 上位4ビットを7に変更するのは、処理モードを特権モードにし、レジスタバンク0を使用し、割り込みをマスクするという意味です。 ROMの書き込みに関するところは、メニューのlink、libraryのところで設定します。


次は、option → Hitachi SuperH RISC engine Standard Toolchain の窓を出します。
Link/Library タブを選択
Category → Section
PResetPRG → 0x00010000
P → 0x00011000
INTHandler → 0x00012000
RSTHandler → Remove
B → 0x0C000000


また、Category → Output
で、Data record header → S3 にします。


次は、option → Hitachi SuperH RISC engine Standard Toolchain でSimulator タブを選択
Addで
ROM  0x00000000 〜 0x00100000 R
SRAM 0x04000000 〜 0x0403FFFF R/W
DRAM 0x0C000000 〜 0x0CFFFFFF R/W
を入力

次は、vecttbl.src です。17〜33行をコメントアウトします。
; .export _RESET_Vectors から
・・・
;    VECTOR DATA END (TBL RESET) までです。



次は、vhandler.src です。これもコメントアウトします。
; .import _RESET_Vectors (23行くらい)
resetのルーチンをすべてコメントアウト。61〜71行くらい
; reset



最後に、main関数の入っている(test.cとか自分がつけた名前のファイル)プログラムを書き換えます。
先頭に
#include "iodefine.h"
を追加。
main()の中に、LEDを光らせるルーチン
P_PORT.PDTRB.WORD = 0x0008;
を追加。
これで、ビルドすると*.motのファイルができます。これを、マニアルにしたがってSH4のカードにダウンロードすればできるはずです。


おわりに
このカードは値段的には非常に安くいろいろ応用ができると思いますが、実際の開発にあたってROMの先頭にあるプログラムを 壊してしまうと、次に書き込むには直接CPUをデバッグするJTAGデバッガとかが必要になります。注意してください 私は一切責任を負いません。このあたり、H8のモニタデバッガのような、もうすこし手軽なものがあると非常に都合がいいんですけどね・・・