
        ＝ TOPPERS/JSPカーネル ユーザズマニュアル ＝
                    (NEC V850ES/KJ1+ プロセッサ依存部)
                Application Corp. : TK-850/KJ1+, TK-850/SG2

        （Release 1.4.3 対応，2007）

------------------------------------------------------------------------ 
 TOPPERS/JSP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     Just Standard Profile Kernel

 Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory
                             Toyohashi Univ. of Technology, JAPAN
 Copyright (C) 2005 by Freelines CO.,Ltd 

 上記著作権者は，以下の (1)〜(4) の条件か，Free Software Foundation 
 によって公表されている GNU General Public License の Version 2 に記
 述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
 を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
 利用と呼ぶ）することを無償で許諾する．
 (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
     権表示，この利用条件および下記の無保証規定が，そのままの形でソー
     スコード中に含まれていること．
 (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
     用できる形で再配布する場合には，再配布に伴うドキュメント（利用
     者マニュアルなど）に，上記の著作権表示，この利用条件および下記
     の無保証規定を掲載すること．
 (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
     用できない形で再配布する場合には，次のいずれかの条件を満たすこ
     と．
   (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
       作権表示，この利用条件および下記の無保証規定を掲載すること．
   (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
       報告すること．
 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．

 本ソフトウェアは，無保証で提供されているものである．上記著作権者お
 よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
 含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
 接的または間接的に生じたいかなる損害に関しても，その責任を負わない．

 @(#) $Id: v850.txt,v 1.16 2007/05/21 01:28:08 honda Exp $
------------------------------------------------------------------------


このドキュメントでは，TOPPERS/JSP V850版について解説する．

１． V850 ターゲット依存部の概要

1.1 ターゲットシステムと開発環境

V850環境の実行環境としては，次のものを想定している．

    ・Application Corp. TK-850/KJ1+, TK-850/SG2

開発環境として次のものを使用した．
    ・Microsoft Windows 2000 Proffesional + CygWin 1.3.12-2
    ・binutils 2.11-2 (v850-nec-elf)
    ・gcc 2.95.3 (v850-nec-elf)
    ・newlib 1.9.0 (v850-nec-elf)
    ・ICE IE-V850E1-CD-NW

    newlibは、ソースからビルドする場合、コンパイルオプション"-mno-app-regs"と
    "-msmall-sld"がmakeエラーを起こす。newlibのmakefileからこの２つのオプション
    を削除することでmakeは完了する。

    ICEを使用したが、gccでリンクされたelfは、このICEではソースデバックが
    できない．（シンボルのみ読み込める）

1.2 サポートする機能の概要

    ・vxget_tim
        V850環境ではvxget_timをサポートする．
        ただし内容はタイマカウンタを返すのみである．

    ・多重割込み
        V850環境では割込みハンドラ起動中の多重割り込みを許可する．

1.3 TOPPERS/JSP V850環境の制限事項

    ・chg_ixx
        V850環境では割込み優先度の変更はサポート外である

    ・ena_int, dis_int
        V850環境では割込み許可・禁止はサポート外である．
        ただしloc_cpuとunl_cpuは同等の操作を行う．

    ・CPU例外と割り込みは同一
        V850環境ではdef_excとdef_intは同様の処理を行う．


２．V850環境に依存した機能

この節では，カーネルおよびシステムサービスの機能の中で，V850環境依存の部分に
ついて解説する．

2.1 データ型

int型 および unsigned int型のサイズは32ビットである．

割込み優先度を表現する型 IPR は符号なし8ビット整数である．


３．システムに依存した機能

3.1 メモリマップ

・TK-850/KJ1+
    0x00000000 - 0x000003CF : ベクタテーブル
    0x000003D0 -            : プログラムコード (内蔵FlashROM)
    0x03FFB000 -            : プログラムデータ (内蔵RAM)
               - 0x03FFEFFF : システムスタック (内蔵RAM)

・TK-850/SG2
    0x00000000 - 0x000003CF : ベクタテーブル
    0x000003D0 -            : プログラムコード (内蔵FlashROM)
    0x03FF7000 -            : プログラムデータ (内蔵RAM)
               - 0x03FFEFFF : システムスタック (内蔵RAM)

スタック領域は内蔵RAM領域の末尾からアドレス値が減少する方向へ進む．
データ領域は所定の領域からアドレス値が増加する方向へ確保される．

3.2 他のシステム/チップへのポーティング

ポーティング作業は次のステップからなる．
    ・システムレジスタの設定
    ・タイマーの設定
    ・シリアルポートの設定
    ・RAM開始番地の設定
    ・イニシャルスタックポインタの設定

3.2.1 メモリマップドレジスタのアドレス値設定

TOPPERS/JSP V850環境では内蔵の周辺デバイスへアクセスする前に、いくつかの
レジスタを設定している。CPUクロックの速度に応じた内部デバイスのウェイトを
制御するレジスタ、ウォッチドックタイマーをOFFにする、外部バスのウェイト設定
などの操作である．

3.2.2 タイマー値の設定

TOPPERS/JSP V850ES/KJ1+環境ではTM00を使用しており、標準で1msごとに割込みを発生させている．
V850ES/SG2環境ではTP0を使用している．

割込みを発生させるまでの時間はタイマコンペアレジスタの値をマニュアルに
したがって調整することで帰ることができる．（下記記述はKJ1+用だがSG2も同様である）

config/v850/tk850/tk850_kj1/hw_timer.h:hw_timer_initialize()
Inline void
hw_timer_initialize()
{
	/* タイマ初期化 */
	sil_wrb_mem((VP)PRM00, 0);		/* fx/2 */
	sil_wrh_mem((VP)CR000, TIMER_COMPAREVALUE);

またタイムティック自体を修正する場合はsys_defs.h:71,72のTIC_NUMEおよび
TIC_DENOを修正する．それぞれは次式に従う．

タイムティック(ms) = TIC_NUME(ms) / TIC_DENO(ms)

3.2.3 RAM開始番地の設定

config/v850/tk850_kj1/v850elf.ldのMEMORY部の内容を修正することで、メモリ
のサイズおよび位置を変えることができる。また、各セクションの末尾にある 
"> INTROM" または "> INTRAM、配置する空間を変えることも可能である。（SG2も同様）

3.2.4 イニシャルスタックポインタの設定

起動時に設定される初期スタックポインタの番地はconfig/v850/tk850_kj1/sys_config.h:70
のSTACKTOPに記述されている．（SG2も同様）
このSTACKTOPには4バイトアラインされた値を格納する．

tk850_kj1/sys_config.h(70):
	#define	STACKTOP	(IRAM_TOP+IRAM_SIZE)	/* 非タスクコンテキスト用のスタックの初期値 */

スタックはプリデクリメントスタックであるため，STACKTOPで示されたアドレス
には何も格納されないことに注意されたい．

3.2.5 その他の設定

    ・タイマ割り込みの番号
        config/v850/tk850_kj1/hw_timer.h:61 INHNO_TIMER宣言
            タイマが発生する割込みの番号（SG2も同様）


４．開発環境の構築

開発環境の構築方法については，GNU開発環境構築マニュアルを参照すること．

ICEにIE-V850E1-CD-NWを使用する場合にはMakefileを以下のように修正する必要がある．

DBGENVのコメントアウト
#
#  実行環境の定義（どれにも該当しない場合は，すべてコメントアウトする）
#		 （ターゲット依存に上書きされる場合がある）
#
#DBGENV := GDB_STUB

出力する実行モジュールファイルを.outに指定
#
#  ターゲットファイル（複数を同時に選択してはならない）
#
#all: $(OBJFILE)
all: $(OBJNAME).out
#all: $(OBJNAME).bin
#all: $(OBJNAME).srec

outファイルを出力するための指定
#
#  outファイルのためのファイル
#
$(OBJNAME).out: $(OBJFILE)
	cp $(OBJFILE) $(OBJNAME).out


５．その他

5.1 ディレクトリ・ファイル構成

TOPPERS/JSP V850依存部 構成ファイル ツリー

[jsp]
  +- [doc]
  |   +- v850.txt  : このファイル
  +- [config]
      +- [v850]
          +- cpu_config.h    : プロセッサ依存モジュール
          +- cpu_config.c    : プロセッサ依存モジュール
          +- cpu_context.h   : タスクコンテキスト操作ルーチン
          +- cpu_defs.h      : CPU依存情報定義ファイル
          +- cpu_rename.def  : カーネルの内部識別名のリネームとその解除の定義リスト
          +- cpu_rename.h    : カーネルの内部識別名のリネームの定義
          +- cpu_support.S   : CPU依存アセンブラコーディング部
          +- cpu_unrename.h  : カーネルの内部識別名のリネーム解除の定義
          +- Makefile.config : CPU依存Makefile
          +- makeoffset.c    : 構造体オフセット位置取得用
          +- start.S         : スタートアップ / 割込みハンドラ
          +- tool_config.h   : プロセッサの開発環境依存モジュール定義
          +- tool_defs.h     : プロセッサの開発環境依存定義
          +- v850asm.inc     : アセンブラ用インクルードファイル
          +- [tk850_kj1]       : KJ1+用依存部
              +- Makefile.config : システム依存Makefile
              +- hw_timer.h      : タイマ操作   (V850ES内蔵タイマTM00)
              +- hw_serial.h     : シリアル操作 (V850ES内蔵非同期SIO0)
              +- hw_serial.cfg   : シリアルのコンフィギュレーションファイル
              +- sys_config.h    : システム依存モジュール
              +- sys_config.c    : システム依存モジュール
              +- sys_defs.h      : システム依存定義ファイル
              +- sys_support.S   : システム依存アセンブラ部
              +- sys_rename.def  : カーネルの内部識別名のリネームとその解除の定義リスト
              +- sys_rename.h    : カーネルの内部識別名のリネームの定義
              +- sys_unrename.h  : カーネルの内部識別名のリネーム解除の定義
              +- v850elf.ld      : リンカスクリプト
              +- v850es_kj1.h    : V850ES/KJ1+のレジスタ定義
          +- [tk850_sg2]       : SG2用依存部
              +- Makefile.config : システム依存Makefile
              +- hw_timer.h      : タイマ操作   (V850ES内蔵タイマTP0)
              +- hw_serial.h     : シリアル操作 (V850ES内蔵非同期SIO0)
              +- hw_serial.cfg   : シリアルのコンフィギュレーションファイル
              +- sys_config.h    : システム依存モジュール
              +- sys_config.c    : システム依存モジュール
              +- sys_defs.h      : システム依存定義ファイル
              +- sys_support.S   : システム依存アセンブラ部
              +- sys_rename.def  : カーネルの内部識別名のリネームとその解除の定義リスト
              +- sys_rename.h    : カーネルの内部識別名のリネームの定義
              +- sys_unrename.h  : カーネルの内部識別名のリネーム解除の定義
              +- v850elf.ld      : リンカスクリプト
              +- v850es_sg2.h    : V850ES/SG2のレジスタ定義


６．その他

    ・この開発環境では、リンクの後に実行されるコンフィグレーションチェッカー(chk.exe)で
      エラーが発生する．無視してもかまわないし、煩わしいならMakefileから削除しても支障ない．


７．バージョン履歴
	2007年 05月14日  Release 1.4.3
		・rel 1.4.3対応
		・TK-850/KJ1+のシリアルドライバのバグ（受信中状態が解除されない）を修正

	2006年 04月10日  Release 1.4.2
		・割り込み処理、ディスパッチ処理部(cpu_supprt.S)を全面見直し．
		・TK-850/SG2対応を追加

	2005年 11月18日  Release 1.4.2
		・renameの重複の排除．
		・引数なし関数の宣言にvoidを入れた．

	2005年 8月2日  Release 1.4.2
		・rel 1.4.2へ合わせこみ．

	2005年 5月17日  Release 1.4.1
		・rel 1.3から1.4.1へ合わせこみ．ターゲットを株）アプリケーションの
		  TK-850/KJ1+に変更．ソースもドキュメントも更新．1.4.1ではMidas Lab製
		  のRTE-V850E/MA1-CBのサポートを外した．

	2002年 4月 6日  Release 1.3
		・rel 1.3にあわせ、ドキュメントの一部に間違いがったのを修正

	2001年11月15日  Release 1.2
		・RTE-V850E/MA1-CBのサポート

	2001年 2月23日  Release 1.1
		TOPPERS/JSP release 1.1 に合わせていろいろ修正
		・gcc -ffix-REGの存在を知り、この文章とMakefileを修正

    2000年11月27日  Release 1.0
        ・ドキュメント完成
        ・割込み前後処理ルーチンを改良 レジスタ退避を2回に分ける
        ・ディスパッチャが次タスクなし状態時に前のタスクスタックを
            利用してしまうバグを修正

    2000年11月19日  Release 0.9
        ・最初のリリース
