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

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

initial

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