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

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

initial

File size: 6.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 *
9 * 上記著作権者
10は,以下の (1)〜(4) の条件か,Free Software Foundation
11 * によってå…
12¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
13 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
16 * 利用と呼ぶ)することを無償で許諾する.
17 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
18 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19 * スコード中に含まれていること.
20 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
21 * 用できる形で再é…
22å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
23å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
24 * 者
25マニュアルなど)に,上記の著作権表示,この利用条件および下記
26 * の無保証規定を掲載すること.
27 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28 * 用できない形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
30 * と.
31 * (a) 再é…
32å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
33マニュアルなど)に,上記の著
34 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
35 * (b) 再é…
36å¸ƒã®å½¢æ…
37‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
38 * 報告すること.
39 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
40 * 害からも,上記著作権者
41およびTOPPERSプロジェクトをå…
42è²¬ã™ã‚‹ã“と.
43 *
44 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
45お
46 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
47 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
48 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
49 *
50 * @(#) $Id$
51 */
52
53#define _MACRO_ONLY
54#include "jsp_kernel.h"
55#include <ezarm7.h>
56
57
58
59
60
61/*
62 *
63 * 割込みの出å…
64¥ã‚Šå£å‡¦ç†
65 *
66 */
67 .text
68 .align 4
69 .global IRQ_Handler
70IRQ_Handler:
71
72 /*
73 * 割込みモード
74 *
75 * cpsrがspsr_irqに復帰å…
76ˆãŒr14_irq(lp)にå…
77¥ã‚Šï¼Œ
78 * spsr_irqとr14_irqとr13(sp)_irqが r14,r13となる.
79 */
80
81 /*
82 * タスクの動作時モード(スーパーバイザーモード)へ
83 */
84 mov sp,#(CPSR_SVC | CPSR_FIQ_BIT | CPSR_IRQ_BIT)
85 msr cpsr_all, sp
86 stmfd sp!, {r0-r3,ip,lr,pc} /* pcはダミー */
87
88
89
90 /*
91 * spsrと戻り番地を取得するためにIRQモードへ
92 */
93 mov r0,#(CPSR_IRQ | CPSR_FIQ_BIT | CPSR_IRQ_BIT)
94 msr cpsr,r0
95 sub r0,lr,#4
96 mrs r1,spsr
97
98 /*
99 * スーパーバイザーモードに
100 */
101 msr cpsr_all, sp
102 str r0, [sp,#0x18] /* Store pc */
103 stmfd sp!,{r1} /* spsr */
104
105
106 /*
107 * 多重割り込みか判定
108 */
109 ldr r2, =interrupt_count
110 ldr r3, [r2]
111 add r0,r3,#1
112 str r0, [r2]
113 cmp r3, #0x00
114
115 moveq r2,sp /* ネスト割り込みでない場合 */
116 ldreq sp,=STACKTOP /* スタックの変更 */
117 stmeqfd sp!,{r2} /* タスクスタックの保存 */
118
119
120 /*
121 * 割込みハンドラアドレス取得との保存
122 */
123 ldr r2, vic_vect_addr
124 ldr r0, [r2]
125 ldr r2, =handler_address
126 str r0, [r2]
127
128 /*
129 * 割り込み許可
130 */
131 mov r2,#(CPSR_SVC|CPSR_FIQ_BIT)
132 msr cpsr,r2
133
134 /*
135 * Call Handler
136 */
137 mov lr, pc
138 mov pc, r0
139
140 /*
141 * 割り込み禁止
142 */
143 mov r2,#(CPSR_SVC|CPSR_FIQ_BIT|CPSR_IRQ_BIT)
144 msr cpsr,r2
145
146 /*
147 * EOI発行
148 */
149 ldr r2, =handler_address
150 ldr r0, [r2]
151 ldr r2, vic_vect_addr
152 str r0, [r2]
153
154 /*
155 * 割込みネスト回数(interrupt_count) デクリメント
156 */
157 ldr r2, =interrupt_count
158 ldr r1, [r2]
159 sub r3, r1, #1
160 str r3, [r2]
161 cmp r3, #0x00
162 bne return_to_task_irq
163
164 /*
165 * タスクスタックの復帰
166 */
167 ldmfd sp!,{r0}
168 mov sp, r0
169
170 ldr r1, =reqflg /* Check reqflg */
171 ldr r0, [r1]
172 cmp r0, #0
173 beq return_to_task_irq
174 mov r0, #0
175 str r0, [r1] /* Clear reqflg */
176 b ret_int
177
178return_to_task_irq:
179 /*
180 * 復帰処理
181 * 割り込み許可となるがタスクコンテキスト上に保存しているため,
182 * 問題はない
183 */
184 ldmfd sp!,{r1} /* CPSRの復帰処理 */
185 msr spsr, r1 /* 割り込み許可 */
186 ldmfd sp!,{r0-r3,ip,lr,pc}^ /*タスク復帰 + 割込み許可 */
187
188 /*
189 * 未定義の割込みがå…
190¥ã£ãŸã¨ãã«å‘¼ã³å‡ºã™
191 */
192undefined_interrupt:
193 b undef_interrupt
194
195vic_int_enable:
196 .long 0xfffff010
197vic_inten_clear:
198 .long 0xfffff014
199vic_vect_addr:
200 .long 0xfffff030
201vic_vect_def_addr:
202 .long 0xfffff034
203vic_vect_addr_15:
204 .long 0xfffff13c
205
206 .section .bss
207handler_address:
208 .long 0
Note: See TracBrowser for help on using the repository browser.