
           ＝ TOPPERS/JSPカーネル ユーザズマニュアル ＝
               (M32R ターゲット依存部)

           （Release 1.4.3 対応，最終更新: 29-Mar-2007）

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

 Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                             Toyohashi Univ. of Technology, JAPAN
 Copyright (C) 2007 by Embedded and Real-Time Systems Laboratory
             Graduate School of Information Science, Nagoya Univ., JAPAN

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

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

 @(#) $Id: m32r.txt,v 1.1 2008/06/17 00:04:40 suikan Exp $
------------------------------------------------------------------------


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

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

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

M32Rプロセッサのターゲットシステムとしては，以下のものをサポートしてい
る．

	・ルネサステクノロジ M3A-ZA36 (M32102)
	・ルネサステクノロジ M3A-2131 (M32102)

開発環境には，GCCなどのGNU開発環境を用い，オブジェクトファイルフォーマッ
トはELFを標準とする．

TOPPERS/JSP M32Rの開発は 次の環境で行われている．

	・GNU gcc-4.1.2
	・GNU binutils-2.17
	・GNU gdb-6.6

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

    ・多重割込み

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

    ・chg_ipm 

	  M32R環境では，chg_ipm(割込みマスクレベルの変更)をサポートする．
      タスク内でchg_ipmを利用してマスクレベルを変更した場合，実行した
      タスクでのみ変更が有効となる (ディスパッチ時に割込みマスクを退避
      /変更する)．

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

    ・vxget_tim

	  M32R環境ではvxget_timをサポートしない．

    ・ena_int, dis_int
	
      M32R環境ではユーザによる割込み許可・禁止は行えないものとしている．
      ただし，ena_int/dis_intは，loc_cpu/unl_cpuの別名として存在する．

    ・タイマティックは1ms

      TOPPERS/JSP M32Rでは，1msの精度でカーネルタイマを駆動する．


２. M32R環境に依存した機能

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

2.1 データ型

int型 および unsigned int型のサイズは32ビットである．割込み優先度を表
現する型 IPR は符号なし8ビット整数である．


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

3.1 メモリマップ

・M3A-2131

  0x00000000 - 0x0000020f : ベクタテーブル, EITハンドラの一部 (FLASH ROM)
  0x00000210 -            : 未使用 (FLASH ROM)
  0x00f00000 - 0x00f0ffff : プログラム + システムスタック (内蔵RAM)
  0x01000000 - 0x017fffff : データ (外部SDRAM 8MB)

M3A-2131依存部では，デフォルトで内蔵RAM上にプログラムを配置するように
なっている．内蔵RAM上にプログラムを配置するためには，ベクタテーブル
(0x00000000-0x0000020f)領域を，0xFF3C0000 (BRA PC+0x00F00000)で埋める
必要がある．

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

M3A-2131依存部では，システムスタックを除くすべてのデータを外部SDRAM に
配置することをデフォルトとしている．配置を変えるためには．M3A-2131用リ
ンカスクリプトファイル(jsp/config/m32r/m3a2131/m32relf.ld)を修正す
ればよい。

・M3A-ZA36

  0x00f00000 - 0x00f0ffff : プログラム + システムスタック（内蔵SRAM）
  0x04000000 - 0x047fffff : データ（外部SDRAM 64MB）

M3A-ZA36依存部では，内蔵SRAM上にテキストセクションを配置ことを標準とし
ている．スタック領域は，外部SDRAM領域の0x04100000番地からアドレス値が
減少する方向へ進む．

データ領域は，SDRAMの先頭番地0x04000000からアドレス値が増加する方向へ
確保される．そのため，カーネルをロードする際には，予めデバッガ等で
SDRAMを初期化しておく必要がある．

メモリ配置を変えるためには，M3A-ZA36用リンカスクリプトファイル
(jsp/config/m32r/m3a_za36/m32relf.ld)を修正すればよい．


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

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

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

TOPPERS/JSP M32R環境ではいくつかの制御レジスタを参照している．これらは
全てシステム依存部用ディレクトリのsys_defs.hで定義されている．利用者は
必要に応じてこれらの値を修正すること．

3.2.2 タイマー値の設定

TOPPERS/JSP M32R環境では標準で1msごとに割込みを発生させている．

割込みを発生させるまでの時間は，タイマコンペアレジスタの値をマニュアル
にしたがって，TIMER_CLKCNTを調整することで変更できる．

・m3a2131

config/m32r/m3a2131/sys_config.h

/* M3A-2131 66MHz で 115.2kbps */
#define TIMER_CLKCNT	(16667*2)
#define TIMER_PORT		5

・m3a_za36

config/m32r/m3a_za36/sys_config.h

#define TIMER_CLKCNT		1250		/* 10MHz で 57600bps */
#define TIMER_PORT			4

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

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

3.2.3 RAM開始番地の設定

m32relf.ldのMEMORY部の内容を修正することで，メモリのサイズおよび位置を
変更できる．また，各セクションの末尾にある"> iram"を"> eram"に変更する
ことで，セクション毎に配置する位置を変更できる．

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

起動時に設定される初期スタックポインタ(割込みスタックポインタ)の番地は
m32relf.ldの__stackに記述されている．この__ stackには4バイトアラインさ
れた値を格納する．

M3A-ZA36の初期スタックポインタは，以下のように設定されている．

PROVIDE(__stack = 0x04100000);

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

3.2.5 その他の設定

    ・使用するタイマユニットの番号
        config/m32r/(sys)/sys_config.h: TIMER_PORT宣言
            使用するタイマユニット番号を定める。デフォルトは5。標準の状
            態では、この宣言を修正するだけで、割込み番号やレジスタアドレ
            スなども修正される。

    ・コンソールに使用するUARTユニットのID
        config/m32r/(sys)/sys_config.h: CONSOLE_PORTID宣言
            コンソールとして使用するUARTユニットIDを指定する。UARTユニッ
            トIDは1から始まることに注意。デフォルトは1。

    ・割込み要因の最大数
        config/m32r/(sys)/sys_config.h: NUM_INTERRUPT宣言
            割込みベクタテーブルを作成するための割込み要因の最大数を設定
            する。デフォルトは64 (0-63)。


４．開発環境の構築

開発環境の構築方法については，GNU開発環境構築マニュアルを参照すること．
本CPUを識別するためのターゲット名は m32r-elf である．

５．その他

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

[jsp]
  +- [doc]
  |   +- m32r.txt  : このファイル
  +- [config]
      +- [m32r]
          +- cpu_config.c    : プロセッサ依存モジュール
          +- cpu_config.h    : プロセッサ依存モジュール
          +- cpu_context.h   : タスクコンテキスト操作ルーチン
          +- cpu_defs.h      : CPU依存情報(割込み/例外番号など) 定義ファイル
          +- cpu_support.S   : CPU依存アセンブリ言語コーディング部
          +- m32rasm.inc     : アセンブラ用インクルードファイル
          +- m32r.h			 : レジスタマップ (M32R 共通)
          +- Makefile.config : CPU依存Makefile
          +- makeoffset.c    : 構造体オフセット位置取得用
          +- start.S         : スタートアップ / 割込みハンドラ
          +- cpu_rename.h    : シンボル名衝突回避ヘッダ
          +- cpu_unrename.h  :  同上
          +- cpu_rename.def  : 衝突回避対象シンボル定義ファイル
          +- tool_defs.h     : 処理系依存部
          +- tool_config.h   : トレースログ機能定義ファイル (非対応)
          +- [m3a_2131]
              +- hw_serial.h     : シリアル操作 (M32R内蔵非同期SIO)
              +- hw_serial.c     :  同上
              +- hw_timer.h      : タイマ操作   (M32R内蔵タイマ)
              +- m32relf.ld      : M3A-2131専用リンカスクリプト
              +- Makefile.config : システム依存Makefile
              +- sys_config.h    : システム依存モジュール
              +- sys_config.c    : システム依存モジュール
              +- sys_defs.h      : システム依存定義ファイル
              +- sys_support.S   : システム依存アセンブラ部
              +- sys_rename.h    : シンボル名衝突回避ヘッダ
              +- sys_unrename.h  :  同上
              +- sys_rename.def  : 衝突回避対象シンボル定義ファイル
          +- [m3a_za36]
			  +- ...


６．バージョン履歴

    2007年05月28日  Release 1.4.3
        ・cpu_support.Sのタスク例外起動判定処理を修正
        ・m3a-2131g50のディレクトリ名をm3a_2131に変更
        ・m3a-2131のSDRAM初期化処理を修正
        ・M32R共通のレジスタマップをm32r.hとしてプロセッサ依存部に置く
    2007年04月22日  Release 1.4.2
        ・cpu_support.Sでenadspを実装できていない問題を修正．M3A-ZA36 
          のサポートを追加．
    2003年06月17日  Release 1.4β
        ・共通部がいくつか変更になったので、それに合わせる
    2003年04月21日  Release 1.4α
        ・TOPPERS/JSP rel 1.4αにあわせこむ作業を行う
    2002年08月09日  Release 1.2
        ・VDECセミナーで勉強した成果を反映．32ビットシンボルロードを
          shigh/low擬似命令に変更
    2002年08月06日  Release 1.1
        ・lock_cpu/unlock_cpuのインラインアセンブリ記述部で破壊される
          レジスタのリストを書くのを忘れていたのを修正
        ・一部アセンブリ言語部のラベル付けを修正し、デフォルトコンパイ
          ルオプションを-O0から-O2に
        ・コードの一部に "V850" の記述があったのを修正
    2002年04月15日  Release 1.0
        ・M32R依存部 正式リリース
    2002年03月10日  Release 0.2
        ・クロックを66MHzに．使用タイマを0->5へ．
        ・ドキュメント整備
    2002年03月01日  Release 0.1
        ・最初のリリース
