= 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.10 2007/05/30 03:57:10 honda Exp $ ------------------------------------------------------------------------ このドキュメントでは,TOPPERS/JSP M32R版について解説する. 1. 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の精度でカーネルタイマを駆動する. 2. M32R環境に依存した機能 この節では,カーネルおよびシステムサービスの機能の中で,M32R環境依存の 部分について解説する. 2.1 データ型 int型 および unsigned int型のサイズは32ビットである.割込み優先度を表 現する型 IPR は符号なし8ビット整数である. 3. システムに依存した機能 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)。 4.開発環境の構築 開発環境の構築方法については,GNU開発環境構築マニュアルを参照すること. 本CPUを識別するためのターゲット名は m32r-elf である. 5.その他 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] +- ... 6.バージョン履歴 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 ・最初のリリース