source: atk2-sc3-1.4.0-ntisr/arch/v850_ccrh/start.asm@ 172

Last change on this file since 172 was 172, checked in by ertl-ishikawa, 8 years ago

ATK2-SC3 1.4.0 RH850依存部 非信頼C2ISR対応を追加

  • Property svn:executable set to *
File size: 11.4 KB
Line 
1;/*
2 ;* TOPPERS ATK2
3 ;* Toyohashi Open Platform for Embedded Real-Time Systems
4 ;* Automotive Kernel Version 2
5 ;*
6 ;* Copyright (C) 2012-2015 by Center for Embedded Computing Systems
7 ;* Graduate School of Information Science, Nagoya Univ., JAPAN
8 ;* Copyright (C) 2012-2013 by FUJISOFT INCORPORATED, JAPAN
9 ;* Copyright (C) 2012-2013 by FUJITSU VLSI LIMITED, JAPAN
10 ;* Copyright (C) 2012-2013 by NEC Communication Systems, Ltd., JAPAN
11 ;* Copyright (C) 2012-2013 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
12 ;* Copyright (C) 2012-2013 by Renesas Electronics Corporation, JAPAN
13 ;* Copyright (C) 2012-2013 by Sunny Giken Inc., JAPAN
14 ;* Copyright (C) 2012-2013 by TOSHIBA CORPORATION, JAPAN
15 ;* Copyright (C) 2012-2013 by Witz Corporation, JAPAN
16 ;* Copyright (C) 2013 by Embedded and Real-Time Systems Laboratory
17 ;* Graduate School of Information Science, Nagoya Univ., JAPAN
18 ;*
19 ;* 上記著作権者
20は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
21 ;* ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
22 ;* 変・再é…
23å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
24 ;* (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
25 ;* 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
26 ;* スコード中に含まれていること.
27 ;* (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
28 ;* 用できる形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
30å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
31 ;* 者
32マニュアルなど)に,上記の著作権表示,この利用条件および下記
33 ;* の無保証規定を掲載すること.
34 ;* (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
35 ;* 用できない形で再é…
36å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
37 ;* と.
38 ;* (a) 再é…
39å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
40マニュアルなど)に,上記の著
41 ;* 作権表示,この利用条件および下記の無保証規定を掲載すること.
42 ;* (b) 再é…
43å¸ƒã®å½¢æ…
44‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
45 ;* 報告すること.
46 ;* (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
47 ;* 害からも,上記著作権者
48およびTOPPERSプロジェクトをå…
49è²¬ã™ã‚‹ã“と.
50 ;* また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
51 ;* 由に基づく請求からも,上記著作権者
52およびTOPPERSプロジェクトを
53 ;* å…
54è²¬ã™ã‚‹ã“と.
55 ;*
56 ;* 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
57 ;* 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
58 ;* はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
59 ;* 用する者
60に対して,AUTOSARパートナーになることを求めている.
61 ;*
62 ;* 本ソフトウェアは,無保証で提供されているものである.上記著作権者
63お
64 ;* よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
65 ;* に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
66 ;* アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
67 ;* の責任を負わない.
68 ;*
69 ;* $Id: start.asm 187 2015-06-25 03:39:04Z t_ishikawa $
70 ;*/
71
72;/*
73 ;* カーネル対応のスタートアップモジュール(V850用)
74 ;*/
75
76#define OMIT_INCLUDE_OS_CFG ;/* Os_Cfg.hインクルード抑止 */
77
78$include (v850asm.inc)
79
80 # *****************************************************************************
81# CCRH予約シンボルの外部ラベル宣言(gp、ep用)
82# *****************************************************************************
83 .extern __gp_data, 4
84 .extern __ep_data, 4
85
86# *****************************************************************************
87# セクション初期化テーブル
88# *****************************************************************************
89 .section ".INIT_DSEC.const", const
90 .align 4
91 .dw #__s.data, #__e.data, #__s.data.R
92
93 .section ".INIT_BSEC.const", const
94 .align 4
95 .dw #__s.bss, #__e.bss
96
97# *****************************************************************************
98# 関数の外部ラベル宣言
99# *****************************************************************************
100 .cseg text
101 .align 2
102 .extern __start
103 .extern __gp_data, 4
104 .extern __ep_data, 4
105 .extern _bsssecinib_table
106 .extern _tnum_bsssec
107 .extern _datasecinib_table
108 .extern _tnum_datasec
109 .extern _syscall_table
110__start:
111 di ;/* 割り込み禁止 */
112
113 ;/*
114 ;* 各種ポインタの初期化(SP/TP/EP/GP/CTBP)
115 ;*/
116 Lea __ostkpt, r3
117 ld.w 0[r3],r3
118 ;/* =begin modified for SC3 */
119 ;/*
120 ;* ep, ctbpはとりあえず使用しない
121 ;* tp, gpはsdataアクセスでコンパイラが使用する
122 ;*/
123 mov #__gp_data , gp
124 mov #__ep_data , ep
125 ;/*
126 ;* syscallの動作設定
127 ;*/
128$ifdef __v850e2v3__
129 mov SYSCALL_SIZE, r6
130 ldsr r6, sccfg
131 Lea _syscall_table, r6
132 ldsr r6, scbp
133$elseif defined(__v850e3v5__)
134 mov SYSCALL_SIZE, r6
135 ldsr r6, 11, 1
136 Lea _syscall_table, r6
137 ldsr r6, 12, 1
138 syncp
139$endif ;/* __v850e2v3__ */
140
141 ;/* =end modified for SC3 */
142
143$ifdef TOPPERS_USE_HFLOAT
144 ;/*
145 ;* FPUを有効に
146 ;*/
147 stsr psw, r12 ;/* load psw */
148 mov 0x00010000,r13 ;/* PSW.CU0(PSW[16]) = 1 */
149 or r13, r12
150 ldsr r12, psw ;/* store psw */
151$endif ;/* TOPPERS_USE_HFLOAT */
152
153 ;/*
154 ;* hardware_init_hook の呼出し(0 でない場合)
155 ;*
156 ;* ターゲットハードウェアに依存して必
157要な初期化処理がある場合
158 ;* は,hardware_init_hook という関数を用意する.
159 ;*/
160 Lea _hardware_init_hook, r6
161 cmp r0, r6
162 be hardware_init_hook_end
163 jarl _hardware_init_hook, lp
164hardware_init_hook_end:
165
166 ;/*
167 ;* BSSセクション初期化
168 ;* r0: ゼロレジスタ
169 ;*/
170 mov r0, r6 ;/* r6: テーブルのインデックス i */
171 Lea _tnum_bsssec, r7
172 ld.w 0[r7], r7 ;/* r7: テーブルの要素数 num */
173 Lea _bsssecinib_table, r8 ;/* r8: テーブルのアドレス */
174bss_clear_start:
175 cmp r7, r6 ;/* ループ終了条件: i >= num */
176 bnl bss_clear_end
177 ld.w 0[r8], ep ;/* ep: bssのå…
178ˆé ­ç•ªåœ° */
179 ld.w 4[r8], r9 ;/* r9: bssの終了番地 */
180 cmp r9, ep ;/* bssが空か? */
181 bnl bss_clear_start_hook ;/* 空ならば次のbssへ */
182 nop
183bss_clear_body:
184 ;/*
185 ;* bssの領域は,4byte境界にアラインされている
186 ;* よって,4byteずつデータをコピーしている
187 ;*/
188 sst.w r0, 0[ep] ;/* bssの領域を0で初期化 */
189 add 4, ep ;/* 次の番地へ */
190 cmp r9, ep ;/* bssの終了番地まで来たか? */
191 bl bss_clear_body ;/* 終了番地でなければループ */
192$ifdef BSSSEC_ALIGN_MASK
193 ;/*
194 ;* 境界になるまで初期化を続ける
195 ;*/
196 mov BSSSEC_ALIGN_MASK, r10
197bss_clear_body2:
198 tst r10, ep ;/* ep & 0xf == 0 ? */
199 bz bss_clear_start_hook
200 sst.w r0, 0[ep] ;/* 0初期化 */
201 add 4, ep
202 jr bss_clear_body2
203$endif ;/* BSSSEC_ALIGN_MASK */
204 nop
205bss_clear_start_hook:
206 add 8, r8 ;/* テーブルのアドレスをインクリメント 4byte * 2 -> 8 */
207 add 1, r6 ;/* テーブルのインデックスをインクリメント: i++ */
208 br bss_clear_start
209 nop
210bss_clear_end:
211
212$ifndef OMIT_DATA_INIT
213 ;/*
214 ;* dataセクションの初期化(ROM化対応)
215 ;*
216 ;*/
217 mov r0, r6 ;/* r6: テーブルのインデックス i */
218 Lea _tnum_datasec, r7
219 ld.w 0[r7], r7 ;/* r7: テーブルの要素数 num */
220 Lea _datasecinib_table, r8 ;/* r8: テーブルのアドレス */
221data_init_start:
222 cmp r7, r6 ;/* ループ終了条件: i >= num */
223 bnl data_init_end
224 ld.w 0[r8], ep ;/* ep : dataのå…
225ˆé ­ç•ªåœ° */
226 ld.w 4[r8], r9 ;/* r9 : dataの終了番地 */
227 ld.w 8[r8], r2 ;/* r2: idataのå…
228ˆé ­ç•ªåœ° */
229 cmp r9, ep ;/* dataが空か? */
230 bnl data_init_start_hook ;/* 空ならば次のdataへ */
231 nop
232data_init_body:
233 ld.b 0[r2], r10 ;/* idataの値をロード */
234 sst.b r10, 0[ep] ;/* idataの値をdataのアドレスへストア */
235 add 1, ep ;/* dataの次の番地へ */
236 add 1, r2 ;/* idataの次の番地へ */
237 cmp r9, ep ;/* dataの終了番地まで来たか? */
238 bl data_init_body ;/* 終了番地でなければループ */
239$ifdef DATASEC_ALIGN_MASK
240 ;/*
241 ;* 境界になるまで初期化を続ける
242 ;*/
243 mov DATASEC_ALIGN_MASK, r10
244data_init_body2:
245 tst r10, ep ;/* ep & 0xf == 0 ? */
246 bz data_init_start_hook
247 sst.b r0, 0[ep] ;/* 0初期化 */
248 add 1, ep
249 jr data_init_body2
250$endif ;/* DATASEC_ALIGN_MASK */
251 nop
252data_init_start_hook:
253 add 12, r8 ;/* テーブルのアドレスをインクリメント 4byte * 3 -> 12 */
254 add 1, r6 ;/* テーブルのインデックスをインクリメント: i++ */
255 br data_init_start
256 nop
257data_init_end:
258$endif ;/* OMIT_DATA_INIT */
259
260 ;/*
261 ;* software_init_hook を呼出し(0 でない場合)
262 ;*
263 ;* ソフトウェア環境(特にライブラリ)に依存して必
264要な初期化処
265 ;* 理がある場合は,software_init_hook という関数を用意すれば
266 ;* よい.
267 ;*/
268
269 Lea _software_init_hook, r6
270 cmp r0, r6
271 be software_init_hook_end
272 jarl _software_init_hook, r31
273software_init_hook_end:
274
275 ;/*
276 ;* カーネルを起動する.
277 ;*/
278 jarl _target_hardware_initialize, r31
279 jarl _main, r31
280;-----------------------------------------------------------------------------
281; mainから戻ってきた後の処理
282;-----------------------------------------------------------------------------
283__exit:
284 halt
285__startend:
286
287;-----------------------------------------------------------------------------
288; Insted of PROVIDE
289;-----------------------------------------------------------------------------
290$ifndef OMIT_PRC_HARDWARE_INIT_HOOK
291 .public _hardware_init_hook
292_hardware_init_hook:
293 jmp [lp]
294$endif ;/* OMIT_PRC_HARDWARE_INIT_HOOK */
295
296$ifndef OMIT_PRC_SOFTWARE_INIT_HOOK
297 .public _software_init_hook
298_software_init_hook:
299 jmp [lp]
300$endif ;/* OMIT_PRC_SOFTWARE_INIT_HOOK */
301
302;-----------------------------------------------------------------------------
303; dummy section to avoid linker warning
304;-----------------------------------------------------------------------------
305 .section ".data", data
306.L.dummy.data:
307 .section ".bss", bss
308.L.dummy.bss:
309 .section ".sdata", sdata
310.L.dummy.sdata:
311 .section ".sbss", sbss
312.L.dummy.sbss:
313 .section ".const", const
314.L.dummy.const:
315 .section ".stack.bss", bss
316.L.dummy.stack.bss:
317 .section "RESET", text
318.L.dummy.RESET:
319 .section "EIINTTBL", const
320 .align 512
321.L.dummy.EIINTTBL:
322
Note: See TracBrowser for help on using the repository browser.