source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/s1c33/luxun2/sys_start.c@ 26

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

initial

File size: 9.2 KB
RevLine 
[26]1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 *
9 * Copyright (C) 2004 by SEIKO EPSON Corp, JAPAN
10 *
11 * 上記著作権者
12は,以下の (1)〜(4) の条件か,Free Software Foundation
13 * によってå…
14¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
15 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
16 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
17å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
18 * 利用と呼ぶ)することを無償で許諾する.
19 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
20 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
21 * スコード中に含まれていること.
22 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
23 * 用できる形で再é…
24å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
25å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
26 * 者
27マニュアルなど)に,上記の著作権表示,この利用条件および下記
28 * の無保証規定を掲載すること.
29 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
30 * 用できない形で再é…
31å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
32 * と.
33 * (a) 再é…
34å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
35マニュアルなど)に,上記の著
36 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
37 * (b) 再é…
38å¸ƒã®å½¢æ…
39‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
40 * 報告すること.
41 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
42 * 害からも,上記著作権者
43およびTOPPERSプロジェクトをå…
44è²¬ã™ã‚‹ã“と.
45 *
46 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
47お
48 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
49 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
50 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
51 *
52 */
53
54/*
55 * カーネル用のスタートアップモジュール(S1C33用)
56 */
57
58#include "jsp_kernel.h"
59#include "sys_config.h"
60#include "cpu_config.h"
61
62/*
63 * 外部関数の参ç…
64§
65 */
66extern void init_lib(void);
67extern void init_sys(void);
68
69extern void INT_ENTRY(timer_handler)(void);
70extern void INT_ENTRY(sio_in_handler)(void);
71extern void INT_ENTRY(sio_out_handler)(void);
72
73/*
74 * プロトタイプ宣言
75 */
76void start(void);
77static void undef_handler(void);
78static void hardware_init_hook(void);
79static void software_init_hook(void);
80
81/*
82 * ベクターテーブル
83 */
84VP tps_VectorTable[] = { /* offset number */
85 (VP) start, /* 00 Reset */
86 (VP) undef_handler, /* 01 */
87 (VP) undef_handler, /* 02 */
88 (VP) undef_handler, /* 03 */
89 (VP) undef_handler, /* 04 Zero division */
90 (VP) undef_handler, /* 05 */
91 (VP) undef_handler, /* 06 Address error exception */
92 (VP) undef_handler, /* 07 debug */
93 (VP) undef_handler, /* 08 NMI */
94 (VP) undef_handler, /* 09 */
95 (VP) undef_handler, /* 10 */
96 (VP) undef_handler, /* 11 */
97 (VP) undef_handler, /* 12 Software exception 0 */
98 (VP) undef_handler, /* 13 Software exception 1 */
99 (VP) undef_handler, /* 14 Software exception 2 */
100 (VP) undef_handler, /* 15 Software exception 3 */
101 (VP) undef_handler, /* 16 (00) */
102 (VP) undef_handler, /* 17 (01) */
103 (VP) undef_handler, /* 18 (02) */
104 (VP) undef_handler, /* 19 (03) */
105 (VP) undef_handler, /* 20 (04) */
106 (VP) undef_handler, /* 21 (05) */
107 (VP) undef_handler, /* 22 (06) */
108 (VP) undef_handler, /* 23 (07) */
109 (VP) undef_handler, /* 24 (08) */
110 (VP) undef_handler, /* 25 (09) */
111 (VP) undef_handler, /* 26 (10) */
112 (VP) undef_handler, /* 27 (11) */
113 (VP) undef_handler, /* 28 (12) */
114 (VP) undef_handler, /* 29 (13) */
115 (VP) undef_handler, /* 30 (14) */
116 (VP) undef_handler, /* 31 (15) */
117 (VP) undef_handler, /* 32 (16) */
118 (VP) undef_handler, /* 33 (17) */
119 (VP) INT_ENTRY(timer_handler), /* 34 (18) 16 bit programable timer 1-b */
120 (VP) undef_handler, /* 35 (19) */
121 (VP) undef_handler, /* 36 (20) */
122 (VP) undef_handler, /* 37 (21) */
123 (VP) undef_handler, /* 38 (22) */
124 (VP) undef_handler, /* 39 (23) */
125 (VP) undef_handler, /* 40 (24) */
126 (VP) undef_handler, /* 41 (25) */
127 (VP) undef_handler, /* 42 (26) */
128 (VP) undef_handler, /* 43 (27) */
129 (VP) undef_handler, /* 44 (28) */
130 (VP) undef_handler, /* 45 (29) */
131 (VP) undef_handler, /* 46 (30) */
132 (VP) undef_handler, /* 47 (31) */
133 (VP) undef_handler, /* 48 (32) */
134 (VP) undef_handler, /* 49 (33) */
135 (VP) undef_handler, /* 50 (34) */
136 (VP) undef_handler, /* 51 (35) */
137 (VP) undef_handler, /* 52 (36) */
138 (VP) undef_handler, /* 53 (37) */
139 (VP) undef_handler, /* 54 (38) */
140 (VP) undef_handler, /* 55 (39) */
141 (VP) undef_handler, /* 56 (40) Serial interface Ch.0 (error) */
142 (VP) INT_ENTRY(sio_in_handler), /* 57 (41) Serial interface Ch.0 (rx) */
143 (VP) INT_ENTRY(sio_out_handler),/* 58 (42) Serial interface Ch.0 (tx) */
144 (VP) undef_handler, /* 59 (43) */
145 (VP) undef_handler, /* 60 (44) */
146 (VP) undef_handler, /* 61 (45) */
147 (VP) undef_handler, /* 62 (46) */
148 (VP) undef_handler, /* 63 (47) */
149 (VP) undef_handler, /* 64 (48) */
150 (VP) undef_handler, /* 65 (49) */
151 (VP) undef_handler, /* 66 (50) */
152 (VP) undef_handler, /* 67 (51) */
153 (VP) undef_handler, /* 68 (52) */
154 (VP) undef_handler, /* 69 (53) */
155 (VP) undef_handler, /* 70 (54) */
156 (VP) undef_handler /* 71 (55) */
157};
158
159/*
160 * ブートルーチン
161 */
162void start(void)
163{
164 /*
165 * デフォルトデータエリアアドレスを設定する
166 */
167 Asm("xld.w %r15, __dp");
168
169 /*
170 * 非タスクコンテストのスタックをSTACKTOPに初期化する
171 * STACKTOPは、sys_config.hで定義
172 */
173 set_sp(STACKTOP);
174
175 /*
176 * PSRを初期化し、割り込みを禁止する
177 */
178 set_psr(0x00000000);
179
180
181 /*
182 * hardware_init_hook を呼び出す。(0でない場合)
183 *
184 * ハードウェア依存に必
185要な初期化処理がある場合は,
186 * hardware_init_hook という関数を用意すればよい.
187 * å…
188·ä½“的にはROM化の際、RAMを使用可能にするための
189 * バスコントローラの初期化等を行う。
190 * sys_config.c 内
191で hardware_init_hook を定義している.
192 */
193 if (hardware_init_hook != (VP) 0) {
194 hardware_init_hook();
195 }
196
197 /*
198 * dataセクションを初期化する(ROM化対応).
199 */
200 memcpy(VECTOR_START, IVECTOR_START, (UW)IVECTOR_END - (UW)IVECTOR_START);
201 memcpy(DATA_START, IDATA_START, (UW)IDATA_END - (UW)IDATA_START);
202
203 /*
204 * bssセクションを0クリアする。
205 */
206 memset(BSS_START, 0x00, BSS_END - BSS_START);
207
208 /*
209 * software_init_hook を呼び出す(0 でない場合)
210 *
211 * ソフトウェア環境(特にライブラリ)に依存して必
212要な初期化処
213 * 理がある場合は,software_init_hook という関数を用意すれば
214 * よい.
215 */
216 if (software_init_hook != (VP) 0) {
217 software_init_hook();
218 }
219
220 /*
221 * カーネルを起動する
222 */
223 Asm("xjp kernel_start");
224
225 do {
226 Asm("halt");
227 } while (TRUE);
228}
229
230/*
231 * ダミールーチン
232 */
233static void undef_handler(void)
234{
235 while(1){
236 ;
237 }
238}
239
240/*
241 * システム依存の初期化処理
242 */
243static void hardware_init_hook(void)
244{
245 (*(s1c33Bcu_t *) S1C33_BCU_BASE).bTtbrProt = (IOREG)0x59;
246 (*(s1c33Bcu_t *) S1C33_BCU_BASE).ulTtbr = (LIOREG)tps_VectorTable;
247
248 (*(s1c33Bcu_t *) S1C33_BCU_BASE).uwBus = 0x0008;
249 (*(s1c33Bcu_t *) S1C33_BCU_BASE).uwDram = 0x0c00;
250
251 return;
252}
253
254
255/*
256 * ソフトウェア依存の初期化処理
257 */
258static void software_init_hook(void)
259{
260 init_lib();
261 init_sys();
262}
Note: See TracBrowser for help on using the repository browser.