
		TOPPERS/ATK2-SC2
        ＜V850プロセッサ依存部マニュアル(GCC版)＞

このドキュメントはV850プロセッサ依存部のGCC版情報を記述したものである．

----------------------------------------------------------------------
TOPPERS ATK2
    Toyohashi Open Platform for Embedded Real-Time Systems
    Automotive Kernel Version 2

Copyright (C) 2013-2015 by Center for Embedded Computing Systems
            Graduate School of Information Science, Nagoya Univ., JAPAN
Copyright (C) 2013-2014 by FUJI SOFT INCORPORATED, JAPAN
Copyright (C) 2013-2014 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
Copyright (C) 2013-2014 by Renesas Electronics Corporation, JAPAN
Copyright (C) 2013-2014 by Sunny Giken Inc., JAPAN
Copyright (C) 2013-2014 by TOSHIBA CORPORATION, JAPAN
Copyright (C) 2013-2014 by Witz Corporation, JAPAN

上記著作権者は，以下の (1)〜(3)の条件を満たす場合に限り，本ドキュメ
ント（本ドキュメントを改変したものを含む．以下同じ）を使用・複製・改
変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
(1) 本ドキュメントを利用する場合には，上記の著作権表示，この利用条件
    および下記の無保証規定が，そのままの形でドキュメント中に含まれて
    いること．
(2) 本ドキュメントを改変する場合には，ドキュメントを改変した旨の記述
    を，改変後のドキュメント中に含めること．ただし，改変後のドキュメ
    ントが，TOPPERSプロジェクト指定の開発成果物である場合には，この限
    りではない．
(3) 本ドキュメントの利用により直接的または間接的に生じるいかなる損害
    からも，上記著作権者およびTOPPERSプロジェクトを免責すること．また，
    本ドキュメントのユーザまたはエンドユーザからのいかなる理由に基づ
    く請求からも，上記著作権者およびTOPPERSプロジェクトを免責すること．

本ドキュメントは，AUTOSAR（AUTomotive Open System ARchitecture）仕様
に基づいている．上記の許諾は，AUTOSARの知的財産権を許諾するものではな
い．AUTOSARは，AUTOSAR仕様に基づいたソフトウェアを商用目的で利用する
者に対して，AUTOSARパートナーになることを求めている．

本ドキュメントは，無保証で提供されているものである．上記著作権者およ
びTOPPERSプロジェクトは，本ドキュメントに関して，特定の使用目的に対す
る適合性も含めて，いかなる保証も行わない．また，本ドキュメントの利用
により直接的または間接的に生じたいかなる損害に関しても，その責任を負
わない．

$Id: prc_user.txt 190 2015-04-10 07:47:47Z ertl-honda $
----------------------------------------------------------------------

○概要

V850プロセッサ依存部（以下，V850依存部）は，ルネサスエレクトロニクスの
V850E2M/V850E2Sコア(V850E2v3アーキテクチャ)または，G3M/G3Kコア(V850E3V5ア
ーキテクチャ)を用いたLSIをサポートしている．

現状サポートしているLSIは，次に2種類である．V850プロセッサ依存部では，
プロセッサと割り込みコントローラのみを使用するため，他の
V850E2M/V850E2SコアもしくはG3M/G3Kコアを用いたLSIへのポーティングは容
易である．

 ・V850E2/Fx4
 ・RH850/F1L
 ・RH850/F1H

○開発環境

カーネルのコンパイルは，GCC を用いている．動作確認を行なったバージョン
は以下のものである．

V850E2v3アーキテクチャ
V850E3v5アーキテクチャ
 ・gcc version 4.9-GNUV850_v14.01 (GCC_Build_2.01) 
   KPITのWebサイトから入手
   
デバッガは，CS+を使用して動作確認をしている．動作確認をしたバージョン
は次の通りである．

 ・V3.00.000
 
このバージョンでは，GCCで生成したオブジェクトのLMAに非対応である．すな
わち，初期値付き変数のためにデータセクション(.data)のVMAとLMAが異なる
elfファイルを作成しても，VMAの場所にデータがロードされる．オブジェクト
ファイルのデータセクションのVMAをLMAのアドレスに上書きするRubyスクリプ
トconv2cs+.rb を用意している．ビルド時に次の様にmakeを実行するとオブジ
ェクトファイルが変更される．

 make cs


○周辺回路

ATK2のSC2カーネルのサンプルを動作させるためには，周辺回路として，UART
とタイマが必要となる．V850依存部では，UARTとしては，アシンクロナス・シ
リアル・インタフェース（UARTEn）を，タイマとしては，タイマアレイユニッ
ト（TAUn）をサポートしている．使用するチャネルはターゲット毎に異なる．


○TAUn割込みハンドラ(in taua_timer.c)

IncrementCounter(SysTimerCnt)により，SysTimerCntのソフトウェアカウンタを
インクリメントしている．IncrementCounter(SysTimerCnt)の戻り値がE_OK以外の
場合，ShutdownOS()を呼び出している．


○割込み優先度

CFG_INTに指定可能な割込み優先度としては，以下の値を設定可能である．

V850E2M : -1 〜 -15 
V850E2S : -1 〜 -7
G3M     : -1 〜 -15 
G3K     : -1 〜 -7


○割込み属性

CFG_INTでサポートしている割込み属性はない．


○未登録の割込み

未登録の割込みが発生した場合は，prc_config.c で定義されている，
default_int_handler() を呼び出す．default_int_handler() は，発生した割
り込みの割込み番号をコンソールに出力した後，target_exit() を呼び出す．


○C1ISRの扱い

・C1ISRにはユーザによって以下の処理が記述されるべきである．
    ・C1ISRで使用するレジスタの内容を退避
    ・C1ISRが実行中であることを判別するための情報を保存する
        ・現在の実装ではiipm
    ・退避したレジスタの復帰
    ・eret命令でC1ISRを終了する


○CPU例外要因情報取得

・CPU例外発生した場合，ユーザは，プロテクションからCPU例外情報を取得で
  き，取得できるのは，CPU例外発生時の以下の情報がある．
    ・CPU例外要因番号(変数：v850_cpu_exp_no)
    ・プログラムカウンタ(変数：v850_cpu_exp_pc)
    ・スタックポインタ(変数：v850_cpu_exp_sp)
        ・更に，CPU例外発生時に各レジスタはスタックに保存しているので，
          v850_cpu_exp_spを使って保存してあるレジスタの値を取得するこ
          とができる．保存してあるレジスタとアドレスの情報はアセンブリ
          コードを参照する．

・しかし，プロテクションフック無効の場合，上記のCPU例外要因保持用変数が
  定義されないため，使用しないでください(使用した場合，コンパイルエラー
  となる)．


○制限事項

ep相対でアクセスするtinyデータセクションはサポートしない．


○変更履歴
2015/04/10
・prc_common.tf
  割込み優先度レベルの変更の追従忘れ

2015/04/07
・Platform_Types.h
  stdint.h をインクルードするよう変更．

2015/04/01
・割込み優先度のレベルをG3M/E2Mは16段階に，G3K/E2Sは8段階に修正．

2015/03/31
・prc_support.S/prc_insn.h
  PSW.EBV，EBASE，INTBP，ISPR，PMR，ICSR，INTCFG の更新時はdi状態とす
  る必要があるため，該当箇所を修正．
  
2015/01/07
・prc_support.S
  _ei_exception_entry で保存していないr20を使用していた問題を修正．

2014/12/24
・prc.tf，prc_config.c，prc_insn.h，prc_support.S
  V850E3v5におけるEIレベル割込みを直接ベクタ方式からテーブル参照方式へ変更．
  ※v850-elf-objdump -d 実行時，Segmentation faultが発生するが，実行モ
    ジュールの生成には問題ない．正しく生成するためには，
    v850-elf-objdumpに以下のオプションを追加する．
    --architecture=v850-rh850

2014/12/10
・start.S
  dataセクションの初期化の終了条件を__idata_endのアドレスは初期化しな
  いように修正．

2014/12/09
・コンパイラをKPITから公開されている4.9に変更．
・CS+でデータセクションを正しくロードするため，VMAをLMAに上書きするス
  クリプトを追加．

2014/12/05
・v850e2v3において，PMRを設定した後にSYNCMを実行するように変更．
・v850e2v3の対象コンパイラをv850e3v5と合わせて4.9系に変更．

2014/12/04
・prc_config.h
  x_set_ipm()でPMRを変更していたが，OS割込み禁止もPMRで実現されている
  ため，API実行中に割込みがOS割込み禁止以下の値となってしまう問題を修
  正．

2014/11/15
・prc_support.S
  _interruptで多重割込みで破壊されるr2を使用していた問題を修正．
  
2014/11/05
・tauj_hw_counter.c
  ハードウェアカウンタとして使用するTAUJのチャネルを変更できるように変
  更．

2014/10/23
・Makefile.prc
  ・コアタイプ(RH850G3K や RH850G3M)をターゲット依存部から受け取り，
    RH850G3Kの場合は，コンパイルオプションに -msoft-float を追加．
    RH850G3MかつUSE_HFLOATが指定された場合は，FPUを有効にするためのマ
    クロとコンパイルオプションを有効にする．定義されていなければ，
    -msoft-floatとする．

2014/10/17
・prc_support.S
  ・アイドル時にdiにより割り込みを禁止してからhaltを呼び出すように変更．

2014/10/15
・prc_support.S
  ・ベクタテーブルから例外に応じて，_fe_exception_entry/ 
    _ei_exception_entry を呼び出すように変更．
  
2014/10/14
・prc_support.S
  ・アイドル時にhaltを呼び出すように変更．
  ・ディスパッチャのアイドルループにおいて，callevelを変更しないように修正．
  ・IPSRを変更後，syncpを呼び出すように変更．
  
2014/10/10
・prc_support.S
  dispatch_r で r30(ep)の復帰時のベースアドレスに更新したspを使用して
  た問題を修正．

2014/09/25
・v850e2_fx4.h ターゲット依存部で定義した型番からコアのタイプの指定マ
  クロ(_V850E2M_ or _V850E2S_)を定義するよう変更．

2014/09/14
・PMRを変更した後は，"syncp"を実行して設定が反映されるのを同期するよう
  に変更．

2014/09/08
・RLIN3 UART ドライバのポートを変更可能に．

2014/08/19
・V850のターゲット指定を-mv850e2に変更．-mv850e2v3だと以下の問題が発生
  するため．
  ・アセンブラファイルに書かれたbranch命令が32bit命令としてアセンブルされる．
  ・不正な命令が出力される
      trncf.sw r8,r8
  
2014/07/17
・RH850のサポートの追加．

2014/07/15
・prc_support.S
 ・int_nestedでisrcb_tableのアドレスの取得に問題があったため修正．
 ・割込み・ディスパッチャで保存する復帰するレジスタの変更．
 
2014/07/10
・start.S
  hardware_init_hookとsoftware_init_hookへのジャンプをラベル経由ではな
  く，レジスタ経由に変更．
・ターゲット依存部の名称変更
  v850e2_xxx から v850_xxx に変更      
・V850E3V5のサポート
  ・マクロ __v850e2v3__ と __v850e3v5__ により切り分け
  ・割込みコントローラに対するアクセスを関数やマクロ経由に変更  
    ・V850E3V5ではコアと統合されているためアクセス方法が異なる．
・tfのベクターテーブルの出力用コードをCX版と共有するために，出力用コード
  prc_common.tfにまとめ，Os_Lcfg_asm.Sに出力するように変更．
・prc_support.Sをcxとツール変換で共有するために変更．
  ・prc_support.S/start.S/v850asm.inc

2014/07/09
・prc_support.S で Lea で 32bit即値をロードしていた箇所を mov に変更．

2014/02/26
・ディスパッチャと割込みの出入口で保存・復帰するレジスタの修正．
  割込み出入口 : r2,r5を保存するよう変更
  ディスパッチャ : r31, r2, ep(r30)を保存しないように変更
・割込み出口処理で current_iintpri を常に元の値に戻すように変更．

2014/01/10
・静的APIファイルを削除

2013/10/01
・prc_support.S
  OUTER_LOCK_OS_INT において，以下の命令を2回実行していたが，1回でよい
  ため，2回目を削除．
      Lea     _pmr_isr2_mask, AMARG(reg13)
  ei_exception_2/fe_exception_2 において，_kerflgのアドレスを読み込ん
  だ後，内容を読み込まずに比較していた問題を修正．
  
2013/09/17
・V850E2Sをサポートしたため，アーキテクチャ依存部の名称を v850e2m から 
  v850e2 に変更．
・コアのマクロをv850e2_fx4.h  v850e2_px4.h で定義するように変更．それ
  に伴い，v850e2_fx4l.h を追加．

2013/09/14
・コアのマクロを追加
  _V850E2S_
  _V850E2M_

2013/08/31
・CubeSuite+のバージョンを更新．

2013/08/07
・0x50 : EIレベルソフトウェア例外 と 0x70 : 浮動小数点演算例外  で，
_ei_exception_entry を呼び出すように修正．

2013/06/24
・prc_support.S prc_def.csv prc_offset.tf 
  ・割込みのエントリでの多重割込み時のスタックのチェック方法を スタック
    残量チェック方式 に変更．
・uart.c
  ・"Os_Lcfg.h" をインクルードするよう変更．

2013/04/23
・100ナノ秒単位で時間計測可能な get_tim_100ntime() を追加．
  ・タイマの分周比を2^5から2^0に変更．
・SystemTime100NsType を追加(uint32)

2013/04/20
・uart.c 
  ・プリスケーラｰの設定値をターゲット依存部で定義できるように変更．
・taua_timer.c
  ・カウント値をターゲット依存部で定義できるように変更．
・v850e2_fx4.h
  ・FG4用の定義を追加．
  ・カウント値を削除．
・v850e2_fx4.c
  ・write_protected_reg()で保護レジスタを書き込む時にdi/eiを無条件で実
    行していた問題を修正．    
・v850e2_px4.h
  ・カウント値を削除．

2013/04/18
・get_tim_utime()
  ・タイマのオーバーフロー時の扱いに問題があったため修正．
・target_timer_get_current()
  ・ハードウェアの仕様はダウンカウントであるが，アップカウントとしてコ
    ードが記述されていたため修正．

2013/03/25
・start_r で ei をしていたが，必要無いため削除．

2013/02/05
・CHECK_STKSZ_ALIGN/CHECK_FUNC_ALIGN/CHECK_STACK_ALIGN が他の箇所で定
  義されていれば定義しないように変更．

2013/02/01
・最初のリリース．
        
以上．
