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 によって生成されました。