source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/armv4/frk_aduc/sys_support.S@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 8.7 KB
Line 
1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2006 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2005-2006 by Logic Research Co., Ltd.
9 *
10 * 上記著作権者
11は,以下の (1)〜(4) の条件か,Free Software Foundation
12 * によってå…
13¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
14 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
15 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
16å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
17 * 利用と呼ぶ)することを無償で許諾する.
18 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
19 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
20 * スコード中に含まれていること.
21 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
22 * 用できる形で再é…
23å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
24å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
25 * 者
26マニュアルなど)に,上記の著作権表示,この利用条件および下記
27 * の無保証規定を掲載すること.
28 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
29 * 用できない形で再é…
30å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
31 * と.
32 * (a) 再é…
33å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
34マニュアルなど)に,上記の著
35 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
36 * (b) 再é…
37å¸ƒã®å½¢æ…
38‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
39 * 報告すること.
40 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
41 * 害からも,上記著作権者
42およびTOPPERSプロジェクトをå…
43è²¬ã™ã‚‹ã“と.
44 *
45 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
46お
47 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
48 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
49 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
50 *
51 */
52
53
54#define _MACRO_ONLY
55#include "jsp_kernel.h"
56#include "frk_aduc.h"
57
58
59 /*
60 * Vectorテーブルとジャンプテーブル
61 * サイズは合計0x3c
62 */
63 .section .data.vctsram,"a"
64 .code 32
65 .align 0
66 .global vct_tb_sram
67vct_tb_sram:
68 ldr pc, reset_vector /* リセット */
69 ldr pc, undef_vector /* 未定義命令 */
70 ldr pc, swi_vector /* ソフトウェア割込み */
71 ldr pc, prefech_vector /* プリフェッチアボード */
72 ldr pc, data_abort_vector /* データアボード */
73 nop
74 ldr pc, irq_vector /* IRQ */
75 ldr pc, fiq_vector /* IRQ */
76
77/*
78 * ベクターテーブル
79 */
80reset_vector:
81 .long start
82undef_vector:
83 .long undef_exception
84swi_vector:
85 .long swi_exception
86prefech_vector:
87 .long prefetch_exception
88data_abort_vector:
89 .long data_abort_exception
90irq_vector:
91 .long irq_exception
92fiq_vector:
93 .long fiq_exception
94
95
96
97
98/*
99 * 低レベルのターゲットシステム依存の初期化
100 *
101 * スタートアップモジュールの中で,メモリ初期化の前に呼び出される.
102 */
103
104 .text
105 .align 2
106 .global hardware_init_hook
107hardware_init_hook:
108 mov pc, lr
109
110
111 .text
112 .align 2
113 .global software_init_hook
114software_init_hook:
115 mov pc, lr
116
117 .text
118 .align 2
119 .global software_term_hook
120software_term_hook:
121 mov pc, lr
122
123
124/*
125 *
126 * 割込みの出å…
127¥ã‚Šå£å‡¦ç†
128 *
129 */
130 .text
131 .align 4
132 .global IRQ_Handler
133IRQ_Handler:
134
135 /*
136 * 割込みモード
137 *
138 * cpsrがspsr_irqに復帰å…
139ˆãŒr14_irq(lp)にå…
140¥ã‚Šï¼Œ
141 * spsr_irqとr14_irqとr13(sp)_irqが r14,r13となる.
142 */
143
144 /*
145 * タスクの動作時モード(スーパーバイザーモード)へ
146 */
147 mov sp,#(CPSR_SVC | CPSR_FIQ_BIT | CPSR_IRQ_BIT)
148 msr cpsr_all, sp
149 stmfd sp!, {r0-r3,ip,lr,pc} /* pcはダミー */
150
151
152
153 /*
154 * spsrと戻り番地を取得するためにIRQモードへ
155 */
156 mov r0,#(CPSR_IRQ | CPSR_FIQ_BIT | CPSR_IRQ_BIT)
157 msr cpsr,r0
158 sub r0,lr,#4
159 mrs r1,spsr
160
161 /*
162 * スーパーバイザーモードに
163 */
164 and r2, r1, #CPSR_FIQ_BIT /* FIQビットの継承 */
165 orr r2, r2, #(CPSR_SVC|CPSR_IRQ_BIT)
166 msr cpsr_all, r2
167 str r0, [sp,#0x18] /* Store pc */
168 stmfd sp!,{r1} /* spsr */
169
170
171 /*
172 * 多重割り込みか判定
173 */
174 ldr r2, =interrupt_count
175 ldr r3, [r2]
176 add r0,r3,#1
177 str r0, [r2]
178 cmp r3, #0x00
179
180 moveq r2,sp /* ネスト割り込みでない場合 */
181 ldreq sp,=STACKTOP /* スタックの変更 */
182 stmeqfd sp!,{r2} /* タスクスタックの保存 */
183
184
185 /*
186 * 割り込み要因の判定.
187 */
188 ldr r1, =IRQSTA
189
190 ldr r0, =IRQEN
191 ldr r2, [r0]
192 stmfd sp!, {r2} /* マスクビットの退避 */
193
194 ldr r2, [r1]
195 mov r0, #1
196 mov r3, #1
197find_bit_loop:
198 mov r1, r3, lsl r0
199 tst r2, r1
200 bne find_bit_end
201 add r0, r0, #1
202 bpl find_bit_loop
203find_bit_end:
204 mov r3, r0
205 ldr r0,=int_mask_table /* 割込みマスクテーブルの呼び出し*/
206 ldr r0,[r0,r3,lsl #2] /* r0<-割込みマスク */
207 ldr r1, =IRQCLR /* 割込みレジスタへのセット */
208 str r0,[r1]
209
210 ldr r0, =int_table /* 割込み疑似テーブルの読み出し */
211 ldr r0, [r0,r3,lsl #2] /* r0<-割込みハンドラ */
212
213
214 /*
215 * 未定義の割込みかチェック
216 */
217 cmp r0, #0x00
218 beq undefined_interrupt
219
220 /*
221 * 割り込み許可
222 */
223 mrs r2, cpsr
224 and r2, r2, #~CPSR_IRQ_BIT /* 割込み許可 */
225 msr cpsr,r2
226
227 /*
228 * Call Handler
229 */
230 mov lr, pc
231 bx r0
232
233 /*
234 * 割り込み禁止
235 */
236 mrs r2, cpsr
237 and r2, r2, #CPSR_FIQ_BIT /* FIQビットの継承 */
238 orr r2, r2, #(CPSR_SVC|CPSR_IRQ_BIT)
239 msr cpsr,r2
240
241 ldmfd sp!, {r0} /* マスクビットの復帰 */
242 ldr r1, =IRQEN /*割り込み許可*/
243 str r0, [r1]
244
245 /*
246 * 割込みネスト回数(interrupt_count) デクリメント
247 */
248 ldr r2, =interrupt_count
249 ldr r1, [r2]
250 sub r3, r1, #1
251 str r3, [r2]
252 cmp r3, #0x00
253 bne return_to_task_irq
254
255 /*
256 * タスクスタックの復帰
257 */
258 ldmfd sp!,{r0}
259 mov sp, r0
260
261 ldr r1, =reqflg /* Check reqflg */
262 ldr r0, [r1]
263 cmp r0, #0
264 beq return_to_task_irq
265 mov r0, #0
266 str r0, [r1] /* Clear reqflg */
267 b ret_int
268
269return_to_task_irq:
270 /*
271 * 復帰処理
272 * 割り込み許可となるがタスクコンテキスト上に保存しているため,
273 * 問題はない
274 */
275 ldmfd sp!,{r1} /* CPSRの復帰処理 */
276 mrs r2, cpsr /* FIQを継承 */
277 and r2, r2, #CPSR_FIQ_BIT
278 and r1, r1, #~CPSR_FIQ_BIT
279 orr r1, r1, r2
280 msr spsr, r1 /* 割り込み許可 */
281 ldmfd sp!,{r0-r3,ip,lr,pc}^ /*タスク復帰 + 割込み許可 */
282
283 /*
284 * 未定義の割込みがå…
285¥ã£ãŸã¨ãã«å‘¼ã³å‡ºã™
286 */
287undefined_interrupt:
288 b undef_interrupt
289
290
Note: See TracBrowser for help on using the repository browser.