source: ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_support.S@ 93

Last change on this file since 93 was 93, checked in by nmir-saito, 8 years ago

add Combined package of SSP kernel for QB-R5F100LE-TB(RL78 processor)

File size: 10.9 KB
Line 
1/*
2 * TOPPERS/SSP Kernel
3 * Smallest Set Profile Kernel
4 *
5 * Copyright (C) 2008 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 * Copyright (C) 2010 by Meika Sugimoto
8 *
9 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
10 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
11 * •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
12 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
13 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
14 * ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
15 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
16 * —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
17ƒƒ“ƒgi—˜—p
18 * ŽÒƒ}ƒjƒ…
19ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
20 * ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
21 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
22 * —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
23 * ‚ƁD
24 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
25ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
26ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
27 * ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
28 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
29 * •ñ‚·‚邱‚ƁD
30 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
31 * ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
32 * ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
33 * —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
34 * –Ɛӂ·‚邱‚ƁD
35 *
36 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
37 * ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
38 * ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
39 * ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
40 * ‚̐ӔC‚𕉂í‚È‚¢D
41 *
42 */
43
44/*
45 * ƒvƒƒZƒbƒTˆË‘¶ƒ‚ƒWƒ…
46[ƒ‹ ƒAƒZƒ“ƒuƒŠŒ¾Œê•”iARM-M—pj
47 */
48
49#define TOPPERS_MACRO_ONLY
50#define UINT_C(val) (val) /* uint_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒ */
51#define ULONG_C(val) (val) /* ulong_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒ */
52#define CAST(type, val) (val) /* Œ^ƒLƒƒƒXƒg‚ðs‚¤ƒ}ƒNƒ */
53
54#include "kernel_impl.h"
55#include "arm_m.h"
56
57
58 .text
59
60/*
61 * ŠO•”ŽQÆ
62 */
63 .global intnest
64
65/*
66 * CPU—áŠOƒGƒ“ƒgƒŠ
67 *
68 * Š„ž‚݃Gƒ“ƒgƒŠ‚Əˆ—‚Ì“à—e‚Í“¯“™‚¾‚ªCƒƒO‚ÌŽí—Þ‚ªˆÙ‚Ȃ邽‚߁C
69 * •ª‚¯‚Ä‚¢‚éD
70 */
71 .align 2
72 .syntax unified
73 .code 16
74 .global exc_entry
75 .type exc_entry, function
76exc_entry:
77 /*
78 * —áŠO/Š„ž‚Ý‚ª”­¶‚·‚é‚ƁC”­¶Žž‚ɃAƒNƒeƒBƒu‚ȃXƒ^ƒbƒN‚ɃXƒNƒ‰
79 * ƒbƒ`ƒŒƒWƒXƒ^“™‚ª•Û‘¶‚³‚ê‚éD
80 * ‚±‚Ì“à—e‚ɉÁ‚¦‚āCCPU—áŠOƒnƒ“ƒhƒ‰‚ւ̏î•ñ‚Æ‚µ‚āCbasepri ‚Ì’l‚ƁC
81 * EXC_RETURN‚̏î•ñ‚ð‰Á‚¦‚Ä•Û‘¶‚·‚éDbasepri‚Ì’l‚́CCPU—áŠO‚©‚ç‚Ì
82 * ƒŠƒ^[ƒ“Žž‚ÉŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚Ì’l‚ðŒ³‚É–ß‚·‚½‚ß‚É‚à—p‚¢‚ç‚ê‚éD
83 *
84 * -----------
85 * | EXC_RETURN|
86 * -----------
87 * | basepri |
88 * -----------
89 * | R0 |
90 * -----------
91 * | R1 |
92 * -----------
93 * | R2 |
94 * -----------
95 * | R3 |
96 * -----------
97 * | R12 |
98 * -----------
99 * | LR |
100 * -----------
101 * | PC |
102 * -----------
103 * | xPSR |
104 * -----------
105 *
106 */
107
108 /*
109 * Š„ž‚Ý”­¶Žž‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ðƒXƒ^ƒbƒN‚É•Û‘¶‚·‚邽‚ߎ擾
110 */
111 mrs r2, basepri /* baepri‚Ì’l‚ðŽæ“¾ */
112 push {r2} /* Š„ž‚Ý”­¶Žž‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ðÏ‚Þ */
113 push {lr} /* EXC_RETURN ‚ðÏ‚Þ */
114 mov r0, sp /* CPU—áŠOƒnƒ“ƒhƒ‰‚ւ̈ø”‚Æ‚È‚é */
115
116 ldr r1 , =lock_flag /* CPUƒƒbƒNƒtƒ‰ƒO‚ð•Û‘¶ */
117 ldr r1 , [r1]
118 push {r1}
119
120 /* Š„ž‚݃lƒXƒg”‚̉ÁŽZ */
121 ldr r1 , =intnest
122 ldr r3 , [r1]
123 add r3 , #1
124 str r3 , [r1]
125
126 /*
127 * ‹¤’ʏˆ—
128 */
129exc_entry_2:
130 mrs r3, ipsr /* ƒnƒ“ƒhƒ‰ƒAƒhƒŒƒX‚ðŽæ“¾ */
131 ldr r1, =_kernel_exc_tbl
132 ldr r2, [r1, r3, lsl #2]
133
134#ifdef LOG_EXC_ENTER
135 push {r0, r2, r3}
136 mov r0, r3 /* —áŠO”ԍ†‚ðƒpƒ‰ƒ[ƒ^‚É */
137 bl log_exc_enter /* log_exc_enter‚ðŒÄ‚яo‚· */
138 pop {r0, r2, r3}
139#endif /* LOG_EXC_ENTER */
140
141#ifdef LOG_EXC_LEAVE
142 push { r3 } /* —áŠO”ԍ†‚ðƒXƒ^ƒbƒN‚Ö */
143#endif /* LOG_EXC_LEAVE */
144
145 /*
146 * CPU—áŠOƒnƒ“ƒhƒ‰‚̌Ăяo‚µ
147 */
148 blx r2
149
150 /* CPUƒƒbƒNƒtƒ‰ƒO‚ðŒ³‚É–ß‚· */
151 pop {r0}
152 ldr r1 , =lock_flag
153 str r0 , [r1]
154
155#ifdef LOG_EXC_LEAVE
156 pop { r0 } /* —áŠO”ԍ†‚ðˆø”‚É */
157 bl log_exc_leave /* log_exc_leave‚ðŒÄ‚яo‚· */
158#endif /* LOG_EXC_LEAVE */
159
160 b ret_exc
161
162
163/*
164 * Š„ž‚݃Gƒ“ƒgƒŠ
165 */
166 .align 2
167 .syntax unified
168 .code 16
169 .global int_entry
170 .type int_entry, function
171int_entry:
172 /*
173 * Š„ž‚Ý”­¶Žž‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ðƒXƒ^ƒbƒN‚É•Û‘¶‚·‚邽‚ߎ擾
174 */
175 mrs r2, basepri /* baepri‚Ì’l‚ðŽæ“¾ */
176 push {r2} /* Š„ž‚Ý”­¶Žž‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ðÏ‚Þ */
177 push {lr} /* EXC_RETURN ‚ðÏ‚Þ */
178 mov r0, sp /* –¢’è‹`‚ÌŠ„ž‚Ý‚ª”­¶‚µ‚½ê‡‚̏î•ñ‚Æ‚·‚é */
179
180 /*
181 * ‹¤’ʏˆ—
182 */
183int_entry_2:
184 /* Š„ž‚݃lƒXƒg”‚̉ÁŽZ */
185 ldr r1 , =intnest
186 ldr r3 , [r1]
187 add r3 , #1
188 str r3 , [r1]
189
190 mrs r3, ipsr /* ƒnƒ“ƒhƒ‰ƒAƒhƒŒƒX‚ðŽæ“¾ */
191 ldr r1, =_kernel_exc_tbl
192 ldr r2, [r1, r3, lsl #2]
193
194#ifdef LOG_INH_ENTER
195 push {r0,r2,r3}
196 mov r0, r3 /* Š„ž‚ݔԍ†‚ðƒpƒ‰ƒ[ƒ^‚É */
197 bl log_inh_enter /* log_inh_enter‚ðŒÄ‚яo‚· */
198 pop { r0,r2,r3 }
199#endif /* LOG_INH_ENTER */
200
201#ifdef LOG_INH_LEAVE
202 push { r3 } /* Š„ž‚ݔԍ†‚ðƒXƒ^ƒbƒN‚Ö */
203#endif /* LOG_INH_LEAVE */
204
205 /*
206 * CPU—áŠOƒnƒ“ƒhƒ‰‚̌Ăяo‚µ
207 */
208 blx r2
209
210#ifdef LOG_INH_LEAVE
211 pop { r0 } /* Š„ž‚ݔԍ†‚ðˆø”‚É */
212 bl log_inh_leave /* log_inh_leave‚ðŒÄ‚яo‚· */
213#endif /* LOG_INH_LEAVE */
214
215/*
216 * Š„ž‚Ý/—áŠOoŒû
217 *
218 * ret_exc/ret_int‚́CCPU—áŠO/Š„ž‚݃nƒ“ƒhƒ‰‚©‚ç–ß‚Á‚½’¼Œã‚ÉŽÀs‚·‚é
219 * ƒ‹[ƒ`ƒ“‚Å‚ ‚éD
220 */
221ret_exc:
222ret_int:
223 /*
224 * Š„ž‚݃ƒbƒNó‘Ô‚Æ‚·‚éD‚±‚ÌŽž“_‚ł́CCPUƒƒbƒNó‘Ô‚É‚Í‚È‚ç‚È‚¢
225 * ibasepri‚Ælock_flag‚Æsaved_iipm‚͍XV‚µ‚È‚¢jD
226 *
227 * Š„ž‚݃ƒbƒNó‘Ô‚Æ‚·‚é‚̂́C–ß‚èæ‚̃Rƒ“ƒeƒLƒXƒg‚̃`ƒFƒbƒN‚ƁC
228 * –ß‚èæ‚ª”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚Å‚ ‚Á‚½ê‡‚̃Šƒ^[ƒ“‚ðƒAƒgƒ~ƒbƒN
229 * ‚ɍs‚¤‚½‚ß‚Å‚ ‚éDbsepri‚ðCPUƒƒbƒN‚Ì’l‚É‚·‚邱‚Æ‚Å‚àƒAƒgƒ~ƒb
230 * ƒN‚ȃ`ƒFƒbƒN‚Æ•œ‹A‚͉”\‚Å‚ ‚邪CŠ„ž‚Ý‚©‚烊ƒ^[ƒ“‚µ‚Ä‚àC
231 * basepri ‚̐ݒè“à—e‚ÍŒ³‚É–ß‚ç‚È‚¢‚½‚߁CŽg—p‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢D
232 * ˆê•ûCFAULTMASK‚́CŠ„ž‚Ý‚©‚ç‚̃Šƒ^[ƒ“ˆ—‚É‚æ‚Á‚āC'0'‚ɃNƒŠ
233 * ƒA‚³‚ê‚éD
234 */
235 cpsid f
236
237 /*
238 * –ß‚èæ‚̃Rƒ“ƒeƒLƒXƒg‚Ì”»’è
239 *
240 * intnest‚ª0‚©‚Ç‚¤‚©‚Å”»’f‚·‚é
241 *
242 */
243 /* Š„ž‚݃lƒXƒg”‚ÌŒ¸ŽZ */
244 ldr r1 , =intnest
245 ldr r3 , [r1]
246 add r3 , #-1
247 str r3 , [r1]
248
249 cmp r3 , #0
250 beq ret_int_2
251
252 /*
253 * ˆê’i–Ú‚ÌŠ„ž‚݂̏oŒûˆ—
254 */
255ret_int_1:
256 /*
257 * ‚±‚±‚É‚ÍŠ„ž‚݃ƒbƒNó‘ԁiFAULTMASK‚ªƒZƒbƒgj‚³‚ꂽó‘Ô‚Å—ˆ‚éD
258 * Threadƒ‚[ƒh‚©‚ç‚̃Šƒ^[ƒ“‚É‚æ‚莩“®“I‚ÉŠ„ž‚݃ƒbƒN‰ðœó‘Ô‚É‚È‚éD
259 * Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚ÍŠ„ž‚Ý‘O‚ɏó‘Ô‚É–ß‚·D
260 */
261 pop { r2 }
262 pop { r1 }
263 msr basepri, r1 /* Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚ðŠ„ž‚Ý‘O‚ɏó‘Ô‚Ö */
264 bx r2 /* ƒŠƒ^[ƒ“ */
265
266ret_int_2:
267 ldr r0, =reqflg /* reqflg‚ªfalse‚È‚ç‚»‚Ì‚Ü‚Ü–ß‚é */
268 ldr r1, [r0]
269 cmp r1 , #0
270 beq ret_int_1 /* false‚È‚çret_int_1‚Ö */
271ret_int_3:
272 mov r1, #0 /* reqflg‚ðfalse‚É */
273 str r1, [r0]
274
275 /*
276 * CPUƒƒbƒNó‘ԂɈڍs‚·‚éD
277 *
278 * ƒJ[ƒlƒ‹‚ÌŠÇ—“à‚ÌŠ„ž‚Ý‚ð‹ÖŽ~‚·‚é‚悤‚Ébasepri‚ðÝ’肵C
279 * lock_flag‚ðXV‚·‚éD
280 * ‚±‚ÌŽž“_‚ÅCPUƒƒbƒNó‘Ô‚Æ‚·‚é‚̂́Cdispatcher‚Ö•ªŠò‚·‚鎞‚É
281 * CPUƒƒbƒNó‘Ô‚É‚È‚Á‚Ä‚¢‚é•K—v‚ª‚ ‚邽‚ß‚Å‚ ‚éD
282 * ‚È‚¨C‚±‚̏ˆ—‚ÌŒãCThreadƒ‚[ƒh‚ւ̈ڍsˆ—‚ðs‚È‚¤‚½‚߁CŠ„ž‚Ý
283 * ƒƒbƒNó‘Ô(FAULTMASK‚ð"1")‚Í•ÛŽ‚·‚éD
284 */
285 ldr r1, =IIPM_LOCK /* CPUƒƒbƒNó‘Ô */
286 msr basepri, r1
287 mov r1, #0x01 /* lock_flag ‚ð true‚É */
288 ldr r0, =lock_flag
289 str r1, [r0]
290
291 /*
292 * lr‚ðŽæ‚èo‚·D‚½‚¾‚µ’x‰„ƒfƒBƒXƒpƒbƒ`‚̍ۂɂàŽg‚¤‚½‚߁C
293 * ƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚Í‘€ì‚µ‚È‚¢D
294 */
295
296 ldr r2 , [sp]
297
298 /*
299 * Threadƒ‚[ƒh‚ֈڍs‚·‚éD
300 *
301 * dispatcher‚âcall_texrn‚ðŒÄ‚яo‚·ê‡‚́CThreadƒ‚[ƒh‚Å‚ ‚é•K
302 * —v‚ª‚ ‚邽‚߁CPSPƒXƒ^ƒbƒNã‚Ƀ_ƒ~[‚Ì—áŠOƒtƒŒ[ƒ€‚ð’u‚¢‚āC
303 * ‹[Ž—“I‚ÉŠ„ž‚݃nƒ“ƒhƒ‰‚©‚烊ƒ^[ƒ“‚·‚éD
304 * ƒŠƒ^[ƒ“‚Æ“¯Žž‚ÉFAULTMASK‚ªŽ©“®“I‚ɃNƒŠƒA‚³‚êCƒJ[ƒlƒ‹ŠÇ—ŠO‚Ì
305 * Š„ž‚Ý‚ª‹–‰Â‚³‚ê‚éD
306 */
307 ldr r0, =ret_int_4 /* PC */
308 ldr r1, =EPSR_T /* xPSR(Tƒrƒbƒg‚ª'1'‚Å‚ ‚é•K—v‚ª‚ ‚é) */
309 stmfd sp!, {r0-r1} /* ƒ_ƒ~[ƒtƒŒ[ƒ€‚ðƒXƒ^ƒbƒNã‚ÉÏ‚Þ */
310 sub sp, #(EXC_FRAME_SIZE - (4*2)) /* r0-r3,r12,lr‚Ì“à—e‚͐ݒ肷‚é•K—v‚ª‚È‚¢ */
311 bx r2 /* Threadƒ‚[ƒh‚ֈڍs */
312
313ret_int_4:
314 bl search_schedtsk /* Š„ž‚Ý’†‚Å‹N“®‚³‚ꂽƒ^ƒXƒN‚ðŽÀs */
315 bl run_task
316ret_int_r:
317 svc 0 /* SVC‚̌Ăяo‚µ */
318
319/*
320 * ’x‰„ƒfƒBƒXƒpƒbƒ`‚©‚ç‚Ì•œ‹AŽž‚Ɉꎞ“I‚ÉŠ„ž‚Ý
321 * ƒRƒ“ƒeƒLƒXƒg‚Ɉڍs‚·‚邽‚ß‚ÌSVCƒR[ƒ‹ƒnƒ“ƒhƒ‰
322 */
323
324 .align 2
325 .thumb
326 .thumb_func
327 .globl kernel_svc_handler
328kernel_svc_handler:
329 /*
330 * Š„ž‚ݏˆ—‚©‚ç‚̃Šƒ^[ƒ“‚É‚æ‚èCCPUƒƒbƒN‰ðœó‘ԂɈڍs‚·‚é‚æ
331 * ‚¤€”õ‚·‚éD
332 */
333 cpsid f /* Š„ž‚݃ƒbƒNó‘Ô‚Ö */
334 ldr r2 , [ sp , #(EXC_FRAME_SIZE) ] /* lr‚ðƒXƒ^ƒbƒN‚©‚çŽæ“¾ */
335 add sp, #EXC_FRAME_SIZE + 8 /* ƒXƒ^ƒbƒN‚ðŽÌ‚Ä‚é */
336 mov r0, #0
337 ldr r1, =lock_flag /* CPUƒƒbƒN‰ðœó‘Ô‚Ö */
338 str r0, [r1]
339 msr basepri , r0
340 bx r2 /* ƒŠƒ^[ƒ“ */
341
342/*
343 * ƒfƒBƒXƒpƒbƒ`ƒƒ‚Ì“®ìŠJŽn
344 */
345 .align 2
346 .thumb
347 .thumb_func
348 .globl start_dispatch
349start_dispatch:
350 /*
351 * ‚±‚̃‹[ƒ`ƒ“‚́CƒJ[ƒlƒ‹‹N“®Žž‚ɁC‚·‚ׂĂ̊„ž‚Ý‚ð‹ÖŽ~‚µ‚½ó‘Ô
352 * iŠ„ž‚݃ƒbƒNó‘Ô‚Æ“¯“™j‚ŌĂяo‚³‚ê‚éD‚Ü‚½CŠ„ž‚݃‚[ƒhi”ñ
353 * ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚Æ“¯“™j‚ŌĂяo‚³‚ê‚邱‚Æ‚ð‘z’肵‚Ä‚¢‚éD
354 *
355 * prc_initialize‚ŁClock_flag‚ðtrue‚ɁCsaved_iipm‚ðIIPM_ENAALL‚É
356 * ‰Šú‰»‚µ‚Ä‚¢‚邽‚߁CƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚ð‹–‰Â‚·‚邱‚ƂŁC
357 * CPUƒƒbƒNó‘ԁEiƒ‚ƒfƒ‹ã‚́jŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô‚É‚È‚éD
358 * ‚Ü‚½Ctask_initialize‚Ådisdsp‚ðfalse‚ɏ‰Šú‰»‚µ‚Ä‚¢‚邽‚߁CƒfƒB
359 * ƒXƒpƒbƒ`‹–‰Âó‘Ô‚É‚È‚Á‚Ä‚¢‚éD
360 */
361 ldr r0,=istkpt /* MSP‚ð‰Šú‰» */
362 ldr r1,[r0] /* start_dispatchŒÄ‚яo‚µŽž‚ɌĂяo‚µ—p‚É */
363 msr msp, r1 /* Žg—p‚µ‚Ä‚¢‚邽‚ߏ‰Šú‰»‚·‚é */
364 ldr r1, =IIPM_LOCK /* ƒJ[ƒlƒ‹ŠÇ—“à‚ÌŠ„ž‚Ý‚ð‹ÖŽ~ */
365 msr basepri, r1
366 cpsie f /* ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚ð‹–‰Â */
367 b dispatcher
368
369/*
370 * ƒJ[ƒlƒ‹‚̏I—¹ˆ—‚̌ďo‚µ
371 *
372 * ƒXƒ^ƒbƒN‚ð”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚ɐ؂è‘Ö‚¦D
373 *
374 */
375 .text
376 .syntax unified
377 .code 16
378 .globl call_exit_kernel
379 .type call_exit_kernel, function
380call_exit_kernel:
381 b exit_kernel /* ƒJ[ƒlƒ‹‚̏I—¹ˆ—‚ðŒÄ‚Ô */
382
383
384/*
385 * ”÷­ŽžŠÔ‘Ò‚¿
386 */
387 .text
388 .syntax unified
389 .code 16
390 .globl sil_dly_nse
391 .type sil_dly_nse, function
392sil_dly_nse:
393 sub r0, r0, #SIL_DLY_TIM1
394 cmp r0, #0
395 bgt sil_dly_nse1
396 mov pc, lr
397sil_dly_nse1:
398 sub r0, r0, #SIL_DLY_TIM2
399 cmp r0, #0
400 bgt sil_dly_nse1
401 mov pc, lr
Note: See TracBrowser for help on using the repository browser.