= TOPPERS/JSPカーネル ユーザズマニュアル = (TLCS900 ターゲット依存部) (Release 1.4.4対応,最終更新: 19-May-2011) ------------------------------------------------------------------------ TOPPERS/JSP Kernel Toyohashi Open Platform for Embedded Real-Time Systems/ Just Standard Profile Kernel Copyright (C) 2006-2010 by Witz Corporation, JAPAN The above copyright holders grant permission gratis to use, duplicate, modify, or redistribute (hereafter called use) this software (including the one made by modifying this software), provided that the following four conditions (1) through (4) are satisfied. (1) When this software is used in the form of source code, the above copyright notice, this use conditions, and the disclaimer shown below must be retained in the source code without modification. (2) When this software is redistributed in the forms usable for the development of other software, such as in library form, the above copyright notice, this use conditions, and the disclaimer shown below must be shown without modification in the document provided with the redistributed software, such as the user manual. (3) When this software is redistributed in the forms unusable for the development of other software, such as the case when the software is embedded in a piece of equipment, either of the following two conditions must be satisfied: (a) The above copyright notice, this use conditions, and the disclaimer shown below must be shown without modification in the document provided with the redistributed software, such as the user manual. (b) How the software is to be redistributed must be reported to the TOPPERS Project according to the procedure described separately. (4) The above copyright holders and the TOPPERS Project are exempt from responsibility for any type of damage directly or indirectly caused from the use of this software and are indemnified by any users or end users of this software from any and all causes of action whatsoever. THIS SOFTWARE IS PROVIDED "AS IS." THE ABOVE COPYRIGHT HOLDERS AND THE TOPPERS PROJECT DISCLAIM ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, ITS APPLICABILITY TO A PARTICULAR PURPOSE. IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS AND THE TOPPERS PROJECT BE LIABLE FOR ANY TYPE OF DAMAGE DIRECTLY OR INDIRECTLY CAUSED FROM THE USE OF THIS SOFTWARE. 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・ 再配布(以下,利用と呼ぶ)することを無償で許諾する. (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権 表示,この利用条件および下記の無保証規定が,そのままの形でソース コード中に含まれていること. (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用 できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保 証規定を掲載すること. (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用 できない形で再配布する場合には,次のいずれかの条件を満たすこと. (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作 権表示,この利用条件および下記の無保証規定を掲載すること. (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報 告すること. (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害 からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 により直接的または間接的に生じたいかなる損害に関しても,その責任を負 わない. @(#) $Id: tlcs900.txt,v 1.3 2007/05/21 01:21:47 honda Exp $ ------------------------------------------------------------------------ 1 TLCS900 ターゲット依存部の概要 1.1 ターゲットシステムと開発環境 TLCS900プロセッサのターゲットシステムは,タマデン工業株式会社のZup-F16 拡張ボードとをサポートしている.Zup-F16拡張ボードはTMP91CY22-CPUを搭載 している. 1.2 開発環境と実行環境 Zup-F16拡張ボードキットに同梱されているCD-ROM中の東芝セミコンダクタ社製 の開発環境(TOSHIBA IDE)を使用して開発を行う. JSP1.4.4のWindows版(文字コードSJIS 改行コードCRLF)実行が可能でシリアル ポートをもつパソコンがあれば,構築,ボード上実行が可能である. 1.3 サポートする機能の概要 割込みマスクの変更・参照 (chg_ixx, get_ixx)はサポートしているが,性能 評価用システム時刻参照機能 (vxget_tim) ,割り込みの禁止と許可 (dis_int,ena_int) はサポートしていない. 1.4 他のターゲットへのポーティング TLCS900シリーズであればシステム依存部の修正のみでポーティングが可能と 思われる.また,他のシリーズのCPUでも構造が大きく違っていなければ,容 易にポーティングは可能である.なお,テスト環境の都合上,Zup-F16拡張ボ ード以外での動作確認は行っていない. 1.5 シリアルポート (SIO) ボード上はUART1が実装されている.ポーティングにおいては,UART0/1両方 とも動作可能なように配慮しているが,動作確認はUART1のみ行っている. シリアルポートの設定は以下の通りである. ・ボーレイト:19200bps ・データ長:8 ビット. ・ストップビット:1 ビット ・パリティ:なし 1.6 対象とする文字コードと改行コード Windows版(文字コードSJIS 改行コードCRLF)を対象としている.なお,コン フィギュレータ cfg.exe を後述のMinGWでビルドする場合は,文字コードEUC 改行コードLFであることがのぞましい.このため,cfg以下のソースコードを, 文字コードEUC改行コードLFに変換するか,標準版(文字コードECU 改行コード LF)のcfg以下でビルドした cfg.exeをコピーして利用することを推奨する. 2 TLCS900 プロセッサ依存部の機能 この節では,カーネルおよびシステムサービスの機能の中で,TLCS900依存の 部分について解説する. 2.1 データ型 int 型と unsigned int 型のサイズは 16ビットである.また,_int64_は対応 していない.ポインタ型のサイズは 32ビットである. 2.2 割込み管理機能と割込みハンドラ カーネル管理外の割込みは NMI のみである.CPUロック状態や初期化ルーチン 内では NMI 以外の割込みは全て禁止される.具体的には,割込みマスクが7 に設定される. 割込みハンドラはCPUの設定位置に静的に配置される.本開発環境ではコンフィ ギュレーションから生成されるkernel_cfg.cの内容を識別し,自動的に静的な 割込みハンドラを生成するユーティリティを用意している.このユーティリテ ィはutils/tlcs900-toshibaデレクトリィ中のtlcs900vec.exeコマンドで,プリ コンパイルされたkernel_cfg.cの内容を解析し割込みベクタテーブルファイル であるtlcs900vec.incを生成する.tlcs900vec.incはCPUのスタートアップモ ジュールであるstart.appにインクルードされており,コンフィギュレーション ファイルの割込みハンドラ設定をROM上に静的に配置する. なお,割込みハンドラが登録されなかった割込み要因には,未使用割込み処理 _unused_interrupt が登録される.また,割込み要因番号1はスタートアップ 処理 _start が登録される. DEF_INH で指定する割込みハンドラ番号(inhno)は,TMP91CY22 でのベクタ値 を表し,そのデータ型(INHNO)はunsigned int型に定義されている. DEF_INH で,ベクタ値として有効でない値や,外部割込みに対応しない値を指 定した場合の動作は保証されない. chg_ipm をサポートするために,割込みハンドラの出入口処理などにオーバヘッ ドを生じている.そこで,SUPPORT_CHG_IPM というマクロにより,これらのサー ビスコールをサポートするかどうかを切り替えられるようにしている. SUPPORT_CHG_IPM は,cpu_config.h の中でマクロ定義されている. TLCS900 依存の割込みマスクの変更・取得のためのサービスコールの仕様は以 下の通りである. (1) chg_ipm 割込みマスクの変更 【C言語API】 ER ercd = chg_ipm(IPM ipm); 【パラメータ】 IPM ipm 設定すべき IPM の値 【リターンパラメータ】 ER ercd エラーコード 【エラーコード】 E_CTX コンテキストエラー E_PAR パラメータエラー(ipm が不正) 【機能】 IPM(Interrupt Priority Mask)を ipm で指定された値に設定する.指定し た値が 0〜6 以外の場合,E_PARエラーとなる.IPM を 0〜6 に設定した場合 でも,ディスパッチは禁止されない.また,設定した IPM の値は,ディスパッ チ後も引き継がれる.ディスパッチを禁止したい場合には,dis_dsp と併用す ればよい. なお,このサービスコールを用いて,IPM を 7 (すべての割込みを禁止)に 設定することはできない.IPM を 7 にしたい場合には,loc_cpu を使うべき である. このサービスコールは,タスクコンテキストで CPUロック解除状態の時のみ呼 び出すことができる.非タスクコンテキストや CPUロック状態で呼び出した場 合には,E_CTXエラーとなる. (2) get_ipm 割込みマスクの取得 【C言語API】 ER ercd = get_ipm(IPM *p_ipm); 【パラメータ】 なし 【リターンパラメータ】 ER ercd エラーコード IPM ipm 現在の IPM の値 【エラーコード】 E_CTX コンテキストエラー 【機能】 現在の IPM(Interrupt Priority Mask)の値を読み出し,ipm に返す. このサービスコールは,タスクコンテキストで CPUロック解除状態の時のみ呼 び出すことができる.非タスクコンテキストや CPUロック状態で呼び出した場 合には,E_CTXエラーとなる. 2.3 CPU 例外管理機能と CPU 例外ハンドラ CPU例外として,ハードウェアノンマスカブル割込みとソフトウェアノンマスカ ブル割込みがある.ハードウェアノンマスカブル割込み中のリセットを除いて ハンドラの設定が可能である. CPU例外ハンドラは割込みハンドラと同様にCPUの設定位置に静的に配置される .CPU例外ハンドラに関しても割込みハンドラと同様にtlcs900vec.exeを用いて, 自動的に静的なCPU例外ハンドラを生成することができる.このデータは割込み ハンドラと同様にtlcs900vec.incに設定される. DEF_EXC で指定する割込みハンドラ番号(excno)は,M16Cでの例外ベクタ 番号を表し,そのデータ型(EXCNO)は unsigned int型に定義されている. DEF_EXC で指定するCPU例外ハンドラ番号(excno)は,TMP91CY22 でのベクタ 値を表し,そのデータ型(EXCNO)はunsigned int型に定義されている. DEF_EXC で,ベクタ値として有効でない値を指定した場合の動作は保証されな い. 2.4 スタートアップモジュール TLCS900 依存のスタートアップモジュール (start.app) は次に示す初期化を 実行した後,カーネル (kernel_start) を起動する.ただし, kernel_start から戻ってくることは想定していない. (1) 割込みの禁止 (2) スタックポインタの設定 (3) 割込みネストレジスタの初期化 (4) hardware_init_hook の呼出し hardware_init_hook が 0 でない場合には,hardware_init_hook を呼び出す. hardware_init_hook は,カーネルが起動される前に行う必要があるターゲッ ト依存の初期化を行うために用意している.hardware_init_hook がどこでも 定義されていない場合,リンカでこのシンボルを 0 に定義する(リンカスク リプト内に記述あり). (5) areaセクションと dataセクションの初期化 areaセクションをゼロクリアする.また,dataセクションを初期化する. (6) software_init_hook の呼出し software_init_hook が 0 でない場合には,software_init_hook を呼び出す. software_init_hook は,カーネルが起動される前に行う必要があるソフトウェ ア環境(具体的には,ライブラリ)依存の初期化を行うために用意している. software_init_hook がどこでも定義されていない場合,リンカでこのシンボ ルを 0 に定義する(リンカスクリプト内に記述あり). (7) カーネルの起動 kernel_start へ分岐し,カーネルを起動する.kernel_start からリターンし てくることは想定していない. 3 Zup-F16-ex システム依存部の機能 3.1 システムクロックドライバ システムクロックドライバがisig_timを呼び出す周期は,sys_defs.h中の TIC_NUMEとTIC_DENOで定義されている(標準は 1ミリ秒周期).この定義を変 更することで,isig_timを呼び出す周期を変更することができる.ただし,タ イマの精度が50μ秒程度であるため,50μ秒単位で端数になる値を設定した場 合には,isig_timの呼出し周期に誤差が生じることになる. 3.2 シリアルインタフェースドライバ Zup-F16拡張ボードではUART1のシリアルポートがボード上に実装されている. このためUART1をログ出力用に使用している. 3.3 メモリマップ 0x000000 - 0x0003ff 内部IO(SFR)領域 0x001000 - 0x004bff 内蔵 RAM area data 0x004c00 - 0x004fff 内蔵 RAM stack 0x100000 - 0x200000 外部 RAM 未使用 0xfc0000 - 0xfffeff 内蔵 ROM code const 0xffff00 - 0xffffff 内蔵 ROM vecter 4 開発 4.1 開発環境の構築 開発環境は,Windows XPを用いた.Zup-F16拡張ボードキットに同梱されている CD-ROM中の東芝セミコンダクタ社製の開発環境(TOSHIBA IDE)を使用して開発を 行う.なお,カーネル部のライブラリ化は行っていない. 使用した開発環境のバージョン TIDE 2.3.1.1 4.1.1 ツールの構築 utils/tlcs900-toshiba 上のツール tlcs900offset.exe と tlcs900vec.exe を 構築します. utils/tlcs900-toshiba 内の Microsoft Visual Studio 2010 ワークスペース ファイルtlcs900_toshiba.sln を開きます.ビルドメニューにてそれぞれのプ ロジェクトをビルドし,tlcs900offset.exe と tlcs900vec.exe を生成します. 必要に応じてビルドメニューのバッチビルドを使用するか,アクティブなプロ ジェクトの構成を使用してプロジェクトを変更し,リビルドを行ってください. なお、カーネル構築にあたっては、コンフィギュレータを使用します. コンフィギュレータのの構築方法は user.txt を参照してください. 4.1.2 サンプルプロジェクトのビルド Zup-F16拡張ボードキットに同梱されているCD-ROM中の東芝セミコンダクタ社 製の開発環境(TOSHIBA IDE)をインストールする.TOSHIBA IDE 起動し, tools/TLCS900-TOSHIBA内のTOSHIBA IDEワークスペースファイル TLCS900-TOSHIBA.tws を開きます.ビルドメニューよりリビルドを行います. アクティブなプロジェクトの構成によりtools/TLCS900-TOSHIBA/Zup-F16-ex 内の release または debug 階層に,ロードモジュールファイル Zup-F16-ex.h20 が生成されます. 4.1.3 フラッシュROMへの書込み Zup-F16拡張ボードキットに同梱されているCD-ROM中のタマデン工業株式会社 製のローダプログラムを任意の階層にコピーする.ローダプログラムを起動 する.この時使用するCOMポートの設定などをローダプログラムと同じ階層に ある設定ファイル FROMLoad.ini に設定する必要がある.パソコンとZup-F16 拡張ボードをシリアルクロスケーブルで接続し,Zup-F16拡張ボードの sw1 を B 側に設定して,Zup-F16拡張ボードの電源をONにする.ローダプログラムの ファイルメニューにて,前章で生成したロードモジュールファイルを指定し, 書込みボタンにてフラッシュROMへの書込みを行う. 4.1.4 sample1の実行 パソコンにシリアルターミナルを立ち上げてください. 設定は以下の通りです. ・ボーレイト:19200bps ・データ長:8 ビット. ・ストップビット:1 ビット ・パリティ:なし Zup-F16拡張ボードの sw1 を B の反対側に設定して,Zup-F16拡張ボードの 電源をONにすると sample1 が実行されます.sample1 の詳細は sample1.c ファイルのヘッダ部分を参照してください. 4.2 デバッカ 開発環境(TOSHIBA IDE)にはシミュレータデバッガが付属しているが,シリア ル通信のシミュレーション設定などを工夫しない限り,カーネル起動時のログ 出力処理にて送信完了待ち状態のまま無限ループしてしまう.このため,シリ アル通信機能を停止(少なくとも sys_config.c に実装されている sys_putc の処理実態は無効)にして動作させることで,動作が可能である.なお,これ はシミュレータデバッガでの動作を保障するものではない. 5 その他 5.1 ディレクトリ・ファイル構成 (1) config/tlcs900-toshiba api.h 非ライブラリィ化のための定義 cpu_config.c TLCAS900 CPU依存部の C 関数 cpu_config.h TLCAS900 CPU依存部のカーネル用定義 cpu_context.h TLCAS900 CPU依存部のコンテキスト操作 cpu_defs.h TLCAS900 CPU依存部のアプリケーション用定義 cpu_insn.h TLCAS900 CPU依存部の低レベル関数 cpu_rename.def カーネルの内部識別名のリネームとその解除の定義リスト cpu_rename.h カーネルの内部識別名のリネームの定義 cpu_support.app TLCAS900 CPU依存部のアセンブラ関数 cpu_unrename.h カーネルの内部識別名のリネーム解除の定義 kernel_inline_defs.h カーネル内部の inline 関数定義 makeoffset.c offset.inc 生成情報関数 start.app スタートアップモジュール tool_config.h 開発環境依存部のカーネル用定義 tool_defs.h 開発環境依存部のアプリケーション用定義 (2) config/tlcs900-toshiba/zup_f16_ex hw_serial.cfg Zup-F16-ex用SIOドライバのコンフィギュレーションファイル hw_serial.h Zup-F16-ex用SIOドライバ hw_timer.h Zup-F16-ex用タイマ操作ルーチン sys_config.c Zup-F16-exシステム依存部の C 関数 sys_config.h Zup-F16-exシステム依存部のカーネル用定義 sys_defs.h Zup-F16-exシステム依存部のアプリケーション用定義 sys_rename.def カーネルの内部識別名のリネームとその解除の定義リスト sys_rename.h カーネルの内部識別名のリネームの定義 sys_support.app Zup-F16-exシステム依存部のアセンブラ関数 sys_unrename.h カーネルの内部識別名のリネーム解除の定義 tmp91cy22.h 内蔵IO(SFR)および関連する定義 uart.c Zup-F16-ex用SIOドライバ実態の C 関数 uart.h Zup-F16-ex用SIOドライバ実態の定義 zup_f16_ex.lcf Zup-F16-ex用リンカコマンドファイル (3) tools/TLCS900-TOSHIBA TLCS900-TOSHIBA.tws 開発環境用ワークスペースファイル (4) utils/tlcs900-toshiba tlcs900_toshiba.dsw ユーティリティ開発用ワークスペースファイル 本階層の詳細は utils/tlcs900-toshiba にある readme.txt を参照. 以上