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

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

initial

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