source: azure_iot_hub_f767zi/trunk/asp_baseplatform/arch/arm_m_gcc/common/start.S@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/plain;charset=UTF-8
File size: 5.3 KB
Line 
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$
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#include "target_asm.inc"
51
52#if defined(TOPPERS_CORTEX_M0PLUS) || defined(TOPPERS_CORTEX_M0)
53#define mov movs
54#define add adds
55#endif
56
57/*
58 * スタートアップルーチン
59 *
60 * Threadモードで呼び出されることを前提としてる.
61 */
62 ATEXT
63 ABALIGN(4)
64 ATHUMB(_start)
65 AGLOBAL(_start)
66ALABEL(_start)
67 cpsid f /* 割込みロック状態へ */
68
69#ifdef INIT_MSP
70 /*
71 * MSPの設定
72 */
73 mov r0, #CONTROL_MSP /* MSPを有効に */
74 msr control, r0
75 isb /* control の操作後に必要 */
76 ldr r0,=_kernel_istkpt
77 ldr r1,[r0]
78 msr msp, r1
79#endif /* INIT_MSP */
80
81#ifdef TOPPERS_FPU_ENABLE
82 /*
83 * FPUの有効化
84 */
85 ldr r0,=(CPACR)
86 ldr r1,=(CPACR_FPU_ENABLE)
87 ldr r2,[r0]
88 orr r2,r2,r1
89 str r2,[r0]
90
91 /*
92 * FPCAを初期化
93 */
94 ldr r0, =(FPCCR_INIT)
95 ldr r1, =(FPCCR)
96 str r0, [r1]
97#endif /* TOPPERS_FPU_ENABLE */
98
99 /*
100 * hardware_init_hookの呼び出し (0でない場合)
101 *
102 * ターゲットハードウェアに依存して必要な初期化処理がある場合
103 * は,hardware_init_hook という関数を用意する
104 */
105 ldr r0, =hardware_init_hook
106#if defined(TOPPERS_CORTEX_M0PLUS) || defined(TOPPERS_CORTEX_M0)
107 cmp r0, #0
108 beq.n start_1
109#else
110 cbz r0, start_1
111#endif
112 blx r0
113
114ALABEL(start_1)
115#ifndef OMIT_BSS_INIT
116 /*
117 * BSSセクション初期化
118 */
119 mov r0, #0
120 ldr r1, =BSS_START
121 ldr r2, =BSS_END
122 cmp r1, r2
123 bhs start_3
124ALABEL(start_2)
125 str r0, [r1]
126 add r1,r1, #4
127 cmp r1, r2
128 blo start_2
129#endif /* OMIT_BSS_INIT */
130
131
132ALABEL(start_3)
133#ifndef OMIT_DATA_INIT
134 /*
135 * DATAセクション初期化
136 * __idata_start から __idata_end までを,__data_start 以降に
137 * コピーする
138 */
139 ldr r1, =IDATA_START
140 ldr r2, =IDATA_END
141 cmp r1, r2
142 bhs start_5
143 ldr r3, =DATA_START
144ALABEL(start_4)
145 ldr r0, [r1]
146 str r0, [r3]
147 add r1, #4
148 add r3, #4
149 cmp r1, r2
150 blo start_4
151#endif /* OMIT_DATA_INIT */
152
153 /*
154 * software_init_hook を呼出し(0 でない場合)
155 *
156 * ソフトウェア環境(特にライブラリ)に依存して必要な初期化処
157 * 理がある場合は,software_init_hook という関数を用意すれば
158 * よい.
159 */
160ALABEL(start_5)
161 ldr r0, =software_init_hook
162#if defined(TOPPERS_CORTEX_M0PLUS) || defined(TOPPERS_CORTEX_M0)
163 cmp r0, #0
164 beq.n start_6
165#else
166 cbz r0, start_6
167#endif
168 blx r0
169
170ALABEL(start_6)
171 bl sta_ker
172
173ALABEL(l_end)
174 b l_end
Note: See TracBrowser for help on using the repository browser.