source: asp_nios2/trunk/arch/nios2_gcc/start.S@ 1

Last change on this file since 1 was 1, checked in by ertl-ichiba, 14 years ago

ASP 1.4.0対応のNios2依存部を追加

File size: 5.0 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2008 by Embedded and Real-Time Systems Laboratory
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 *
9 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
10 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
11 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
12 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
13 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
14 * スコード中に含まれていること.
15 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
16 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
17 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
18 * の無保証規定を掲載すること.
19 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
20 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
21 * と.
22 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
23 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
24 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
25 * 報告すること.
26 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
27 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
28 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
29 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
30 * 免責すること.
31 *
32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
36 * の責任を負わない.
37 *
38 * @(#) $Id: start.S 451 2007-08-03 11:32:33Z honda $
39 */
40
41/*
42 * カーネル対応のスタートアップモジュール(Nios2用)
43 */
44
45#define TOPPERS_MACRO_ONLY
46#define UINT_C(val) (val) /* uint_t型の定数を作るマクロ */
47#define ULONG_C(val) (val) /* ulong_t型の定数を作るマクロ */
48#define CAST(type, val) (val) /* 型キャストを行うマクロ */
49#include "kernel_impl.h"
50
51/*
52 * リセットルーチン
53 */
54 .section .entry, "xa"
55 .align 2
56 .global __reset
57__reset:
58 /*
59 * Iキャッシュの初期化
60 */
61#if NIOS2_ICACHE_SIZE > 0
62#if NIOS2_ICACHE_SIZE > 0x8000
63 movhi r2, %hi(NIOS2_ICACHE_SIZE)
64#else
65 movui r2, NIOS2_ICACHE_SIZE
66#endif
670:
68 initi r2
69 addi r2, r2, -NIOS2_ICACHE_LINE_SIZE
70 bgt r2, zero, 0b
711:
72 .pushsection .debug_alt_sim_info
73 .int 1, 1, 0b, 1b
74 .popsection
75#endif /* NIOS2_ICACHE_SIZE > 0 */
76
77 /*
78 * startへジャンプ
79 */
80 movhi r3, %hiadj(start)
81 addi r3, r3, %lo(start)
82 jmp r3
83
84
85 .section .text
86 .align 2
87 .global start
88 .type start, @function
89start:
90 /*
91 * Dキャッシュの初期化
92 */
93#if NIOS2_DCACHE_SIZE > 0
94#if NIOS2_DCACHE_SIZE > 0x8000
95 movhi r2, %hi(NIOS2_DCACHE_SIZE)
96#else
97 movui r2, NIOS2_DCACHE_SIZE
98#endif
990:
100 initd 0(r2)
101 addi r2, r2, -NIOS2_DCACHE_LINE_SIZE
102 bgt r2, zero, 0b
1031:
104 .pushsection .debug_alt_sim_info
105 .int 2, 1, 0b, 1b
106 .popsection
107#endif /* NIOS2_DCACHE_SIZE > 0 */
108
109 /*
110 * STATUSレジスタの初期化(割込み禁止)
111 */
112 rdctl r3, status
113 andi r3, r3, STATUS_PIE
114 wrctl status, r3
115
116 /*
117 * グローバルポインターのセット
118 */
119 movhi gp, %hiadj(_gp)
120 addi gp, gp, %lo(_gp)
121
122 /*
123 * スタックの初期化
124 */
125 ldw sp, %gprel(_kernel_istkpt)(gp)
126
127 /*
128 * hardware_init_hook を呼び出す。(0でない場合)
129 *
130 * ハードウェア依存に必要な初期化処理がある場合は,
131 * hardware_init_hook という関数を用意すればよい.
132 * 具体的にはROM化の際、RAMを使用可能にするための
133 * バスコントローラの初期化等を行う。
134 * sys_support.S 内で _hardware_init_hook を定義してい
135 * る.
136 */
137start_0:
138 movhi r2, %hiadj(_hardware_init_hook)
139 addi r2, r2, %lo(_hardware_init_hook)
140 beq zero, r2, start_1
141 callr r2
142
143 /*
144 * bssセクションをクリア
145 */
146start_1:
147 movhi r3, %hiadj(__bss_start)
148 addi r3, r3, %lo(__bss_start)
149 movhi r2, %hiadj(__bss_end)
150 addi r2, r2, %lo(__bss_end)
151 beq r3, r2, start_3
152start_2:
153 stw zero, (r3)
154 addi r3, r3, 4
155 bltu r3, r2, start_2
156
157 /*
158 * dataセクションの初期化(ROM化対応)
159 *
160 * __idata_start から __idata_end までを,__data_start 以降に
161 * コピーする.
162 */
163start_3:
164#ifndef NIOS2_OMIT_DATA_INIT
165 movhi r3, %hiadj(__idata_start)
166 addi r3, r3, %lo(__idata_start)
167 movhi r4, %hiadj(__idata_end)
168 addi r4, r4, %lo(__idata_end)
169 beq r3, r4, start_5 /* サイズ0なら何もしない */
170 movhi r6, %hiadj(__data_start)
171 addi r6, r6, %lo(__data_start)
172start_4:
173 ldw r2, 0(r3)
174 stw r2, 0(r6)
175 addi r3, r3, 4
176 addi r6, r6, 4
177 bltu r3, r4, start_4
178#endif /* NIOS2_OMIT_DATA_INIT */
179
180 /*
181 * software_init_hook を呼び出す(0 でない場合).
182 *
183 * ソフトウェア環境(特にライブラリ)に依存して必要な初期化処
184 * 理がある場合は,software_init_hook という関数を用意すれば
185 * よい.
186 */
187start_5:
188 movhi r2, %hiadj(_software_init_hook)
189 addi r2, r2, %lo(_software_init_hook)
190 beq zero, r2, start_6
191 callr r2
192
193start_6:
194 call sta_ker
Note: See TracBrowser for help on using the repository browser.