= TOPPERS/JSPカーネル ユーザズマニュアル = (TMS320C5402 ターゲット依存部) (Release 1.4対応,最終更新: 20-Dec-2003) ------------------------------------------------------------------------ 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 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation によって公表されている GNU General Public License の Version 2 に記 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 利用と呼ぶ)することを無償で許諾する. (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 権表示,この利用条件および下記の無保証規定が,そのままの形でソー スコード中に含まれていること. (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 の無保証規定を掲載すること. (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 用できない形で再配布する場合には,次のいずれかの条件を満たすこ と. (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 作権表示,この利用条件および下記の無保証規定を掲載すること. (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 報告すること. (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 本ソフトウェアは,無保証で提供されているものである.上記著作権者お よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. @(#) $Id: tms320c54x.txt,v 1.12 2003/12/24 07:43:20 honda Exp $ ------------------------------------------------------------------------ 1.C54x ターゲット依存部の概要 1.1 ターゲットシステムと開発環境 TMS320C54x DSP のターゲットシステムとしては,TMS320VC5402 DSP を搭載 したTEXAS INSTRUMENTS製の TMS320VC5402 DSP スタータ・キット(DSK) を サポートしている. 開発環境には,DSKにバンドルされている統合開発環境 Code Composer Studio 2.0 (CCS 2.0) を用い,オブジェクトファイルフォーマットは COFF となっている. 1.2 サポートする機能の概要 TMS320VC5402 の依存の機能として,性能評価用システム時刻参照機能(vxget_tim)を サポートしている.割込みの禁止と許可(dis_int, ena_int)はサポートしていない. 1.3 他のターゲットへのポーティング 現バージョンでは,TMS320C54x をサポートしている. 1.5 シリアルポート DSKボードに搭載されているシリアルポートは,カーネルのログ出力用に使用する. シリアルポートの設定は,データ : 8bit,Parity : none,Stop : 1bit である. カーネルログ用 ・TMS320VC5402 DSK COM : 1152000bps 1.6 ファーコールについて ファーコールについては,現在はサポートしていない.そのため,ディスパッチ, 割込み入り口処理において,拡張プログラムカウンタ(XPC)の保存,退避は行って いない. 2.TMS320VC5402 DSP 依存部の機能 この説では,カーネルおよびシステムサービスの機能の中で,TMS320VC5402 DSP 依存の部分について解説する. 2.1 データ型 TMS320C54x では,16ビット,32ビット 長のデータ型をサポートしている. int型および char型,short型のサイズは 16ビットである.long型は 32ビットである. 8ビット のデータ型がないため B, UB, VB が 16ビットになっており,注意が必要で ある. 2.2 オフセットファイルの生成 アセンブリ言語で記述されるプログラムから,C言語の構造体にアクセスする場合に 必要となるオフセット値をファイルに出力するために,JSPカーネルでは, genoffset を用意している.しかしながら,TMS320C54x では genoffset を使用する ことができないため,TCB 中のタスクコンテキストブロック(tskctxb)に含まれる pc 及び sp フィールドのオフセット値は固定となっている.そのため,TCB 中の ビットフィールドやデータ型に修正を加える場合, pc 及び sp のオフセット値に 注意が必要である.これは,2.1 データ型 の説明文と併せて考慮する. 2.3 割込み管理機能と割込みハンドラ カーネル管理外の割込みとしては, NMI がある.よって,CPUロック状態や初期化 ルーチン内では,NMI以外の割込みはすべて禁止されている.具体的には, ST1(ステータスレジスタ1)のマスカブル割込み禁止ビット(INTM : bit 11)が 1 に設定される. DEF_INH で指定する割込みハンドラ番号(inhno)は,C5402 では,割込みベクタポインタ (IPTR)からの各割込みベクタのオフセット値を右に2ビットシフト(4で除算)した値である. データ型(INHNO)は unsigned int型に定義されている. 2.4 CPU例外管理機能とCPU例外ハンドラ TMS320C54x DSPにはCPU例外がない. 2.5 スタートアップモジュール C5402 DSP 依存のスタートアップモジュール(start.S)では,次の初期化処理を行う. (A) ステータスレジスタの初期化とスタックポインタの初期化 最初に,マスカブル割込みの禁止する. 次に,直接アドレッシングにスタックポインタ(SP)を用いるコンパイラ互換モード に設定し,Cプログラムをサポートする. 次に,スタックポインタを STACKTOP に設定する.ここで割込みスタックポインタ に設定されたスタック領域は,カーネル起動後は非タスクコンテキスト用のスタック 領域として使われる.STACKTOP は,sys_surpport.S 部で定義することを定義して いる. (B) hardware_init_hook の呼出し hardware_init_hook が 0 でない場合には,hardware_init_hook を呼び出す. hardware_init_hook は,カーネルが起動される前に行う必要があるターゲット 依存の初期化を行うために用意している.hardware_init_hook がどこでも定義 されていない場合,リンカでこのシンボルを 0 に定義する(リンカコマンドファ イル c5402dsk.cmd 内に記述あり). (C) bssセクションと cinitセクションの初期化 bssセクションをゼロクリアする.また,dataセクションを初期化 (D) software_init_hook の呼出し software_init_hook が 0 でない場合には,software_init_hook を呼び出す. software_init_hook は,カーネルが起動される前に行う必要があるソフトウェア 環境(具体的には,ライブラリ)依存の初期化を行うために用意している. software_init_hook がどこでも定義されていない場合,リンカでこのシンボルを 0 に定義する(リンカコマンドファイル内に記述あり). (E) カーネルの起動 kernel_start へ分岐し,カーネルを起動する.kernel_start からリターンして くることは想定していない. 3.システム依存部の機能 3.1 システムクロックドライバ システムクロックドライバが isig_tim を呼び出す周期は,sys_defs.h 中 の TIC_NUME と TIC_DENO で定義されている(標準は 1 ミリ秒周期).この定義を 変更することで,isig_tim を呼び出す周期を変更することができる.ただし, タイマの精度が 1μ秒であるため,1μ秒単位で端数になる値を設定した場合 には,isig_tim の呼出し周期に誤差が生じることになる. 3.2 性能評価用システム時刻参照機能 TMS320VC5402 DSP 依存部では,性能評価用システム時刻参照機能(vxget_tim)を サポートしている.性能評価用システム時刻の精度は,1μ秒単位である.なお, SYSUTIM型は UW型(32ビットの符号無し整数型)に定義している. 3.3 シリアルインタフェースドライバ TMS320VC5402 DSK シリアルインタフェースドライバは,DSK ボード上の TL16C550CFN のUARTをサポートしている. 3.4 メモリマップ ・C5402 DSK 依存部では,コード領域を 0x4000 〜 0xFFFF 約96KB,データ領域を 0x0080 〜 0x3FFF 約32KB,非タスクコンテキスト用のスタック領域を 〜 0x3FFF に確保し ている.コード領域の 0xFF80 〜 0xFFFF は,割込みベクタテーブル領域として 使用している.また,0x0060 〜 0x007F をスクラッチパッド領域として確保して いる.スクラッチパッド領域では,メモリ マップド レジスタ アドレッシング を使用することができる. 4.開発環境の構築 開発環境には,統合開発環境 CCS (2.0) と Windows シミュレーション環境を用 いる.それぞれの開発環境の構築方法については,CCS のドキュメントおよび, Windows シミュレーション環境構築マニュアルを参照のこと.なお,CCS (2.0) のインストールは c:\ti のディレクトリに行うことを前提として説明を行う. 4.1 開発環境の概要 4.1.1 ライブラリ関数 TMS320C54x では,除算,32ビット乗算にライブラリ関数を用いている.しかし, ライブラリをプロジェクトに組み込んでビルドすると,start.S のスタートアップ ルーチンが使用できなくなる.そのため,ライブラリのソース (rts.src) からい くつかの関数のソース・ファイルを抽出してプロジェクトに追加する必要が生じる 場合がある.以下のコマンドでソース・ファイルを抽出することができる。 ar500 -x rts.src xxx.asm yyy.asm zzz.asm c:\ti\c5400\cgtools\bin\ ar500.exe c:\ti\c5400\cgtools\lib\ rts.src サンプルプログラムでは,ldiv.asm, udiv.asm, lmpy.asm の3つのファイルが 必要となる.これらのファイルの抽出例が jsp\C5402DSK\configure.vbs にあ るので参考にしてほしい. 4.1.1 コンフィギュレータのビルド コンフィギュレータは,Windowsシミュレーション環境の cfg.exe を用いる. cfg.exe のビルド方法は Windows環境の方を参照されたし 4.1.3 コンフィギュレータの制限事項 CCS では空のオブジェクトは作れないため,cfg のオプションとして --ZERO "x y[1]" を指定する必要がある.サンプル以外のコンフィギュレーションファイルを利 用する場合,コンフィギュレータに kernel_id.h と kernel_cfg.c を作成さ せる必要がある.具体的なオプションについては,Windows シミュレーション 環境構築マニュアルを参照のこと. なお,コンフィギュレータの具体的な使用例が jsp\C5402DSK\configure.vbs にあるので参考にしてほしい. 4.1.2 Code Composer Studio 2.0 (CCS 2.0) における TOPPERS/JSP のビルド まず,jsp のアーカイブファイルを c:\ti\myprojects\ に展開する.次に c:\ti\myprojects\jsp\C5402DSK (以下ここを\jsp\C5402DSKとする)にあるス クリプトファイル, c:\ti\myprojects\jsp\C5402DSK> configure.vbs を実行することにより,sample1.cfg, sample1.h, sample1.cコピー,コンフィ ギュレータによるkernel_id.h, kernel_cfg.cの生成,さらに ldiv.asm, lmpy.asm, udiv.asm の抽出が行われる.これらのファイルは \jsp\tools\C5402DSK に作成される. \jsp\tools\C5402DSK\ccs_project 内にあるサンプルプログラムのプロジェクトファ イル TOPPERS.pjt を CCS から開くと,既にビルドに必要な設定を終えた状 態になっている. CCS からビルドを行うと \jsp\tools\C5402DSK に TOPPERS.out が生成されるので,こ れをターゲットボードにダウンロードすれば実行可能となる.ターゲットとの シリアル通信の速度は 115200bps である. 5.その他 5.1 ディレクトリ・ファイル構成 c:\ti\myprojects\jsp\tools\C5402DSK configure.vbs kernel_cfg.c kernel_id.h 生成のためのバッチファイル \ccs_project\ccs_project.pjt CCS 2.0 プロジェクトファイル c:\ti\myprojects\jsp\config\tms320c54x c54x.h TMS320C54x の定義 cpu_support.S プロセッサ依存部のサブルーチン cpu_config.c プロセッサ依存部の関数 cpu_config.h プロセッサ依存部の構成定義 cpu_context.h コンテキスト操作 cpu_defs.h プロセッサ依存部のアプリケーション用定義 start.S スタートアップモジュール vectors.S 割込みベクタテーブル hw_timer.h タイマ操作ルーチン cpu_insn.h 低レベルプロセッサ操作ルーチン cpu_rename.def カーネルの内部識別名のリネーム定義 cpu_rename.h カーネルの内部識別名のリネーム cpu_unrename.h カーネルの内部識別名のリネーム解除 tool_defs.h 開発環境依存部のアプリケーション用定義 tool_config.h 開発環境依存部の構成定義 api.h APIガード通過用定義ファイル c:\ti\myprojects\jsp\config\tms320c54x\c5402dsk c5402dsk.cmd リンカコマンドファイル hw_serial.h シリアルインタフェースデバイス操作ルーチン hw_serial.cfg SIOドライバのコンフィギュレーションファイル c5402dsk.h C5402 DSK ハードウェア定義 sys_config.c システム依存部の関数 sys_config.h システム依存部の構成定義 sys_defs.h システム依存部のアプリケーション用定義 sys_support.S システム依存部のサブルーチン sys_rename.def カーネルの内部識別名のリネーム定義 sys_rename.h カーネルの内部識別名のリネーム sys_unrename.h カーネルの内部識別名のリネーム解除 tl16c550cfn.c 簡易SIOドライバ tl16c550cfn.h 簡易SIOドライバ関連の定義