source: ssp_armv6_m_gcc/tags/1.3.0/arch/armv6_m_gcc/start.S@ 86

Last change on this file since 86 was 86, checked in by nmir-saito, 9 years ago

add separate package of SSP kernel for ARMv6-M

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