[315] | 1 | ;*
|
---|
| 2 | ;* TOPPERS/ASP Kernel
|
---|
| 3 | ;* Toyohashi Open Platform for Embedded Real-Time Systems/
|
---|
| 4 | ;* Advanced Standard Profile Kernel
|
---|
| 5 | ;*
|
---|
| 6 | ;* Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
|
---|
| 7 | ;* Toyohashi Univ. of Technology, JAPAN
|
---|
| 8 | ;* Copyright (C) 2005,2006 by Embedded and Real-Time Systems Laboratory
|
---|
| 9 | ;* Graduate School of Information Science, Nagoya Univ., JAPAN
|
---|
| 10 | ;* Copyright (C) 2008-2010 by Witz Corporation, JAPAN
|
---|
| 11 | ;* Copyright (C) 2013 by Mitsuhiro Matsuura
|
---|
| 12 | ;*
|
---|
| 13 | ;* 上記著作権者は,Free Software Foundation によって公表されている
|
---|
| 14 | ;* GNU General Public License の Version 2 に記述されている条件か,以
|
---|
| 15 | ;* 下の(1)~(4)の条件を満たす場合に限り,本ソフトウェア(本ソフトウェ
|
---|
| 16 | ;* アを改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
|
---|
| 17 | ;* 利用と呼ぶ)することを無償で許諾する.
|
---|
| 18 | ;* (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
|
---|
| 19 | ;* 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
|
---|
| 20 | ;* スコード中に含まれていること.
|
---|
| 21 | ;* (2) 本ソフトウェアを再利用可能なバイナリコード(リロケータブルオブ
|
---|
| 22 | ;* ジェクトファイルやライブラリなど)の形で利用する場合には,利用
|
---|
| 23 | ;* に伴うドキュメント(利用者マニュアルなど)に,上記の著作権表示,
|
---|
| 24 | ;* この利用条件および下記の無保証規定を掲載すること.
|
---|
| 25 | ;* (3) 本ソフトウェアを再利用不可能なバイナリコードの形または機器に組
|
---|
| 26 | ;* み込んだ形で利用する場合には,次のいずれかの条件を満たすこと.
|
---|
| 27 | ;* (a) 利用に伴うドキュメント(利用者マニュアルなど)に,上記の著作
|
---|
| 28 | ;* 権表示,この利用条件および下記の無保証規定を掲載すること.
|
---|
| 29 | ;* (b) 利用の形態を,別に定める方法によって,上記著作権者に報告する
|
---|
| 30 | ;* こと.
|
---|
| 31 | ;* (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
|
---|
| 32 | ;* 害からも,上記著作権者を免責すること.
|
---|
| 33 | ;*
|
---|
| 34 | ;* 本ソフトウェアは,無保証で提供されているものである.上記著作権者は,
|
---|
| 35 | ;* 本ソフトウェアに関して,その適用可能性も含めて,いかなる保証も行わ
|
---|
| 36 | ;* ない.また,本ソフトウェアの利用により直接的または間接的に生じたい
|
---|
| 37 | ;* かなる損害に関しても,その責任を負わない.
|
---|
| 38 | ;*
|
---|
| 39 |
|
---|
| 40 |
|
---|
| 41 | ;
|
---|
| 42 | ; メモリマップの定義(ターゲット依存部)
|
---|
| 43 | ;
|
---|
| 44 | .include sectrx.inc
|
---|
| 45 |
|
---|
| 46 | DFLRE .equ 007FC440H ; DFLREレジスタ
|
---|
| 47 |
|
---|
| 48 | DB_BLOCK_ENABLE .equ 02D0FH
|
---|
| 49 |
|
---|
| 50 | ;
|
---|
| 51 | ; 初期化ルーチン
|
---|
| 52 | ;
|
---|
| 53 | .section P_START, CODE
|
---|
| 54 |
|
---|
| 55 | .glb _start
|
---|
| 56 | .glb _sta_ker
|
---|
| 57 | .glb _software_init_hook
|
---|
| 58 | .glb _hardware_init_hook
|
---|
| 59 | .glb __kernel_istkpt
|
---|
| 60 |
|
---|
| 61 | _start:
|
---|
| 62 | ;
|
---|
| 63 | ; 電源投入後はレベル0, 全割込み禁止状態である.
|
---|
| 64 | ; カーネルでは高速割込みを使用しないため、BPC, BPSW及びFINTV
|
---|
| 65 | ; の初期化は行わない.
|
---|
| 66 | ;
|
---|
| 67 |
|
---|
| 68 | ;
|
---|
| 69 | ; 内蔵ROM(データフラッシュ)領域の設定
|
---|
| 70 | ;
|
---|
| 71 | ; リセット後, データフラッシュ領域は読み出し禁止となっている
|
---|
| 72 | ; ため, 読み出し許可に設定する.
|
---|
| 73 | ;
|
---|
| 74 | mov.l #DFLRE, r5
|
---|
| 75 | mov.w #DB_BLOCK_ENABLE, [R5]
|
---|
| 76 |
|
---|
| 77 | ;
|
---|
| 78 | ; スタックポインタの設定
|
---|
| 79 | ;
|
---|
| 80 | ; ユーザにて非タスクコンテキスト用スタック領域を用意した場合,
|
---|
| 81 | ; ユーザ領域を設定する.
|
---|
| 82 | ; kernel_cfg.cにて"_kernel_istkpt"の値を決定する.
|
---|
| 83 | ;
|
---|
| 84 | mov.l #__kernel_istkpt, r5
|
---|
| 85 | mov.l [r5], r0 ; 非タスクコンテキスト用スタック領域を設定
|
---|
| 86 |
|
---|
| 87 | ;
|
---|
| 88 | ; 可変ベクタテーブルの設定
|
---|
| 89 | ;
|
---|
| 90 | mvtc #VVECTOR_TOP, intb ; ベクタテーブルの設定
|
---|
| 91 |
|
---|
| 92 | ;
|
---|
| 93 | ; ハードウェア固有の初期化ルーチンの呼出し
|
---|
| 94 | ;
|
---|
| 95 | mov.l #_hardware_init_hook, r5
|
---|
| 96 | cmp #0, r5
|
---|
| 97 | beq.b init_D
|
---|
| 98 | jsr r5
|
---|
| 99 |
|
---|
| 100 | ;
|
---|
| 101 | ; 初期値あり変数領域の初期化
|
---|
| 102 | ;
|
---|
| 103 | init_D:
|
---|
| 104 | mov.l #(sizeof R), r3
|
---|
| 105 | cmp #0, r3
|
---|
| 106 | beq.b init_D_2 ; サイズ0なら初期化必要なし
|
---|
| 107 | mov.l #(topof R), r1
|
---|
| 108 | mov.l #(topof D), r2
|
---|
| 109 | smovf
|
---|
| 110 |
|
---|
| 111 | init_D_2:
|
---|
| 112 | mov.l #(sizeof R_2), r3
|
---|
| 113 | cmp #0, r3
|
---|
| 114 | beq.b init_D_1 ; サイズ0なら初期化必要なし
|
---|
| 115 | mov.l #(topof R_2), r1
|
---|
| 116 | mov.l #(topof D_2), r2
|
---|
| 117 | smovf
|
---|
| 118 |
|
---|
| 119 | init_D_1:
|
---|
| 120 | mov.l #(sizeof R_1), r3
|
---|
| 121 | cmp #0, r3
|
---|
| 122 | beq.b clear_B ; サイズ0なら初期化必要なし
|
---|
| 123 | mov.l #(topof R_1), r1
|
---|
| 124 | mov.l #(topof D_1), r2
|
---|
| 125 | smovf
|
---|
| 126 |
|
---|
| 127 | ;
|
---|
| 128 | ; 初期値なし変数領域の初期化
|
---|
| 129 | ;
|
---|
| 130 | clear_B:
|
---|
| 131 | mov.l #0, r2
|
---|
| 132 | mov.l #(topof B), r1
|
---|
| 133 | mov.l #(sizeof B) , r3
|
---|
| 134 | sstr.b
|
---|
| 135 |
|
---|
| 136 | clear_B_2:
|
---|
| 137 | mov.l #0, r2
|
---|
| 138 | mov.l #(topof B_2), r1
|
---|
| 139 | mov.l #(sizeof B_2) , r3
|
---|
| 140 | sstr.b
|
---|
| 141 |
|
---|
| 142 | clear_B_1:
|
---|
| 143 | mov.l #0, r2
|
---|
| 144 | mov.l #(topof B_1), r1
|
---|
| 145 | mov.l #(sizeof B_1) , r3
|
---|
| 146 | sstr.b
|
---|
| 147 |
|
---|
| 148 | ;
|
---|
| 149 | ; software_init_hook を呼出し(0 でない場合)
|
---|
| 150 | ;
|
---|
| 151 | ; ソフトウェア環境(特にライブラリ)に依存して必要な初期化処理
|
---|
| 152 | ; がある場合は,software_init_hook という関数を用意すればよい.
|
---|
| 153 | ;
|
---|
| 154 | mov.l #_software_init_hook, r5
|
---|
| 155 | cmp #0, r5
|
---|
| 156 | beq.b kernel_link
|
---|
| 157 | jsr r5
|
---|
| 158 |
|
---|
| 159 | ;
|
---|
| 160 | ; カーネルスタート
|
---|
| 161 | ;
|
---|
| 162 | kernel_link:
|
---|
| 163 | bra.a _sta_ker ; --> _sta_ker()
|
---|
| 164 |
|
---|
| 165 | .end
|
---|
| 166 |
|
---|