source: atk2-sc3_fl850f1l/arch/v850_ccrh/start.asm

Last change on this file was 117, checked in by ertl-ishikawa, 9 years ago

ATK2-SC3 1.3.2 FL850F1L(RH850F1L)依存部(GCC/GHS/CCRH)を追加

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