source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/microblaze/start.S@ 26

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

initial

File size: 7.4 KB
Line 
1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 *
9 * 上記著作権者
10は,以下の (1)〜(4) の条件か,Free Software Foundation
11 * によってå…
12¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
13 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
16 * 利用と呼ぶ)することを無償で許諾する.
17 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
18 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19 * スコード中に含まれていること.
20 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
21 * 用できる形で再é…
22å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
23å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
24 * 者
25マニュアルなど)に,上記の著作権表示,この利用条件および下記
26 * の無保証規定を掲載すること.
27 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28 * 用できない形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
30 * と.
31 * (a) 再é…
32å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
33マニュアルなど)に,上記の著
34 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
35 * (b) 再é…
36å¸ƒã®å½¢æ…
37‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
38 * 報告すること.
39 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
40 * 害からも,上記著作権者
41およびTOPPERSプロジェクトをå…
42è²¬ã™ã‚‹ã“と.
43 *
44 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
45お
46 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
47 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
48 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
49 *
50 * @(#) $Id: start.S,v 1.9 2004/02/05 09:16:25 honda Exp $
51 */
52
53#define _MACRO_ONLY
54#include <microblaze_asm.inc>
55#include <t_config.h>
56#include <sys_defs.h>
57/*
58 * # 0x00 # Imm instr for reset address [Hi halfword]
59 * # 0x04 # Jump to _start [Lo halfword]
60 * # 0x08 # Imm instr for exception address [Hi halfword]
61 * # 0x0c # Jump to Exception handler [Lo halfword]
62 * # 0x10 # Imm instr for interrupt address [Hi halfword]
63 * # 0x14 # Jump to interrupt handler [Lo halfword]
64 */
65
66
67 .text
68 .global _start
69 .align 2
70 .ent _start
71_start:
72 /*
73 * msrを初期化
74 */
75 la r1, r0, MSR_CACHE_SETTING
76 mts rmsr,r1
77
78 /*
79 * opb_mdm を使うと msr のBIPビットが'1'で実行されるため,
80 * rtbd命令により'0'に初期化する.
81 * stub を使う場合は必
82要ないが特に副作用がないため,無条件に実行する.
83 */
84 la r1, r0, _start_
85 rtbd r1,0
86_start_:
87
88 /*
89 * R2とR3の設定
90 *・R2 : Read-only small data area anchor
91 * _SDA2_BASE_ .sdata2の中心
92 *・R13 : Read-write small data area anchor
93 * .sdataとsbssを連続して置き,この中間に_SDA_BASE_ を設定する
94 */
95 la r13, r0, _SDA_BASE_
96 la r2, r0, _SDA2_BASE_
97
98 /*
99 * スタックポインタの初期化
100 */
101 la r1, r0, STACKTOP - 4
102
103 /*
104 * ベクタテーブルの初期化
105 */
106 /*
107 * brai 命令の書き込み
108 */
109 la r3, r0, 0xb8080000 /* brai のオペコード */
110 swi r3, r0, 0xc /* exceptionベクタへ登録 */
111 swi r3, r0, 0x14 /* interrruptベクタへ登録 */
112 /*
113 * imm 命令の書き込み
114 */
115 la r4, r0, 0xb0000000 /* imm のオペコード */
116 swi r4, r0, 0x8 /* exceptionベクタへ登録 */
117 swi r4, r0, 0x10 /* interrruptベクタへ登録 */
118
119 /*
120 * 例外ハンドラの登録
121 */
122 la r5, r0, exception_entry
123 sw r5, r1, r0
124 lhu r6, r1, r0
125 shi r5, r0, 0xe /* 割込みハンドラ下位16bit */
126 shi r6, r0, 0xa /* 割込みハンドラ上位16bit */
127
128 /*
129 * 割込みハンドラの登録
130 */
131 la r5, r0, interrupt_entry
132 sw r5, r1, r0
133 lhu r6, r1, r0
134 shi r5, r0, 0x16 /* 割込みハンドラ下位16bit */
135 shi r6, r0, 0x12 /* 割込みハンドラ上位16bit */
136
137
138 /*
139 * _hardware_init_hook を呼び出す。(0でない場合)
140 *
141 * ハードウェア依存に必
142要な初期化処理がある場合は,
143 * hardware_init_hook という関数を用意すればよい.
144 * å…
145·ä½“的にはROM化の際、RAMを使用可能にするための
146 * バスコントローラの初期化等を行う。
147 * sys_support.S 内
148で _hardware_init_hook を定義してい
149 * る.
150 */
151start_0:
152 la r3, r0, _hardware_init_hook
153 beqi r3, start_1
154 brald r15, r3
155 nop
156
157
158 /*
159 * bssセクションをクリア
160 */
161start_1:
162 la r3, r0, __bss_start
163 la r4, r0, _end
164 sub r5, r4, r3
165 beqi r5, start_3
166start_2:
167 sb r0, r0, r3
168 addi r3, r3, 1
169 sub r5, r4, r3
170 bgti r5, start_2
171
172 /*
173 * dataセクションの初期化(ROM化対応)
174 *
175 * __idata_start から __idata_end までを,__data_start 以降に
176 * コピーする.
177 * Microblazeは内
178臓RAMが小さいことと,BRAMの内
179容は
180 * リコンフィギュレーションすると初期化されるため
181 * dataセクションの初期化は行わない
182 * ただし場合によっては実装
183することを考えてラベルのみ定義しておく
184 */
185start_3:
186 la r3, r0, __idata_start
187 la r4, r0, __idata_end
188 sub r5, r4, r3 /* サイズをチェック */
189 beqi r5, start_5
190 la r6, r0, __data_start
191start_4:
192 lbu r7, r0, r3
193 sb r7, r0, r6
194 addi r3, r3, 1
195 addi r6, r6, 1
196 sub r5, r4, r3
197 bgti r5, start_4
198
199
200start_5:
201 la r3, r0, __isdata2_start
202 la r4, r0, __isdata2_end
203 sub r5, r4, r3 /* サイズをチェック */
204 beqi r5, start_7
205 la r6, r0, __sdata2_start
206start_6:
207 lbu r7, r0, r3
208 sb r7, r0, r6
209 addi r3, r3, 1
210 addi r6, r6, 1
211 sub r5, r4, r3
212 bgti r5, start_6
213
214
215start_7:
216 la r3, r0, __isdata_start
217 la r4, r0, __isdata_end
218 sub r5, r4, r3 /* サイズをチェック */
219 beqi r5, start_9
220 la r6, r0, __sdata_start
221start_8:
222 lbu r7, r0, r3
223 sb r7, r0, r6
224 addi r3, r3, 1
225 addi r6, r6, 1
226 sub r5, r4, r3
227 bgti r5, start_8
228
229
230 /*
231 * _software_init_hook を呼び出す(0 でない場合).
232 *
233 * ソフトウェア環境(特にライブラリ)に依存して必
234要な初期化処
235 * 理がある場合は,software_init_hook という関数を用意すれば
236 * よい.
237 */
238start_9:
239 la r3, r0, _software_init_hook
240 beqi r3, start_10
241 brald r15, r3
242 nop
243
244start_10:
245 brlid r15, kernel_start
246 addik r1,r1,4 /* スタックをå…
247ƒã«æˆ»ã™ */
Note: See TracBrowser for help on using the repository browser.