------------------------------------------------------------------------------
  Hyper Operating System V4  μITRON4.0仕様 Real-Time OS                      
    V850ES(CA850)用 ドキュメント                                              
                                                                              
                                       Copyright (C) 1998-2008 by Project HOS 
                                       http://sourceforge.jp/projects/hos/    
------------------------------------------------------------------------------

1. 概要

  本ドキュメントは Hyper Operating System V4（以下 HOS-V4）のV850ESコア
  の固有部分についての説明を記載します。
  特に、CQ出版社Interface誌2007年5月号付録基板にカスタマイズしていますので、
  他の製品で適用する場合は、一部機能が使えない場合があります。

2. 動作環境とその構築

2.1 CPUボード

動作確認がされているCPUボードは、以下のものです。

- CQ出版社Interface誌2007年5月号付録基板 (V850ES/JG2)
- 自作 V850ES 基板(V850ES/JG2, JG3)

2.2 開発環境

NEC エレクトロニクス(株) の PM+(v6.31)+CA850(v3.20,v3.30)で動作確認しています。

2.3 HOSのコンパイル

　libh4v850.a ライブラリの生成方法を記します。　2.3.1 は HOS-v4 共通の
作業となります。　ライブラリ生成方法は３通りの方法を想定し記載しており
ます。　2.3.2章では、PM+上で行う場合、2.3.3章では、msysやcygwin上で行う
場合、2.3.4章では、bcc5.5の環境を用いて、Windows 環境（command.com ）で
行う場合です。　皆様の環境に合わせてお使いください。

2.3.1 HOS-v4共通 (hos4cfg.txt参照)
- hos4cfg.txt を参照のうえ、Windowsのネイティブコードを生成する環境で、
　hos4cfg.exe を生成してください。　あらかじめ用意された hos4cfg.exe を
　活用いただいても結構です。

- 今後、オリジナルな環境で開発を行うことを想定して、上記で生成した
　hos4cfg(.exe) を C:\WINDOWS\system32 など PATH が通っているところに
　コピーしておくと便利です。

2.3.2 V850ES固有部 (PM+ 環境下の場合)
- hos-v4/lib/v850es/v850es_pm_r?? として３種類の外部変数レジスタモードに
　合わせた環境を用意しましたので、それぞれのフォルダ内の libh4v850.prw を
　PM+ 環境上で開いてください。　それぞれの libh4v850.prw をダブルクリック
　していただいても開けます。

- 開いた際に、PM+, CA850 などのバージョンの違いからワーニング、もしくは
　エラーが生じる可能性があります。　適宜修正を行ってください。
　（バージョンの違いであれば、修正のためのウィンドウが開きますので、
　　皆様の環境にあるコンパイラなどのバージョンを指定いただければ結構です）
　（フォルダ名の違いや、include ファイルが見つからない、というメッセージは、
　　無視していただいて結構です。　PM+ により自動修正されるはずです。）

- 上記フォルダの下に tmp という名前のフォルダがあることを確認してください。
　（なければ、tmp という名前で作成をしてください）
　tmp フォルダの下に、ライブラリ作成時の中間ファイル(.S, .o)を作成します。

- libh4v850.a ファイルの出力先を確認してください。　特に、上記 libh4v850.prw
　でバージョンの違いが指摘された場合は、変更が必須です。
　　[ツール] -> [アーカイバオプションの設定] -> [アーカイブファイル]
　アーカイブファイルにフォルダを指定しない場合は、libh4v850.prw ファイルと同じ
　フォルダにlibh4v850.a が生成されます。

　例）CA850 v3.30 でレジスタモードが r22 モードの場合、
　　　　C:\Program Files\NEC Electronics Tools\CA850\W3.30\lib850\r22\libh4v850.a

　例）CA850 v3.20 でレジスタモードが r32 モードの場合、
　　　　C:\Program Files\NEC Electronics Tools\CA850\W3.20\lib850\r32\libh4v850.a

- （リ）ビルドしてください。
　前libh4v850.a の出力先指定がされていれば、libh4v850.a が PM+ 環境に合わせて
　インストールされます。　この場合、コピー等不要です。　指定がされていない場合は、
　ビルド後に皆様自身で適宜コピーを実施してください。


2.3.3 V850ES固有部 (msys, cygwin 環境下の場合)
- hos-v4/lib/v850es/v850es_ca850/に移動します。

- h4v850es.mkをコンパイラにあわせて変更します。
　ca850.exe, as850.exe, ld850.exe, ar850.exe のある
　binディレクトリが置かれているディレクトリを TOOLDIR に
　指定してください。

　現在の指定は、
　　TOOLDIR= "C:\Program Files\NEC Electronics Tools\CA850\W3.20"
　です。
　　$(TOOLDIR)/bin に ca850.exe などのコンパイラがある
　　$(TOOLDIR)/include にコンパイラが使うヘッダディレクトリがある
　　$(TOOLDIR)/lib850 にライブラリがある

- MSYS や Cygwin 上で make -f h4v850es.mkとしてmakeします。

- libh4v850es.aが r22/, r26/, r32/ ディレクトリ内にそれぞれ生成
　されます。　-reg22, -reg26, -reg32 に対応するライブラリを
　それぞれのディレクトリに生成し分けた結果です。

- make -f h4v850es.mk install を実行します。
　これにより、r22/, r26/, r32/ のそれぞれのディレクトリに生成された
　ライブラリが $(TOOLDIR)/lib850/ 以下のライブラリフォルダにコピー
　されます。

2.3.4 V850ES固有部 (Windowsコンソール環境下でbcc5.5のmakeを使う場合)
　bcc5.5 の make コマンドが環境変数 PATH に指定されていることが
　前提です。　標準のインストールの場合は、c:\borland\bcc55\bin の下に
　make.exe があると思いますので、Windows のシステムプログラムを起動し
　（コントロールパネルから、システムアイコンをクリックして起動し）
　[詳細設定]TAG -> [環境変数]ボタンをクリックの後、システム環境変数の
　PATH の項目に、make.exe のあるフォルダ名を追記してください。
　パス名の区切り文字は ; です。

- hos-v4/lib/v850es/v850es_ca850/に移動します。

- bcc55.mkをコンパイラにあわせて変更します。
　ca850.exe, as850.exe, ld850.exe, ar850.exe のある
　binディレクトリが置かれているディレクトリを TOOLDIR に
　指定してください。

　現在の指定は、
　　TOOLDIR= "C:\Program Files\NEC Electronics Tools\CA850\W3.20"
　です。
　　$(TOOLDIR)/bin に ca850.exe などのコンパイラがある
　　$(TOOLDIR)/include にコンパイラが使うヘッダディレクトリがある
　　$(TOOLDIR)/lib850 にライブラリがある

- Windows のコンソールを起動します。
　[スタート] -> [ファイル名を指定して実行] を選択の後、[名前]の
　枠内に、
　　　command
　と入力し、[OK] をクリックしてください。

- make -i -f bcc55.mk として make を実行してください。
　ここで、-i は command.com のコマンドなどでエラーがでた場合でも、
　実行を行うオプションです。　r22, r26, r32 フォルダが存在すると、
　エラーとなり止まるのを防ぐものです。

　もし、コンパイルエラーが生じても、そのまま次の make 作業が続行
　されることを避けたい場合は、-i オプションを使わなければ、エラー時に
　make がとまります。　使い分けてください。

- libh4v850es.aが r22/, r26/, r32/ ディレクトリ内にそれぞれ生成
　されます。　-reg22, -reg26, -reg32 に対応するライブラリを
　それぞれのディレクトリに生成し分けた結果です。

- make -f h4v850es.mk install を実行します。
　これにより、r22/, r26/, r32/ のそれぞれのディレクトリに生成された
　ライブラリが $(TOOLDIR)/lib850/ 以下のライブラリフォルダにコピー
　されます。


2.4 サンプルプログラムのコンパイル

2.4.1 サンプルプログラムをそのまま動かしてみる

- PM+ を起動し、hos-v4/sample/v850es にあるプロジェクト sample を開きます。
　sample.prw をダブルクリックでも結構です。
　その際、２つのファイルが見つかりません、と（最初の１度だけ）表示されますが、
　無視していただいて結構です。　hos4cfg.exe にて system.cfg より生成するファイルが
　パッケージには入れていないためのものです。

- バッチ・（リ）ビルドします。
　system.cfg を hos4cfg 処理するため、バッチ・（リ）ビルドにて実施してください。
　サンプル以外の場合は、2.5章を参照のうえ、バッチ処理の設定を行ってください。

- 生成されたromp.hexをマイコン内蔵のフラッシュROMへ書き込みます。

2.4.2 OSタイマ用割込みについて
　system.cfg と ostimer.c にて、OSタイマ用の割込みを生成しています。
　現状２種類のタイマ割込みの例を紹介しています。
　１つは、時計タイマによるインターバルタイマ割り込みを利用する方法で、
　もう１つは、TMMタイマによる割込みです。
　時計タイマの場合、OSタイマの周期をちょうど1msec.としていませんので、
　時間をきちんと制御したい場合はTMMを使うようにしてください。
　（工夫次第では時計タイマでも実現できるかもしれません）

2.5 コンフィギュレーションファイルのコンパイル
　2.4章のサンプルではバッチビルドを利用して、system.cfg を hos4cfg.exe に
　通して、kernel_cfg.c と kernel_id.h の生成を行っています。
　以下に設定方法を記します。

　PM+ においてプロジェクトを開いた状態にて以下を行い、プロジェクト毎に
　設定してください。

- PM+メニュー [ビルド] -> [ビルド設定(G)...] にてビルド設定ウィンドウを開く。
- ウィンドウのタグ [ビルド前処理] を選ぶ。
- 下記の４コマンドを１つずつ追加する。
　（追加ボタンを押して１つずつ登録する）

１行目）　copy system.cfg system.c
２行目）　"c:\Program Files\NEC Electronics Tools\CA850\W3.20\bin\ca850.exe" -Xcxxcom -P system.c
３行目）　del system.c
４行目）　hos4cfg.exe system.i

　（注意）上記２コマンド目の ca850 のパスは半角スペースを含む場合、
　　　　　""ダブルクォーテーションにてくくって下さい。
　（注意）ca850.exe のパスは皆様の環境に合わせて設定してください。
　　　　　特にバージョンの違いにはご注意ください。
　　　　　(v3.20 -> W3.20, v3.30 -> W3.30)
　（注意）ca850.exe は .c など登録している拡張子しか通らないため、
　　　　　必ず、１つ目、３つ目のコマンドでファイル名変更が必要です。
　（注意）hos4cfg.exe のパスが通っていない場所にある場合は、
　　　　　ca850.exe 同様、絶対パス指定を行って下さい。

- 以上により、ビルドを実施する前に、４コマンドをビルドの度に実行されるように
　なります。

2.6 外部変数レジスタへの対応
　libh4v850.a は -reg22, -reg26, -reg32 の外部変数レジスタ対応で、
　３種類生成します。　ソースコード含めたライブラリ生成時の編集は、
　不要です。　ただし、hos4の標準ライブラリはすべて -reg22 指定で
　生成されます（それほど多くのレジスタ変数を使用しない可能性が高いため、
　-reg22, -reg26, -reg32 では同じ .o ファイルが生成されているものと推測
　しています）。

　PM+ のプロジェクト生成時に 22, 26, 32 のレジスタモードを選択するとで、
　ライブラリも含めて自動切り替えされます。


3. メモリマップ（工事中）


4 例外処理（割込みを含む）について

4.1 割込みの動作について
　現在、標準仕様として、TMM0 の 16ビットカウンタを利用して、1msec.の
　周期タイマを実現しています。
　また、TMM0 を含めたすべての割込みは、4.2章で定義した割込みベクタ番号通りに
　r2レジスタに番号を代入の後、同一ルーチン int_handler() を呼び出します。
　r2レジスタは CA850 にて RTOS用として割り振られているため、割込み処理や、
　タスク切り替え(dispatch)の際に、退避・保存されません。　また、必ず、
　割込み番号が代入されるため、壊れますので、利用しないでください。

4.2 割込みベクタ番号一覧（工事中）

　同一番号に異なる内容のものが V850ES仕様としてありますので、
　見つからない場合は、NECエレクトロニクス（株）発行のユーザーズマニュアルを
　参照ください。

     割込み定義番号  要因            内容
     ----------------------------------------------------------------------
            0       --              デフォールトハンドラ
            1       --              (予約)
            2       --              (予約)
            3       --              (予約)
            4       --              (予約)
            5       --              (予約)
            6       --              (予約)
            7       --              (予約)
            8       INTLV1          (予約)
            9       INTP0           外部割込み端子入力エッヂ検出(INTP0)
            10      INTP1           外部割込み端子入力エッヂ検出(INTP1)
            11      INTP2           外部割込み端子入力エッヂ検出(INTP2)
            12      INTP3           外部割込み端子入力エッヂ検出(INTP3)
            13      INTP4           外部割込み端子入力エッヂ検出(INTP4)
            14      INTP5           外部割込み端子入力エッヂ検出(INTP5)
            15      INTP6           外部割込み端子入力エッヂ検出(INTP6)
            16      INTP7           外部割込み端子入力エッヂ検出(INTP7)
            17      INTTQ0OV        TMQ0 オーバーフロー
            18      INTTQ0CC0       TMQ0 キャプチャ0 / コンペア0一致
            19      INTTQ0CC1       TMQ0 キャプチャ1 / コンペア1一致
            20      INTTQ0CC2       TMQ0 キャプチャ2 / コンペア2一致
            21      INTTQ0CC3       TMQ0 キャプチャ3 / コンペア3一致
            22      INTTP0OV        TMP0 オーバーフロー
            23      INTTP0CC0       TMP0 キャプチャ0 / コンペア0一致
            24      INTTP0CC1       TMP0 キャプチャ1 / コンペア1一致
            25      INTTP1OV        TMP1 オーバーフロー
            26      INTTP1CC0       TMP1 キャプチャ0 / コンペア0一致
            27      INTTP1CC1       TMP1 キャプチャ1 / コンペア1一致
            28      INTTP2OV        TMP2 オーバーフロー
            29      INTTP2CC0       TMP2 キャプチャ0 / コンペア0一致
            30      INTTP2CC1       TMP2 キャプチャ1 / コンペア1一致
            31      INTTP3OV        TMP3 オーバーフロー
            32      INTTP3CC0       TMP3 キャプチャ0 / コンペア0一致
            33      INTTP3CC1       TMP3 キャプチャ1 / コンペア1一致
            34      INTTP4OV        TMP4 オーバーフロー
            35      INTTP4CC0       TMP4 キャプチャ0 / コンペア0一致
            36      INTTP4CC1       TMP4 キャプチャ1 / コンペア1一致
            37      INTTP5OV        TMP5 オーバーフロー
            38      INTTP5CC0       TMP5 キャプチャ0 / コンペア0一致
            39      INTTP5CC1       TMP5 キャプチャ1 / コンペア1一致
            40      INTTM0EQ0       TMM0 コンペア一致（HOS Timerとして使用）
            41      INTCB0R         CSIB0 受信終了 / 受信エラー
            42      INTCB0T         CSIB0 連続送信書き込み許可
            43      INTCB1R         CSIB1 受信終了 / 受信エラー
            44      INTCB1T         CSIB1 連続送信書き込み許可
            45      INTCB2R         CSIB2 受信終了 / 受信エラー
            46      INTCB2T         CSIB2 連続送信書き込み許可
            47      INTCB3R         CSIB3 受信終了 / 受信エラー
            48      INTCB3T         CSIB3 連続送信書き込み許可
            49      INTCB4R         CSIB4 受信終了 / 受信エラー
            50      INTCB4T         CSIB4 連続送信書き込み許可
            51      INTUA1R         UARTA1 の受信終了 / 受信エラー
            52      INTUA1T         UARTA1 の連続送信許可
            53      INTUA2R         UARTA2 の受信終了 / 受信エラー
            54      INTUA2T         UARTA2 の連続送信許可
            55      INTAD           A/D変換終了
            56      INTDMA0         DMA0転送終了
            57      INTDMA1         DMA1転送終了
            58      INTDMA2         DMA2転送終了
            59      INTDMA3         DMA3転送終了
            60      INTKR           キー・リターン割込み
            61      INTWT1          (予約)
            62      INTWT           時計タイマの基準時間
            63      --              (予約)

------------------------------------------------------------------------------
 Copyright (C) 1998-2008 by Project HOS                                       
------------------------------------------------------------------------------
