source: anotherchoice/tags/jsp-1.4.4-full-UTF8/doc/sh3.txt@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 23.8 KB
Line 
1
2 = TOPPERS/JSPカーネル ユーザズマニュアル =
3 (SH3/SH4 ターゲット依存部)
4
5 (Release 1.4.2対応,最終更新: 11-Jul-2005)
6
7------------------------------------------------------------------------
8 TOPPERS/JSP Kernel
9 Toyohashi Open Platform for Embedded Real-Time Systems/
10 Just Standard Profile Kernel
11
12 Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
13 Toyohashi Univ. of Technology, JAPAN
14
15 上記著作権者
16は,以下の (1)〜(4) の条件か,Free Software Foundation
17 によってå…
18¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
19 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
20 を改変したものを含む.以下同じ)を使用・複製・改変・再é…
21å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
22 利用と呼ぶ)することを無償で許諾する.
23 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
24 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
25 スコード中に含まれていること.
26 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
27 用できる形で再é…
28å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
29å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
30 者
31マニュアルなど)に,上記の著作権表示,この利用条件および下記
32 の無保証規定を掲載すること.
33 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
34 用できない形で再é…
35å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
36 と.
37 (a) 再é…
38å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
39マニュアルなど)に,上記の著
40 作権表示,この利用条件および下記の無保証規定を掲載すること.
41 (b) 再é…
42å¸ƒã®å½¢æ…
43‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
44 報告すること.
45 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
46 害からも,上記著作権者
47およびTOPPERSプロジェクトをå…
48è²¬ã™ã‚‹ã“と.
49
50 本ソフトウェアは,無保証で提供されているものである.上記著作権者
51お
52 よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
53 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
54 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
55
56 @(#) $Id: sh3.txt,v 1.36 2005/09/26 06:26:36 honda Exp $
57------------------------------------------------------------------------
58
591.SH3/SH4 ターゲット依存部の概要
60
61
621.1 ターゲットシステムと開発環境
63
64SH3/SH4 プロセッサのターゲットシステムとしては,SH7709A,SH7729R,
65SH7727,SH7750を搭載した以下のボードをサポートしている.なお,SH3-DSP
66の DSP 機能,SH4 の FPU はサポートしていない.(ディスパッチ時及び割込
67みのå…
68¥ã‚Šå£ã§é–¢é€£ã™ã‚‹ãƒ¬ã‚¸ã‚¹ã‚¿ã‚’保存していない)
69
70・(株)日立超
71LSIシステムズ製の MS7709ASE01 ボード (CPU: SH7709A)
72・(株)日立超
73LSIシステムズ製の MS7729RSE01 ボード (CPU: SH7729R)
74・(株)日立超
75LSIシステムズ製の MS7750SE01 ボード (CPU: SH7750)
76・(株)日立超
77LSIシステムズ製の MS7727CP01 ボード (CPU: SH7727)
78
79なお,MS7709ASE01,MS7729RSE01,MS7750SE01は,ハードウェア構成が似通っ
80ているため, solution_engine という名前のシステム依存部としてまとめて
81いる.切り替えは,システム依存部の Makefile.clonfig で指定する.以下,
82これら3種類のボードを特に区別しない場合は,Solution Engine と表記する.
83
84開発環境には,GCC などの GNU開発環境を用い,オブジェクトファイルフォー
85マットは ELF を標準とする.
86
87Solution Engine では実行環境として,GDBスタブを用いる方法と JTAG-ICE
88を用いる方法をサポートする.GDBスタブは Toppers プロジェクトのホームペー
89ジからダウンロード可能である.JTAG-ICEとしては,京都マイクロコンピュー
90タ製のPARTNER-Jでの動作を確認している.GDBスタブを用いる場合には,
91Makefile 中で,DBGENV に GDB_STUB を設定する(デフォルト).PARTNER-J
92を用いる場合には,DBGENVに PARTNER_J を設定する.
93
94MS7727CP01 では,T-Monitor を用いる方法とJTAG-ICEを用いる方法をサポート
95する.なお,T-Monitor を使ってデバッグすることは不可能であり,単なるロー
96ダーとして用いる.å…
97·ä½“的には,カーネルをSレコードに変換し,T-Monitor
98でダウンロードして実行する.カーネル終了時は,プロセッサをリセットする.
99
100
1011.2 サポートする機能の概要
102
103SH3 依存の機能として,割込みマスクの変更・参ç…
104§(chg_ixx,get_ixx)と,性
105能評価用システム時刻参ç…
106§æ©Ÿèƒ½(vxget_tim)をサポートしている.割込みの禁
107止と許可(dis_int,ena_int)はサポートしていない.
108
109
1101.3 他のターゲットへのポーティング
111
112現バージョンでは,SH7708 を用いたシステム依存部は存在しない.しかしな
113がら,プロセッサ依存部のコード自体は SH7708 をサポートする.そのため,
114SH7708をサポートするシステム依存部を作成することは容易である.その場合
115には,コンパイルオプションもしくは sys_defs.h で SH7708 を定義すればよ
116い.
117
118
1191.4 シリアルポート
120
121カーネルのログ出力用として,Solution Engine ではスーパーI/O内
122蔵
123SCI(CN3)を 19200bps で使用する.MS7727CP01 では,CPUボード上のシリアル
124インタフェースコネクタを 115200bps で使用する.なお,å…
125¨ã¦ã®ãƒãƒ¼ãƒˆã«ãŠ
126いて データ: 8bit,Parity:none,Stop:1bitである.
127
128
1291.5 エンディアン
130
131各ターゲットはディップスイッチによりエンディアンを変更することが可能で
132ある.これに合わせて,カーネルのエンディアンの設定は各システム依存部で
133変更可能である.エンディアンは以下の個所で設定する.
134
135 ・システム依存部の Makefile.config
136 コンパイルオプション -ml or -mb
137 リンカオプション -ml or -mb
138 リンカスクリプト shlelf.ld or shelf.ld
139
140 ・システム定義
141 SIL_ENDIAN SIL_ENDIAN_LITTLE or SIL_ENDIAN_BIG
142
143
1442.SH3 プロセッサ依存部の機能
145
146この節では,カーネルおよびシステムサービスの機能の中で,SH3依存の部分
147について解説する.
148
149
1502.1 データ型
151
152int型および unsigned int型のサイズは 32ビットである.
153
154
1552.2 割込み管理機能と割込みハンドラ
156
157カーネル管理外の割込みとしては, NMI がある.よって,CPUロック状æ…
158‹ã‚„初
159期化ルーチン内
160では,NMI 以外の割込みはすべて禁止されている.å…
161·ä½“的には,
162IPM(Interrupt Priority Mask)が 15 に設定される.しかしながら,ボード上
163に NMI å…
164¥åŠ›ã‚’持たないターゲットのため,GDBスタブがホストのマシンと通信
165するためのシリアルポートの優å…
166ˆåº¦ã‚’ 15 で登録し,GDB で Ctrl-C を押すと
167割り込みがå…
168¥ã‚Šã‚¹ã‚¿ãƒ–に制御が移るようにしてある.この機能を使用するため
169にはCPUロック状æ…
170‹ã§ã¯ï¼Œå„ªå…
171ˆåº¦ãŒ 14 になるようにしなければならない.そ
172のため,CPUロックで設定される優å…
173ˆåº¦ã‚’マクロで MAX_IPM で指定している.
174MAX_IPM はcpu_config.h の中で定義されている.GDBスタブを使う場合は 14
175にGDBスタブを使わない場合は 15 に設定している.
176
177DEF_INH で指定する割込みハンドラ番号(inhno)は,SH7708/50 では,割り込
178み事象レジスタ(INTEVT)に設定されるコードであり,SH7709A/09/29R/27 では,
179割り込み事象レジスタ2(INTEVT2)に設定されるコードである.データ型
180(INHNO)は unsigned int型に定義されている.DEF_INH で,INTEVT,INTEVT2コー
181ドとして有効でない値や,外部割込みに対応しない番号を指定した場合の動作
182は保証されない.
183
184SH3依存の機能として,SR(Status Register)中の 割り込みマスクビット(I3〜
185I0)の値を変更するためのサービスコール chg_ipm と,参ç…
186§ã™ã‚‹ãŸã‚ã®ã‚µãƒ¼ãƒ“
187スコール get_ipm をサポートしている.なお,割り込みマスクビットの値を
188表すデータ型 IPM は,unsigned int型に定義されている.
189
190これらのサービスコールは,タスクコンテキストで CPUロック解除状æ…
191‹ã®å ´åˆ
192にのみ呼び出すことができる.chg_ipm により IPM を 0 以外(すなわち,何
193らかの割込みが禁止されている状æ…
194‹)にした場合でも,ディスパッチは禁止さ
195れず,chg_ipm により変更した IPM の値は,ディスパッチ後のタスクに引き
196継がれる.例えば,あるタスクで IPM を 1 に変更した後,何らかの割込みに
197より別のタスクに切り替わると,切り替わった後のタスクでも IPM は 1 にな
198る.
199
200chg_ipm をサポートするために,割込みハンドラの出å…
201¥å£å‡¦ç†ãªã©ã«ã‚ªãƒ¼ãƒãƒ˜ãƒƒ
202ドを生じている.そこで,SUPPORT_CHG_IPM というマクロにより,これらのサー
203ビスコールをサポートするかどうかを切り替えられるようにしている.
204SUPPORT_CHG_IPM は,cpu_config.h の中で #define されている.
205
206SH3依存の割込みマスクの変更・参ç…
207§ã®ãŸã‚ã®ã‚µãƒ¼ãƒ“スコールの仕様は次の
208通り.
209
210
211(1) chg_ipm 割込みマスクの変更
212
213【C言語API】
214 ER ercd = chg_ipm(IPM ipm);
215
216【パラメータ】
217 IPM ipm 設定すべき IPM の値
218
219【リターンパラメータ】
220 ER ercd エラーコード
221
222【エラーコード】
223 E_CTX コンテキストエラー
224 E_PAR パラメータエラー(ipm が不正)
225
226【機能】
227
228IPM(Interrupt Priority Mask)を ipm で指定された値に設定する.指定した
229値が 0〜13ないし14以外の場合,E_PARエラーとなる.IPM を 1〜MAX_IPM -1
230に設定した場合でも,ディスパッチは禁止されない.また,設定した IPM の
231値は,ディスパッチ後も引き継がれる.
232
233なお,このサービスコールを用いて,IPM を MAX_IPM (すべての割込みを禁止)
234に設定することはできない.IPM を MAX_IPM にしたい場合には,loc_cpu を
235使うべきである.
236
237このサービスコールは,タスクコンテキストで CPUロック解除状æ…
238‹ã®æ™‚のみ呼
239び出すことができる.非タスクコンテキストや CPUロック状æ…
240‹ã§å‘¼ã³å‡ºã—た場
241合には,E_CTXエラーとなる.
242
243
244(2) get_ipm 割込みマスクの参ç…
245§
246
247【C言語API】
248 ER ercd = get_ipm(IPM *p_ipm);
249
250【パラメータ】
251 なし
252
253【リターンパラメータ】
254 ER ercd エラーコード
255 IPM ipm 現在の IPM の値
256
257【エラーコード】
258 E_CTX コンテキストエラー
259
260【機能】
261
262現在の IPM(Interrupt Priority Mask)の値を読み出し,ipm に返す.
263
264このサービスコールは,タスクコンテキストで CPUロック解除状æ…
265‹ã®æ™‚のみ呼
266び出すことができる.非タスクコンテキストや CPUロック状æ…
267‹ã§å‘¼ã³å‡ºã—た場
268合には,E_CTXエラーとなる.
269
270
2712.3 CPU例外管理機能とCPU例外ハンドラ
272
273DEF_EXC で指定する割込みハンドラ番号(excno)は,SH3 での 例外事象レジス
274タに設定される例外コード番号を表し,そのデータ型(EXCNO)は unsigned int
275型に定義されている.DEF_EXC で,例外コード番号として有効でない値や,
276CPU例外に対応しない番号を指定した場合の動作は保証されない.
277
278CPU例外ハンドラに渡されるp_excinfは,CPU例外発生時のコンテキストを保存
279したスタックへのポインタが渡される.スタックの構造を以下に示す.
280
281offset
282 ----------------------
283 | R7 | <-- p_excinf
284 ----------------------
285 1 | R6 |
286 ----------------------
287 2 | R5 |
288 ----------------------
289 3 | R4 |
290 ----------------------
291 4 | R3 |
292 ----------------------
293 5 | R2 |
294 ----------------------
295 6 | R1 |
296 ----------------------
297 7 | R0 |
298 ----------------------
299 8 | MACH |
300 ----------------------
301 9 | MACL |
302 ----------------------
303 10 | GBR |
304 ----------------------
305 11 | SR |
306 ----------------------
307 12 | PR |
308 ----------------------
309 13 | PC |
310 ----------------------
311
312また,CPU例外発生時のPCの値は発生例外要因に応じてCPUによりインクリメン
313トされる場合や,されずにリトライする場合がある.そのため,PCの値を変更
314したい場合は,CPU例外ハンドラで,p_excinfをå…
315ƒã«PCの値を変更すればよい.
316
317
318
3192.4 スタートアップモジュール
320
321SH3依存のスタートアップモジュール(start.S)では,次の初期化処理を行う.
322
323(A) プロセッサモードの初期化とスタックポインタの初期化
324
325最初に,すべてのキャッシュを無効化した後,キャッシュをライトスルーモー
326ドに設定し,有効にする.また,プロセッサのモードを,特権モード,レジス
327タバンク1に設定し,割り込みマスクを MAX_IPM に設定する.
328
329
330次に,スタックポインタ(r15)を STACKTOP に設定する.ここで割込みスタッ
331クポインタに設定されたスタック領域は,カーネル起動後は非タスクコンテキ
332スト用のスタック領域として使われる.STACKTOP は,sys_config.h 部で定義
333することを想定している.
334
335(B) hardware_init_hook の呼出し
336
337hardware_init_hook が 0 でない場合には,hardware_init_hook を呼び出す.
338hardware_init_hook は,カーネルが起動される前に行う必
339要があるターゲッ
340ト依存の初期化を行うために用意している.hardware_init_hook がどこでも
341定義されていない場合,リンカでこのシンボルを 0 に定義する(リンカスク
342リプト内
343に記述あり).
344
345(C) bssセクションと dataセクションの初期化
346
347bssセクションをゼロクリアする.また,dataセクションを初期化する.
348
349(D) software_init_hook の呼出し
350
351software_init_hook が 0 でない場合には,software_init_hook を呼び出す.
352software_init_hook は,カーネルが起動される前に行う必
353要があるソフトウェ
354ア環境(å…
355·ä½“的には,ライブラリ)依存の初期化を行うために用意している.
356software_init_hook がどこでも定義されていない場合,リンカでこのシンボ
357ルを 0 に定義する(リンカスクリプト内
358に記述あり).
359
360(E) カーネルの起動
361
362kernel_start へ分岐し,カーネルを起動する.kernel_start からリターンし
363てくることは想定していない.
364
365
3662.5 レジスタバンク
367
368例外ハンドラのå…
369¥å£ã‚’除き基本的にレジスタバンク0を使用している.レジス
370タバンク1は r7 のみ例外/割り込みのネスト回数のカウント用に使用している.
371非タスクコンテキストとタスクコンテキストの判別はこのレジスタにより行っ
372ている.なお,スタブはレジスタバンク1のR0とR1を使用するため,このレジ
373スタに書き込んだデータはスタブが呼び出されると破壊される.
374
375
3762.6 MACH,MACL,GBR
377
378gccでは,MACH,MACL,GBRはすべてスクラッチレジスタとして扱われるため,
379関数呼び出しの前後では値は保証されない.そのため,例外/割込み発生時に
380は,スクラッチレジスタである汎用レジスタR0〜R7と同様に保存している.
381また,自らディスパッチャを呼び出しす場合は,関数呼び出しになるため,保
382存していない.アセンブラのコードを使用する場合もこのルールに従う必
383要が
384ある.
385
386
3872.7 割込みハンドラ実行時の割込みマスク
388
389SH3は割込み発生時,割込みマスクビット(I3〜I0)はプロセッサによって自動
390的に設定されないため,ソフトウェアによって設定する必
391要がある.割込みハ
392ンドラ実行時に設定する割込みマスクビットをカーネルに指定するサービスコー
393ルとしてdefine_int_plevel() を用意している.このサービスコールの使用は
394次の通り.なお,define_int_plvel()により割込みマスクビットを指定しなけ
395れば割込みハンドラはディフォルトの MAX_IPM -1 のマスクで実行される.
396
397 define_int_plevel 割込みハンドラ実行時の割込みマスクビットの指定
398
399【C言語API】
400 void define_int_plevel(UINT dintno, UW plevel)
401
402【パラメータ】
403 dintno 割込み番号
404 plevel 割込みレベル
405
406【機能】
407 dintno で指定した割込み番号の割込みハンドラが実行される場合の割込み
408 マスクを plevel にする.
409
410
4113.システム依存部の機能
412
4133.1 システムクロックドライバ
414
415システムクロックドライバが isig_tim を呼び出す周期は,sys_defs.h 中の
416TIC_NUME と TIC_DENO で定義されている(標準は 1ミリ秒周期).この定義
417を変更することで,isig_tim を呼び出す周期を変更することができる.ただ
418し,タイマの精度が 1μ秒であるため,1μ秒単位で端数になる値を設定した
419場合には,isig_tim の呼出し周期に誤差が生じることになる.
420
4213.2 性能評価用システム時刻参ç…
422§æ©Ÿèƒ½
423
424SH3依存部では,性能評価用システム時刻参ç…
425§æ©Ÿèƒ½(vxget_tim)をサポートして
426いる.性能評価用システム時刻の精度は 1μ秒単位であるが,タイマの現在値
427を読み出すために一時的にタイマを停止させる必
428要があるため,vxget_tim を
429呼ぶ度にシステムクロックが少しづつ遅
430れることになる.なお,SYSUTIM型は
431UD型(64ビットの符号無し整数型)に定義している.
432
4333.3 シリアルインタフェースドライバ
434
435
436Solution_Engine のシリアルインタフェースドライバは,スーパーI/O内
437蔵
438SCI(CN3) をサポートしている.また,MS7727CP01のシリアルインタフェース
439ドライバは,ST16C2550CQ48 をサポートしている.
440
4413.4 メモリマップ
442
443コード領域とデータ領域は各システム依存部の Makefile.config で,スタッ
444クの初期値は,sys_defs.h で設定する.
445
446・Solution Engine
447 コード領域を 0x0c003000 〜 0x0c0fffff 約1MB,データ領域を 0x0c100000
448 〜 の約3MB,非タスクコンテキスト用のスタック領域を 〜0x0c3fffff に確
449 保している.0x0c000000 〜 0x0c000fff は,GDBスタブのワークエリアとなっ
450 ており,使用することができない.
451
452
453・MS7727CP01
454 コード領域を 0x0c003000 〜 0x0c0fffff 約1MB,データ領域を 0x0c100000
455 〜 の約3MB,非タスクコンテキスト用のスタック領域を 〜0x0c3fffff に確
456 保している.0x0c000000 〜 0x0c002fff は,ROMモニタのワークエリアとなっ
457 ており,使用することができない.
458
459
4604.開発環境の構築
461
462開発環境の構築方法については,GNU開発環境構築マニュアルを参ç…
463§ã®ã“と.
464
465
4664.1 開発環境のバージョン
467動作確認したツールのバージョンは以下の通りである.
468
469 BINUTILS : 2.10.1
470 GCC-CORE : 2.95.3
471 GDB : 4.18
472 NEWLIB : 1.9.0
473
474の組み合わせもしくは
475
476 BINUTILS : 2.14
477 GCC-CORE : 3.3
478 GDB : 5.3
479 NEWLIB : 1.11.0
480
481
4825.その他
483
4845.1 ディレクトリ・ファイル構成
485
486SH3 ターゲット依存部の各ファイルの概要は次の通り.
487
488 config/sh3/
489 Makefile.config Makefileの SH3 依存定義
490 cpu_defs.h プロセッサ依存部のアプリケーション用定義
491 cpu_config.h プロセッサ依存部の構成定義
492 cpu_config.c プロセッサ依存部の関数
493 cpu_support.S プロセッサ依存部のサブルーチン
494 cpu_context.h コンテキスト操作
495 cpu_rename.def カーネルの内
496部識別名のリネーム定義
497 cpu_rename.h カーネルの内
498部識別名のリネーム
499 cpu_unrename.h カーネルの内
500部識別名のリネーム解除
501 tool_defs.h 開発環境依存部のアプリケーション用定義(GNU開発環境用)
502 tool_config.h 開発環境依存部の構成定義(GNU開発環境用)
503 makeoffset.c offset.h 生成サポートプログラム
504 cpu_insn.h 低レベルのプロセッサ操作ルーチン
505 start.S スタートアップモジュール
506 shelf.ld ビッグエンディアン用リンカスクリプト
507 shlelf.ld リトルエンディアン用リンカスクリプト
508 hw_timer.h タイマ操作ルーチン
509 sh3.h SH3 の定義
510 sh4.h SH4 の定義
511
512
513 config/sh3/solution_engine
514 Makefile.config Makefileの Solution Engine 依存定義
515 ms7709ase01.h MS7709ASE01 ハードウェア定義
516 ms7729rse01.h MS7729RSE01 ハードウェア定義
517 ms7750se01.h MS7750SE01 ハードウェア定義
518 solution_engine.h Solution Engineå…
519±é€šå®šç¾©
520 sys_config.c システム依存部の関数
521 sys_config.h システム依存部の構成定義
522 sys_defs.h システム依存部のアプリケーション用定義
523 sys_support.S システム依存部のサブルーチン
524 sys_rename.def カーネルの内
525部識別名のリネーム定義
526 sys_rename.h カーネルの内
527部識別名のリネーム
528 sys_unrename.h カーネルの内
529部識別名のリネーム解除
530 hw_serial.h SIOドライバ
531 hw_serial.cfg SIOドライバのコンフィギュレーションファイル
532
533
534 config/sh3/ms7727cp01
535 Makefile.config Makefileの MS7727CP01 依存定義
536 ms7727cp01.h MS7727CP01 ハードウェア定義
537 sys_config.c システム依存部の関数
538 sys_config.h システム依存部の構成定義
539 sys_defs.h システム依存部のアプリケーション用定義
540 sys_support.S システム依存部のサブルーチン
541 sys_rename.def カーネルの内
542部識別名のリネーム定義
543 sys_rename.h カーネルの内
544部識別名のリネーム
545 sys_unrename.h カーネルの内
546部識別名のリネーム解除
547 hw_serial.h SIOドライバ
548 hw_serial.cfg SIOドライバのコンフィギュレーションファイル
549
550
551 pdic/simple_sio/
552 st16c2550.h ST16C2550 の定義
553 st16c2550.c ST16C2550 用SIOドライバ
554 fdc37c935a.h fdc37c935a の定義
555 fdc37c935a.c fdc37c935a 用SIOドライバ
556
557
558
Note: See TracBrowser for help on using the repository browser.