
        ＝ TOPPERS/JSPカーネル ユーザズマニュアル ＝
            （Xstormy16 ターゲット依存部）

             （Release 1.4.3対応，最終更新: 06-Apr-2007）

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

 Copyright (C) 2000-2005 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プロジェクトは，本ソフトウェアに関して，その適用可能性も
 含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
 接的または間接的に生じたいかなる損害に関しても，その責任を負わない．

------------------------------------------------------------------------

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

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

TOPPSER/JSP公式公開版でのXstormy16プロセッサのターゲットシステムとして
は、「三洋マイコン 開発ツール(Xstormy16シリーズ)」のEVAデバッガのエミュ
レーション環境をサポートしている。
「三洋マイコン 開発ツール(Xstormy16シリーズ)」は以下から入手できる。
http://www.semic.sanyo.co.jp/micon/jpn/index.html
この中にCコンパイラ等も含まれる。
Xstormy16シリーズの各CPUに対応したTOPPERS/JSP関連のファイルは、上記に随
時追加されるので、非エミュレーション環境での動作や実際の製品開発を行う
場合は、上記から入手できる最新版のファイルを使用する必要がある。
また、上記開発ツール中には、TOPPERS/JSPをベースにいくつかの修正を行った
ものが、ソースおよびコンパイル済みのライブラリの形で納められているので、
カーネル自身を修正・再コンパイルする必要がないのであれば、上記開発ツー
ルをダウンロード・インストールするのみで、TOPPERS/JSPを利用できる。

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

Xstormy16では、JSPで拡張された以下の機能はサポートしていない。
(1) 割込みマスクの変更・参照(chg_ixx/get_ixx)
(2) 割込みの禁止と許可(dis_int/ena_int)
(3) 性能評価用システム時刻参照機能(vxget_tim)
Xstormy16では、割り込みの許可・禁止およびレベル(優先度)がSFR(IL1L-IL2H)
で管理されているため、上記APIに適合しない。これらの変更はSFRへの設定に
よって変更する必要がある。

1.3 他のターゲットへのポーティング

Xstormy16シリーズの(LC590200を除く)全てのCPUではCPUコア自身の機能および
タイムスティック供給用のタイマは同一の仕様で実装されている。またSIOも実
装されている機種では全て同一の仕様となっているので、他のターゲットへの
ポーティングを行う時に、カーネル自身は修正する必要はない。
実装されているメモリサイズに応じたリンカースクリプト等、ターゲット毎に
修正が必要なファイルは、上記「三洋マイコン 開発ツール(Xstormy16シリーズ)」
に含まれているので、これを使用する。

1.4  シリアルポート (UART)

EVAデバッガでは、エミュレーション環境・非エミュレーション環境ともにUART0
とUART1の2本のシリアルポートを持つ。また、実CPUでも同様の仕様でUARTを持
つ機種がある。
TOPPERS/JSPのログ出力、およびprintf()/scanf()等の標準入出力には、この内
UART1を用いる。(sys_config.hのLOGTASK_PORTIDで変更可能)
シリアルポートの設定を以下に示す。
   ・ボーレイト、57600Baud
   ・データ長、8 ビット
   ・ストップビット、1 ビット
   ・パリティなし
   ・フロー制御なし

２．Xstormy16 プロセッサ依存部の機能

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

2.1 データ型

signed int型および unsigned int型のサイズは 16ビットである。

2.2 割込み管理機能と割込みハンドラ

2.2.1 カーネル管理外の割り込み

「Xstormy16プログラマーズガイド」2.4章に記述された方法で定義された割り
込み処理ルーチンは、カーネル管理外の割り込みとして機能する。
カーネル管理外の割り込みはカーネルに関連した余分なオーバーヘッドが少な
く高速である利点がある反面、以下の点に注意する必要がある。
(1) カーネル管理外の割り込みの優先度は、全てのカーネル管理の割り込みの
    優先度よりも高くなければならない。(カーネル管理外の割り込み処理中に
    カーネル管理の割り込みを受け付けると、そこでディスパッチが発生し、
    カーネル管理外の割り込みの処理が途中で中断してしまう可能性があるた
    め。)
    「三洋マイコン 開発ツール(Xstormy16シリーズ)」に含まれる版では、"非
    タスクコンテキストからのサービスコールの遅延実行"を採用しているため、
    この制限はない。
(2) カーネル管理外の割り込みの割り込み処理ルーチンでは、カーネルサービ
    スを呼び出してはならない。
(3) カーネル管理外の割り込みでは、その発生時のスタックをそのまま用いる
    ため、全てのタスクのスタックの容量にその必要分を入れておく必要があ
    る。
(4) カーネル管理外の割り込みも、CPUロック状態では受け付けられない。
    公式公開版のXstormy16用TOPPERS/JSPでは、大部分のサービスコールが内
    部ではCPUロック状態となっているので注意が必要。
    「三洋マイコン 開発ツール(Xstormy16シリーズ)」に含まれる版では、サー
    ビスコール内でCPUをロックしない。割り込みハンドラの入り口・出口処理
    等で最大12クロックのCPUロックの区間がある。

2.2.2 割込みハンドラ番号

DEF_INH で指定する割込みハンドラ番号(inhno)は、Xstormy16 での割り込み
ベクタ番号を表し、そのデータ型(INHNO)は unsigned int型に定義されている。
割り込みハンドラ番号には、0-16が指定でき、EVAデバッガのエミュレーション
環境では、以下が実装されている。
  1 : Base Timer (アプリケーションで使用可)
  2 : Timer0 (タイムスティック供給用に使用)
  3 : Timer1 (アプリケーションで使用可)
 16 : UART (ログ出力・標準入出力で使用)
実CPUで使用可能な割り込みと例外ベクタ番号については、それぞれのマイコン
のユーザーズマニュアルを参照。

2.2.3 個々の割り込みの許可・禁止と優先度

Xstormy16では、個々の割り込みの許可・禁止と優先度はカーネルでは管理しな
い。これらの制御はIL1L/IL1H/IL2L/IL2Hへの設定で行う。

2.3 CPU例外管理機能とCPU例外ハンドラ

DEF_EXC で指定する割込みハンドラ番号のデータ型(EXCNO)は unsigned int
型に定義されている。以下の番号が指定可能である。
  0 : 未定義命令の実行
  1 : 奇数番地へのワードアクセス
  2 : ROM/RAM未実装エリアへのアクセス

2.4 スタートアップモジュール

Xstormy16依存のスタートアップモジュール(start.S)では、次の初期化処理を
行う。
(1) スタックポインタの初期化
(2) .bssセクションの初期化
(3) .dataセクションの初期化
(4) カーネルの起動(kernel_startへ分岐)

2.5 非タスクコンテキストの使用するスタック

Xstormy16では、割り込みハンドラを含む非タスクコンテキスト用のスタックと
して、静的変数やタスク用スタックを確保した後の残りのRAMを使用する。
タスク実行中に割り込みが発生した場合、割り込みハンドラが呼び出される前
にカーネル内でスタックポインタを非コンテキスト用のスタックに切り替える
ため、各タスク用のスタックの必要なサイズを決める時に割り込みハンドラ内
で使用されるスタックを考慮する必要はない。
しかし、割り込み発生時のPCとPSWおよびR0-R2までの保存はスタックの切り替
え前に行われるため、12バイト分のエリアはタスク用のスタックで確保してお
く必要がある。
ワーストケースとなるのは、レベル１の割り込みでスタックを切り替える直前
にレベル２の割り込みが発生、さらにレベル2割り込みでのスタック切り替え直
前にレベル３割り込み発生・・・となるような場合で、その必要なエリアは、
12 × (ネストして発生する可能性のある割り込みレベルの数) になる。この分
のエリアはタスクのスタックに確保しておく必要がる。

3.  システム依存部の機能

3.1  システムクロックドライバ

システムクロックドライバに使用するTIMER0のオシレータはデフォルトでは
Xstormy16内臓のRC発信を用いている。(約1MHz)
システムクロックドライバが isig_tim を呼び出す周期は、sys_defs.h 中の 
TIC_NUME と TIC_DENO で定義されている(標準は 5ミリ秒周期)。
内臓RC発信を用いて5ミリ秒周期でタイムティックを供給するドライバはカー
ネルライブラリ中(ソースはhw_timer.c)に含まれており、デフォルトではこれ
がリンクされるが、ユーザープログラム側でhw_timer.cを修正したものを作成
しリンクすることで、使用するオシレータ・割り込みの周期を任意に変更する
ことができる。この場合、呼び出し周期がCPUクロックに対して十分に長い必
要がある。(目安として、呼び出し周期 >2000/CPUクロック)
Xstormy16内臓のRC発信は、その周波数の精度が低いため、タイマの精度が必要
な場合は、外部X'talオシレータ等に切り替える必要がある。

3.2 シリアルインタフェースドライバ

システム依存部のシリアルインターフェースドライバは、UART0/UART1の２つの
シリアルインターフェースをサポートしている。ポートID=1がUART0、ポートID=2
がUART1に対応している。
システムログ等で用いるデフォルトのシリアルポートは、UART1に設定している。
(GDBスタブを利用する場合、UART0をこれに使用するため)

3.3 メモリマップ

EVAデバッガのエミュレーション環境のメモリマップは以下のとおりである。
  00000-07DFF : RAM
  07E00-07FFF : SFR(Special Function Register)
  80000-7FFFF : ROM
カーネル用のデータ領域・ユーザープログラム用のデータ領域、およびタスク
用のスタックを00000番地から確保し、残りのRAMを非タスクコンテキスト用の
スタック(下位より)、およびヒープメモリ(上位より)として使用する。

４．開発環境の構築

4.1 三洋提供のファイルを利用する場合

「三洋マイコン 開発ツール(Xstormy16シリーズ)」には、コンパイル済みのラ
イブラリ形式のJPSカーネルを含む、コンパイラ・デバッガ・統合開発環境等、
Windows下で開発に必要な全てのファイルが含まれているので、通常は、これを
ダウンロード・インストールすることでTOPERS/JSPを利用できる。
「三洋マイコン 開発ツール(Xstormy16シリーズ)」は
http://www.semic.sanyo.co.jp/micon/jpn/index.html
からダウンロードできる。
開発ツールに含まれる下記のドキュメントを参照のこと。
   ・TOPPERS/JSPユーザーのためのファーストステップガイド
   ・Xstormy16 プログラマーズガイド

4.2 この公式公開版を利用する場合

この公式公開版を利用する場合、以下の手順で開発環境を構築する。

Step1 三洋マイコン 開発ツール(Xstormy16シリーズ)のインストール
[入手元]
http://www.semic.sanyo.co.jp/micon/jpn/index.html
[インストール手順]
(1) アーカイブを解凍し、インストーラを実行する。
(2) インストーラからの問い合わせには、全てデフォルトでインストール
(3) インストールされたIDEを起動
(4) IDEのメニュー[ツール]->[DOSプロンプト]を起動
(5) DOSプロンプト内で、コマンド"Prepare_perl.bat"を実行(インストール後
    一度だけ実行すれば良い)

Step2 TOPPERS/JSPの入手と準備
[入手元]
http://www.toppers.jp/
ここより、TOPPERS/JSP Ver1.4.3のソースコード(SJIS版)をダウンロード。
[手順]
(1) ソースアーカイブを任意のディレクトリ(ここではC:\jspとする)に解凍
(2) Step1でインストールした、下記のディレクトリにあるcfg.exeとchk.exe
    をC:\jsp\cfgにコピーしておく
      C:\Program Files\SanyoLsi\Gcc\for_toppers\bin
(3) 解凍したディレクトリの下に作業用ディレクトリobj(ここではC:\jsp\obj)
    を作成

Step3 JSPカーネルとサンプルプログラムのコンパイル
(1) Step1(4)で開いたDOSプロンプトで、Step2(3)で作成したディレクトリ
    (C:\jsp\obj)に移動する。
(2) 以下のコマンドを実行
    正常に実行されれば、C:\jsp\obj\jsp.elf が作成される
    perl ../configure -C xstormy16 -S simulator
    make depend
    make
(3) DOSプロンプトを閉じる

Step4 EVAデバッガエミュレーション環境での実行
[手順]
(1) Windowsに戻り、Step3(2)で作成されたC:\jsp\obj\jsp.elfをダブルクリ
    ックしてEVAデバッガを起動する。
(2) 「エミュレーションモードで起動します」の問いに「はい」をクリックで
    EVAデバッガをエミュレーションモードで起動
(3) F5を押してプログラムを開始すると、USERウィンドウに以下の表示が出れ
    ば正常に動作している
      JSP Kernel Release......
          : 中略
      task1 is running (001). |
      task1 is running (002). |
          :
(4) USERウィンドウ下のコマンド入力欄に以下のコマンドを入力
      < t[Enter]     ('<'と't'の間にスペースが必要)
    task1がter_tskされ、task2が動き出す。
    (サンプルプログラムで使用できる't'以外のコマンドについては、sample1.c
    頭のコメント参照)

５．その他

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

Xstormy16 ターゲット依存部の各ファイルの概要は次の通り。

    config/xstormy16/
      Makefile.config  Makefile の Xstormy16依存定義
      cpu_config.c     プロセッサ依存部の関数
      cpu_config.h     プロセッサ依存部の構成定義
      cpu_context.h    コンテキスト操作
      cpu_defs.h       プロセッサ依存部のアプリケーション用定義
      cpu_insn.h       インラインアセンブラルーチンの定義
      cpu_rename.def   カーネルの内部識別名のリネーム定義
      cpu_rename.h     カーネルの内部識別名のリネーム
      cpu_unrename.h   カーネルの内部識別名のリネーム解除
      cpu_sfrs.h       カーネル内で使用するSFRの定義
      cpu_stdio.h      標準入出力サポートのための関数
      cpu_support.S    プロセッサ依存部のサブルーチン
      hw_serial.h      SIOドライバの構成定義
      hw_serial.c      SIOドライバの関数
      hw_serial.cfg    SIOドライバのコンフィギュレーションファイル
      hw_timer.h       タイマドライバの構成定義
      hw_timer.c       タイマドライバの関数
      offset.h         アセンブラからC構造体アクセスのための定義
      start.S          スタートアップモジュール
      tool_config.h    開発環境依存部の構成定義
      tool_defs.h      開発環境依存部のアプリケーション用定義
    config/xstormy16/simulator/
      Makefile.config  Makefile の システム依存定義
      sim_32k.ld       エミュレーション環境用リンカースクリプト
      sim_32k.S        EVAデバッガのための機種情報
      sys_config.c     システム依存部の関数
      sys_config.h     システム依存部の構成定義
      sys_defs.h       システム依存部のアプリケーション用定義
      sys_rename.def   カーネルの内部識別名のリネーム定義
      sys_rename.h     カーネルの内部識別名のリネーム
      sys_unrename.h   カーネルの内部識別名のリネーム解除

以上
