OSDN Git Service

チケット #25999 「SIOポートのピン割り当ての変更」に対応。TOP
[toppersasp4lpc/asp.git] / asp / arch / arm_m_gcc / common / start.S
1 /*
2  *  TOPPERS Software
3  *      Toyohashi Open Platform for Embedded Real-Time Systems
4  * 
5  *  Copyright (C) 2008 by Embedded and Real-Time Systems Laboratory
6  *              Graduate School of Information Science, Nagoya Univ., JAPAN
7  * 
8  *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
9  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
10  *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
11  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
13  *      スコード中に含まれていること.
14  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
16  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
17  *      の無保証規定を掲載すること.
18  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
19  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
20  *      と.
21  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
22  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
23  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
24  *        報告すること.
25  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
26  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
27  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
28  *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
29  *      免責すること.
30  * 
31  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
33  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
34  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
35  *  の責任を負わない.
36  * 
37  *  @(#) $Id: start.S 2177 2011-07-23 08:31:35Z ertl-honda $
38  */
39                 
40 /*
41  *   カーネル用のスタートアップモジュール(ARM-M用)
42  */
43 #define TOPPERS_MACRO_ONLY
44 #define UINT_C(val)             (val)           /* uint_t型の定数を作るマクロ */
45 #define ULONG_C(val)    (val)           /* ulong_t型の定数を作るマクロ */
46 #define CAST(type, val) (val)           /* 型キャストを行うマクロ */
47
48 #include "kernel_impl.h"
49 #include "arm_m.h"
50
51 /*
52  *  スタートアップルーチン
53  *
54  *  Threadモードで呼び出されることを前提としてる.
55  */
56         .text
57         .align 2
58         .code 16
59         .syntax unified
60         .globl _start
61         .type _start, function
62 _start:
63         cpsid f                 /* 割込みロック状態へ */
64
65 #ifdef INIT_MSP
66         /*
67          * MSPの設定
68          */
69         mov   r0, #CONTROL_MSP  /* MSPを有効に  */
70         msr   control, r0
71         isb                     /* control の操作後に必要 */
72         ldr  r0,=_kernel_istkpt
73         ldr  r1,[r0]
74         msr  msp, r1
75 #endif /* INIT_MSP */
76
77         /*
78          * hardware_init_hookの呼び出し (0でない場合)
79          *
80          * ターゲットハードウェアに依存して必要な初期化処理がある場合
81          * は,hardware_init_hook という関数を用意する
82          */
83         ldr  r0, =hardware_init_hook
84         cbz  r0, start_1
85         blx  r0
86
87 start_1:
88 #ifndef OMIT_BSS_INIT
89         /*
90          *  BSSセクション初期化
91          */
92         mov  r0, #0
93         ldr  r1, =__bss_start
94         ldr  r2, =__bss_end
95         cmp  r1, r2
96         bhs  start_3
97 start_2:
98         str  r0, [r1]
99         add  r1,r1, #4    
100         cmp  r1, r2
101         blo  start_2
102 #endif /* OMIT_BSS_INIT */
103
104
105 start_3:
106
107 #ifndef OMIT_DATA_INIT
108         /*
109          *  DATAセクション初期化
110          *  __idata_start から __idata_end までを,__data_start 以降に
111          *  コピーする
112          */
113         ldr  r1, =__idata_start
114         ldr  r2, =__idata_end
115         cmp  r1, r2
116         bhs  start_5
117         ldr  r3, =__data_start
118 start_4:
119         ldr  r0, [r1]
120         str  r0, [r3]
121         add  r1, #4
122         add  r3, #4
123         cmp  r1, r2
124         blo  start_4
125 #endif /* OMIT_DATA_INIT */
126
127         /*
128          *  software_init_hook を呼出し(0 でない場合)
129          *
130          *  ソフトウェア環境(特にライブラリ)に依存して必要な初期化処
131          *  理がある場合は,software_init_hook という関数を用意すれば
132          *  よい.
133          */
134 start_5:
135         ldr  r0, =software_init_hook
136         cbz  r0, start_6
137         blx  r0
138
139 start_6:
140         bl   sta_ker
141
142 l_end:
143         b   l_end