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

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

initial

File size: 7.0 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-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * 2003 by Advanced Data Controls, Corp
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 * @(#) $Id: sys_support.arm,v 1.4 2003/12/19 11:48:37 honda Exp $
52 */
53
54#define _MACRO_ONLY
55#include "jsp_kernel.h"
56#include "integrator.h"
57
58
59
60
61/*
62 * 低レベルのターゲットシステム依存の初期化
63 *
64 * スタートアップモジュールの中で,メモリ初期化の前に呼び出される.
65 */
66
67 .text
68 .align 2
69 .global hardware_init_hook
70hardware_init_hook:
71#ifdef ARM920T_CORE
72 ldr r1, =cache_enable
73 ldr r1,[r1]
74 mcr p15,0,r1,c1,c0,0
75#endif
76 mov pc, lr
77cache_enable
78 .word CACHE_ENABLE
79/*
80 *
81 * 割込みの出å…
82¥ã‚Šå£å‡¦ç†
83 *
84 */
85 .text
86 .align 4
87 .global IRQ_Handler
88IRQ_Handler:
89
90 /*
91 * 割込みモード
92 *
93 * cpsrがspsr_irqに復帰å…
94ˆãŒr14_irq(lp)にå…
95¥ã‚Šï¼Œ
96 * spsr_irqとr14_irqとr13(sp)_irqが r14,r13となる.
97 */
98
99 /*
100 * タスクの動作時モード(スーパーバイザーモード)へ
101 */
102 mov sp,#(CPSR_SVC | CPSR_FIQ_BIT | CPSR_IRQ_BIT)
103 msr cpsr_all, sp
104 stmfd sp!, {r0-r3,ip,lr,pc} /* pcはダミー */
105
106
107
108 /*
109 * spsrと戻り番地を取得するためにIRQモードへ
110 */
111 mov r0,#(CPSR_IRQ | CPSR_FIQ_BIT | CPSR_IRQ_BIT)
112 msr cpsr,r0
113 sub r0,lr,#4
114 mrs r1,spsr
115
116 /*
117 * スーパーバイザーモードに
118 */
119 msr cpsr_all, sp
120 str r0, [sp,#0x18] /* Store pc */
121 stmfd sp!,{r1} /* spsr */
122
123
124 /*
125 * 多重割り込みか判定
126 */
127 ldr r2, =interrupt_count
128 ldr r3, [r2]
129 add r0,r3,#1
130 str r0, [r2]
131 cmp r3, #0x00
132
133 moveq r2,sp /* ネスト割り込みでない場合 */
134 ldreq sp,=STACKTOP /* スタックの変更 */
135 stmeqfd sp!,{r2} /* タスクスタックの保存 */
136
137 /* 割込み疑似テーブルの読み出し */
138#ifdef SIMIO
139 ldr r2, =IRQ_TM2
140#else
141 ldr r1, =IRQ0_STATUS
142 ldr r2, [r1]
143#endif
144 /*割り込み要因を判定*/
145 mov r0,r2
146 bl find_bit
147 mov r3,r0
148 /*優å…
149ˆåº¦ã®ä½Žã„割り込みをマスク*/
150 ldr r1,=IRQ0_ENABLECLR
151 ldr r0,=irq_mask
152 ldr r0,[r0,r3,lsl #2]
153 str r0,[r1]
154
155 stmfd sp!,{r0}
156
157 /*IRQレジスタがクリアされるまで待
158つ
159 * Ref: ARM9ES_Rev2_TRM.pdf p.4-4
160 */
161 ldr r1,=poll_intreg
162 mov lr,pc
163 mov pc,r1
164
165 ldr r0,=int_table
166 /*r0 <-- 割り込みハンドラ*/
167 ldr r0, [r0,r3, lsl #2]
168 /*
169 * 未定義の割込みかチェック
170 */
171 cmp r0, #0x00
172 beq undefined_interrupt
173
174 /* 割り込み許可*/
175 mov r2,#(CPSR_SVC|CPSR_FIQ_BIT)
176 msr cpsr,r2
177
178 /*
179 * Call Handler
180 */
181 mov lr, pc
182 mov pc, r0
183
184
185 /*
186 * 割り込み禁止
187 */
188 mov r2,#(CPSR_SVC|CPSR_FIQ_BIT|CPSR_IRQ_BIT)
189 msr cpsr,r2
190
191 ldmfd sp!,{r0}
192 ldr r1,=IRQ0_ENABLESET /*割り込み許可*/
193 str r0,[r1]
194
195 /*
196 * 割込みネスト回数(interrupt_count) デクリメント
197 */
198 ldr r2, =interrupt_count
199 ldr r1, [r2]
200 sub r3, r1, #1
201 str r3, [r2]
202 cmp r3, #0x00
203 bne return_to_task_irq
204
205 /*
206 * タスクスタックの復帰
207 */
208 ldmfd sp!,{r0}
209 mov sp, r0
210
211 ldr r1, =reqflg /* Check reqflg */
212 ldr r0, [r1]
213 cmp r0, #0
214 beq return_to_task_irq
215 mov r0, #0
216 str r0, [r1] /* Clear reqflg */
217 b ret_int
218
219
220return_to_task_irq:
221 /*
222 * 復帰処理
223 * 割り込み許可となるがタスクコンテキスト上に保存しているため,
224 * 問題はない
225 */
226
227 ldmfd sp!,{r1} /* CPSRの復帰処理 */
228 msr spsr, r1 /* 割り込み許可 */
229 ldmfd sp!,{r0-r3,ip,lr,pc}^ /*タスク復帰 + 割込み許可 */
230
231 /*
232 * 未定義の割込みがå…
233¥ã£ãŸã¨ãã«å‘¼ã³å‡ºã™
234 */
235undefined_interrupt:
236 b undef_interrupt
Note: See TracBrowser for help on using the repository browser.