|
|
start.S説明を見る。00001 /* 00002 * TOPPERS/FDMP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Function Distributed Multiprocessor Kernel 00005 * 00006 * Copyright (C) 2005 by Embedded and Real-Time Systems Laboratory 00007 * Graduate School of Information Science, Nagoya Univ., JAPAN 00008 * 00009 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 00010 * によって公表されている GNU General Public License の Version 2 に記 00011 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 00012 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 00013 * 利用と呼ぶ)することを無償で許諾する. 00014 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00015 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00016 * スコード中に含まれていること. 00017 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00018 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00019 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00020 * の無保証規定を掲載すること. 00021 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00022 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00023 * と. 00024 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00025 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00026 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00027 * 報告すること. 00028 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00029 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00030 * 00031 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00032 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 00033 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 00034 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 00035 * 00036 * @(#) $Id: start.S,v 1.3 2006/02/14 01:39:54 honda Exp $ 00037 */ 00038 00039 #define _MACRO_ONLY 00040 #include <t_config.h> 00041 #include <sys_defs.h> 00042 00043 #define NIOS2_ICACHE_SIZE 4096 00044 #define NIOS2_DCACHE_SIZE 0 00045 #define NIOS2_ICACHE_LINE_SIZE 32 00046 #define NIOS2_DCACHE_LINE_SIZE 4 00047 00048 00049 .section .entry, "xa" 00050 .align 2 00051 .global __reset 00052 __reset: 00053 #if NIOS2_ICACHE_SIZE > 0 00054 /* 00055 * The assumption here is that the instruction cache size is always 00056 * a power of two. 00057 */ 00058 00059 #if NIOS2_ICACHE_SIZE > 0x8000 00060 movhi r2, %hi(NIOS2_ICACHE_SIZE) 00061 #else 00062 movui r2, NIOS2_ICACHE_SIZE 00063 #endif 00064 0: 00065 initi r2 00066 addi r2, r2, -NIOS2_ICACHE_LINE_SIZE 00067 bgt r2, zero, 0b 00068 1: 00069 00070 .pushsection .debug_alt_sim_info 00071 .int 1, 1, 0b, 1b 00072 .popsection 00073 #endif /* NIOS2_ICACHE_SIZE > 0 */ 00074 #ifndef BOOT_ROM 00075 movhi r3, %hiadj(_start) 00076 addi r3, r3, %lo(_start) 00077 jmp r3 00078 #else 00079 br _boot_rom 00080 #endif /* BOOT_ROM */ 00081 00082 #ifdef BOOT_ROM 00083 .section .text 00084 .align 2 00085 .globl _ 00086 .type _boot_rom, @function 00087 _boot_rom: 00088 #if NIOS2_DCACHE_SIZE > 0 00089 #if NIOS2_DCACHE_SIZE > 0x8000 00090 movhi r2, %hi(NIOS2_DCACHE_SIZE) 00091 #else 00092 movui r2, NIOS2_DCACHE_SIZE 00093 #endif 00094 0: 00095 initd 0(r2) 00096 addi r2, r2, -NIOS2_DCACHE_LINE_SIZE 00097 bgt r2, zero, 0b 00098 1: 00099 .pushsection .debug_alt_sim_info 00100 .int 2, 1, 0b, 1b 00101 .popsection 00102 #endif /* NIOS2_DCACHE_SIZE > 0 */ 00103 00104 _boot_rom_1: 00105 movhi r3, %hiadj(ROM_BASE) /* r3 source */ 00106 addi r3, r3, %lo(ROM_BASE) 00107 movhi r4, %hiadj(RAM_BASE) /* r4 destination */ 00108 addi r4, r4, %lo(RAM_BASE) 00109 movhi r2, %hiadj(_edata) 00110 addi r2, r2, %lo(_edata) 00111 00112 _flash_copy: 00113 ldw r5, 0(r3) 00114 addi r3, r3, 1 00115 stw r5, 0(r4) 00116 addi r4, r4, 1 00117 bgeu r2, r4, _flash_copy 00118 00119 movhi r2, %hiadj(_start) 00120 addi r2, r2, %lo(_start) 00121 jmp r2 00122 nop 00123 00124 #endif /* BOOT_ROM */ 00125 00126 .section .text 00127 .align 2 00128 .globl _start 00129 .type _start, @function 00130 _start: 00131 #if NIOS2_DCACHE_SIZE > 0 00132 #if NIOS2_DCACHE_SIZE > 0x8000 00133 movhi r2, %hi(NIOS2_DCACHE_SIZE) 00134 #else 00135 movui r2, NIOS2_DCACHE_SIZE 00136 #endif 00137 0: 00138 initd 0(r2) 00139 addi r2, r2, -NIOS2_DCACHE_LINE_SIZE 00140 bgt r2, zero, 0b 00141 1: 00142 .pushsection .debug_alt_sim_info 00143 .int 2, 1, 0b, 1b 00144 .popsection 00145 #endif /* NIOS2_DCACHE_SIZE > 0 */ 00146 00147 data_init_done: 00148 /* 00149 * 割込み禁止 00150 */ 00151 wrctl status, r0 00152 00153 /* 00154 * スタックの設定 00155 */ 00156 movhi sp, %hiadj(STACKTOP) 00157 addi sp, sp, %lo(STACKTOP) 00158 00159 /* 00160 * set up the global pointer. 00161 */ 00162 movhi gp, %hiadj(_gp) 00163 addi gp, gp, %lo(_gp) 00164 00165 00166 00167 start_0: 00168 movhi r2, %hiadj(_hardware_init_hook) 00169 addi r2, r2, %lo(_hardware_init_hook) 00170 beq zero, r2, start_1 00171 callr r2 00172 00173 /* 00174 * Clear bss. 00175 */ 00176 start_1: 00177 movhi r3, %hiadj(__bss_start) 00178 addi r3, r3, %lo(__bss_start) 00179 00180 movhi r2, %hiadj(__bss_end) 00181 addi r2, r2, %lo(__bss_end) 00182 00183 beq r3, r2, start_3 00184 start_2: 00185 stw zero, (r3) 00186 addi r3, r3, 4 00187 bltu r3, r2, start_2 00188 00189 start_3: 00190 movhi r2, %hiadj(_software_init_hook) 00191 addi r2, r2, %lo(_software_init_hook) 00192 beq zero, r2, start_4 00193 callr r2 00194 00195 start_4: 00196 00197 call kernel_start 00198 00199 crt0_end: 00200 br crt0_end Copyright © 2006 by TAKAGI Nobuhisa. このページは Mon Apr 3 23:49:13 2006 に Doxygen によって生成されました。 |