source: ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_config.h@ 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: 9.1 KB
Line 
1/*
2 * TOPPERS/SSP Kernel
3 * Smallest Set Profile Kernel
4 *
5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
6 * Toyohashi Univ. of Technology, JAPAN
7 * Copyright (C) 2005,2006 by Embedded and Real-Time Systems Laboratory
8 * Graduate School of Information Science, Nagoya Univ., JAPAN
9 * Copyright (C) 2008 by Witz Corporation, JAPAN
10 * Copyright (C) 2010-2014 by Naoki Saito
11 * Nagoya Municipal Industrial Research Institute, JAPAN
12 *
13 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì (1)`(4) ‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
14 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü•ÏE
15 * Ä”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
16 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ìŒ 
17 * •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[ƒX
18 * ƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
19 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
20 * ‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
21ƒƒ“ƒgi—˜—pŽÒƒ}
22 * ƒjƒ…
23ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•Û
24 * Ø‹K’è‚ðŒfÚ‚·‚邱‚ƁD
25 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
26 * ‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±‚ƁD
27 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
28ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
29ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ì
30 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
31 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É•ñ
32 * ‚·‚邱‚ƁD
33 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹ŠQ
34 * ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD‚Ü‚½C
35 * –{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝—R‚ÉŠî‚Ã
36 * ‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
37 *
38 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨‚æ
39 * ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I‚ɑ΂·
40 * ‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p
41 * ‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚ð•‰
42 * ‚í‚È‚¢D
43 *
44 */
45
46/*
47 * ƒvƒƒZƒbƒTˆË‘¶ƒ‚ƒWƒ…
48[ƒ‹iRL78j
49 *
50 * ‚±‚̃Cƒ“ƒNƒ‹[ƒhƒtƒ@ƒCƒ‹‚́C"<ƒvƒƒZƒbƒTŒ^”Ô>_config.h" ‚Ì‚Ý‚©‚ç
51 * ƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éD‘¼‚̃tƒ@ƒCƒ‹‚©‚ç’¼ÚƒCƒ“ƒNƒ‹[ƒh‚µ‚Ä‚Í‚È‚ç‚È‚¢D
52 */
53
54#ifndef TOPPERS_PRC_CONFIG_H
55#define TOPPERS_PRC_CONFIG_H
56
57/*
58 * (1) ƒRƒ“ƒeƒLƒXƒg‚ÉŠÖ‚·‚é’è‹`
59 */
60
61/* ‹¤—LƒXƒ^ƒbƒN—̈æ‚Ì‚½‚߂̃Xƒ^ƒbƒNƒ|ƒCƒ“ƒ^‰Šú’l‚𐶐¬‚·‚éƒ}ƒNƒ */
62#define TOPPERS_ISTKPT(istk, istksz) ((STK_T *)((char *)(istk) + (istksz)))
63
64/*
65 * (2) ƒVƒXƒeƒ€ó‘Ô‚ÉŠÖ‚·‚é’è‹`
66 */
67
68/*
69 * CPUƒƒbƒNó‘Ô‚Å‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN(IPM)‚Ì’l
70 * TIPM_LOCK‚́CCPUƒƒbƒNó‘Ô‚ð•\Œ»‚·‚銄ž‚Ý—Dæ“xƒ}ƒXƒN(IPM)‚Ì’l‚ðŽ¦‚·D
71 * ƒJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚݂ɑ΂·‚銄ž‚Ý—Dæ“x‚̍ŏ¬’l(TMIN_INTPRI)‚É“™‚µ‚¢D
72 */
73#ifndef TIPM_LOCK
74#define TIPM_LOCK TMIN_INTPRI
75#endif /* TIPM_LOCK */
76
77/*
78 * Š„ž‚Ý—Dæ“xƒ}ƒXƒN(IPM) ‚ƃvƒƒZƒbƒT‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN(ISP) ‚Ì•ÏŠ·
79 *
80 * RL78 ‚ł́CPSWƒŒƒWƒXƒ^‚̉ºˆÊ‚©‚琔‚¦‚ărƒbƒg1‚¨‚æ‚Ñ 2 ‚Ì 2 ƒrƒbƒg‚É
81 * ƒCƒ“ƒT[ƒrƒXEƒvƒ‰ƒCƒIƒŠƒeƒBEƒtƒ‰ƒO(ISP) ‚Ì’l‚ªŠi”[‚³‚ê‚éD
82 *
83 * ƒJ[ƒlƒ‹‚ÌŠÇ—‚·‚éIPM (-1‚©‚ç˜A‘±‚µ‚½•‰‚Ì’l) ‚ðŽg‚Á‚Ä
84 * ƒvƒƒZƒbƒT‚Ì ISP ‚𐧌䂷‚邽‚ß‚É•ÏŠ·‚ª•K—v‚Æ‚È‚éD
85 *
86 * Žw’肵‚½ƒŒƒxƒ‹ˆÈ‰º‚ÌŠ„ž‚Ý‚ðƒ}ƒXƒN‚·‚éê‡‚́CISP‚̐ݒè’l‚ð
87 * –Ú“I‚̃Œƒxƒ‹‚æ‚èˆê‚‚‚¢—Dæ“x(’l‚Æ‚µ‚Ă͏¬‚³‚¢)’l‚É‚·‚é•K—v‚ª‚ ‚éD
88 */
89#define IPM2ISP(ipm) (((uint8_t)(4-1+(ipm))) << 1U) /* IPM-->ISP(ipm=-3,-2,-1,0) */
90#define ISP2IPM(isp) ((PRI)((PRI)(isp >> 1U)+1-4)) /* ISP-->IPM */
91
92
93/*
94 * Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚Ì“Á•Ê‚È’l‚ɑ΂·‚é“à•”•\Œ»
95 */
96#define ISP_LOCK (IPM2ISP(TIPM_LOCK)) /* CPUƒƒbƒNó‘Ô‚Å‚Ì ISP */
97#define ISP_ENAALL (IPM2ISP(TIPM_ENAALL)) /* TIPM_ENAALL ‚Å‚Ì ISP */
98
99
100
101/*
102 * (3) Š„ž‚ݏˆ—ƒ‚ƒfƒ‹(Š„ž‚Ý—v‹ƒ‰ƒCƒ“)
103 */
104
105/*
106 * intno‚ªCdis_int^ena_int‚ɑ΂·‚銄ž‚ݔԍ†‚Æ‚µ‚Ä
107 * —LŒø‚È’l‚Å‚ ‚éê‡‚ÉtrueC‚»‚¤‚Å‚È‚¢ê‡‚Éfalse‚ð•Ô‚·ƒ}ƒNƒ
108 */
109#define VALID_INTNO_DISINT(intno) VALID_INTNO(intno)
110#define VALID_INTNO_CFGINT(intno) VALID_INTNO(intno)
111
112/*
113 * IPM ‚©‚犄ž‚ݐ§ŒäƒŒƒWƒXƒ^‚Å‚Ì•\Œ»‚É•ÏŠ·‚·‚éƒ}ƒNƒ
114 */
115#define IPM2ILVL(ipm) ((ipm)+4) // ipm=-1,-2,-3,-4
116
117
118/*
119 * (4) Š„ž‚ݏˆ—ƒ‚ƒfƒ‹(Š„ž‚݃nƒ“ƒhƒ‰)
120 */
121
122/*
123 * Š„ž‚݃nƒ“ƒhƒ‰‚Ì“üŒûˆ—‚̐¶¬ƒ}ƒNƒ
124 */
125#define _INT_ENTRY(inhno, inthdr) _kernel_##inthdr##_##inhno##_entry
126#define INT_ENTRY(inhno, inthdr) _INT_ENTRY(inhno , inthdr)
127
128#define _INTHDR_ENTRY(inhno, inhno_num ,inthdr) \
129 extern _kernel_##inthdr##_##inhno##_entry(void);
130#define INTHDR_ENTRY(inhno, inhno_num ,inthdr) _INTHDR_ENTRY(inhno, inhno_num ,inthdr)
131
132/*
133 * (5) CPU—áŠOˆ—ƒ‚ƒfƒ‹
134 */
135
136/*
137 * CPU—áŠOƒnƒ“ƒhƒ‰‚Ì“üŒûˆ—‚̐¶¬ƒ}ƒNƒ
138 */
139#define _EXC_ENTRY(excno , exchdr) _kernel_##exchdr##_##excno##_entry
140#define EXC_ENTRY(excno , exchdr) _EXC_ENTRY(excno , exchdr)
141
142#define _EXCHDR_ENTRY(excno , excno_num , exchdr) \
143 extern _kernel_##exchdr##_##excno##_entry(void);
144#define EXCHDR_ENTRY(excno , excno_num , exchdr) _EXCHDR_ENTRY(excno , excno_num , exchdr)
145
146/*
147 * (6) ‰Šú‰»EI—¹ˆ—
148 */
149
150// ’è‹`‚È‚µ
151
152#ifndef TOPPERS_MACRO_ONLY
153
154/*
155 * (1) ƒRƒ“ƒeƒLƒXƒg‚ÉŠÖ‚·‚é’è‹`
156 */
157
158/*
159 * ƒRƒ“ƒeƒLƒXƒg‚ÌŽQÆ
160 */
161extern bool_t sense_context(void);
162
163/*
164 * (2) ƒVƒXƒeƒ€ó‘Ô‚ÉŠÖ‚·‚é’è‹`
165 */
166
167/*
168 * CPUƒƒbƒNƒtƒ‰ƒOŽÀŒ»‚Ì‚½‚߂̕ϐ” (prc_config.c)
169 */
170extern bool_t lock_flag; /* CPUƒƒbƒNƒtƒ‰ƒO‚Ì’l */
171extern uint8_t saved_psw; /* CPUƒƒbƒNó‘Ԉڍs‘O‚ÌŠ„ž‚Ý—Dæ“xƒŒƒxƒ‹ */
172
173/*
174 * CPU ƒƒbƒNó‘Ԃւ̈ڍs
175 * ‚±‚̊֐”‚́CCPU ƒƒbƒNó‘Ô‚Ì‚Æ‚«‚ɌĂт¾‚³‚ê‚È‚¢‚±‚Æ‚ð‘O’ñ‚Æ‚·‚éD
176 */
177extern void t_lock_cpu(void);
178extern void i_lock_cpu(void);
179
180/*
181 * CPUƒƒbƒNó‘Ԃ̉ðœ
182 * ‚±‚̊֐”‚́CCPU ƒƒbƒNó‘Ô‚Ì‚Æ‚«‚ɂ̂݌Ăт¾‚³‚ê‚邱‚Æ‚ð‘O’ñ‚Æ‚·‚éD
183 */
184extern void t_unlock_cpu(void);
185extern void i_unlock_cpu(void);
186
187
188/*
189 * CPUƒƒbƒNó‘Ô‚ÌŽQÆ
190 */
191extern bool_t x_sense_lock(void);
192
193#define t_sense_lock() x_sense_lock()
194#define i_sense_lock() x_sense_lock()
195
196/*
197 * Š„ž‚Ý—Dæ“xƒ}ƒXƒN(IPM) ‚̐ݒè
198 * Žw’肵‚½Š„ž‚Ý—Dæ“x(-1, -2, ..., TMIN_INTPRI) ‚ðŒ³‚É
199 * ƒvƒƒZƒbƒT‚ÌŠ„ž‚Ý—Dæ“xƒŒƒxƒ‹ (IPL) ‚ðÝ’è‚·‚éD
200 */
201extern void x_set_ipm(PRI intpri);
202
203#define t_set_ipm(intpri) x_set_ipm(intpri)
204#define i_set_ipm(intpri) x_set_ipm(intpri)
205
206extern PRI x_get_ipm(void);
207
208#define i_get_ipm() x_get_ipm()
209#define t_get_ipm() t_get_ipm()
210
211/*
212 * (3) Š„ž‚ݏˆ—ƒ‚ƒfƒ‹(Š„ž‚Ý—v‹ƒ‰ƒCƒ“)
213 */
214
215/*
216 * Š„ž‚Ý—vˆö–ˆ‚̃Œƒxƒ‹’è‹`ƒe[ƒuƒ‹ (kernel_cfg.c ‚É‚æ‚éo—Í)
217 * Š„ž‚ݔԍ†(INTNO) ‚©‚犄ž‚Ý—Dæ“x‚ðŽæ“¾‚·‚邽‚ß‚ÉŽg—pD
218 */
219extern const PRI intpri_table[];
220
221/*
222 * Š„ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚̃Zƒbƒg(prc_config.c)
223 * Žw’肵‚½Š„ž‚ݔԍ†‚ɑΉž‚·‚銄ž‚Ý—v‹ƒ‰ƒCƒ“‚ÌŠ„ž‚Ý—v‹ƒtƒ‰ƒO‚ðƒZƒbƒg‚·‚éD
224 * Š„ž‚Ý‘®«‚ªÝ’肳‚ê‚Ä‚¢‚È‚¢Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚ÌŠ„ž‚ݔԍ†‚ðŽw’肵‚½
225 * ê‡‚́C’P‚É FALSE ‚ð•Ô‚·D
226 */
227extern bool_t x_disable_int(INTNO intno);
228
229#define t_disable_int(intno) x_disable_int(intno)
230#define i_disable_int(intno) x_disable_int(intno)
231
232/*
233 * Š„ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚̃NƒŠƒA(prc_config.c)
234 * Žw’肵‚½Š„ž‚ݔԍ†‚ɑΉž‚·‚銄ž‚Ý—v‹ƒ‰ƒCƒ“‚ÌŠ„ž‚Ý—v‹ƒtƒ‰ƒO‚ðƒNƒŠƒA‚·‚éD
235 * Š„ž‚Ý‘®«‚ªÝ’肳‚ê‚Ä‚¢‚È‚¢Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚ÌŠ„ž‚ݔԍ†‚ðŽw’肵‚½
236 * ê‡‚́C’P‚É FALSE ‚ð•Ô‚·D
237 */
238extern bool_t x_enable_int(INTNO intno);
239
240#define t_enable_int(intno) x_enable_int(intno)
241#define i_enable_int(intno) x_enable_int(intno)
242
243
244/*
245 * Š„ž‚Ý—v‹‚̃NƒŠƒA(prc_config.c)
246 */
247extern void x_clear_int(INTNO intno);
248
249#define t_clear_int(intno) x_clear_int(intno)
250#define i_clear_int(intno) x_clear_int(intno)
251
252
253/*
254 * Š„ž‚Ý—v‹‚̃`ƒFƒbƒN(prc_config.c)
255 */
256extern bool_t x_probe_int(INTNO intno);
257
258#define t_probe_int(intno) x_probe_int(intno)
259#define i_probe_int(intno) x_probe_int(intno)
260
261/*
262 * Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚Ì‘®«‚̐ݒè (prc_config.c)
263 */
264extern void x_config_int(INTNO intno, ATR intatr, PRI intpri);
265
266/*
267 * (4) Š„ž‚ݏˆ—ƒ‚ƒfƒ‹(Š„ž‚݃nƒ“ƒhƒ‰)
268 */
269
270/*
271 * Š„ž‚݃nƒ“ƒhƒ‰‚̐ݒè
272 *
273 * RL78‚ÍROM‚ÉŠ„ž‚݃xƒNƒ^‚ð”z’u‚·‚邽‚߁C–{ŠÖ”‚Í‹ó‚É’è‹`‚·‚éD
274 */
275#define x_define_inh(inhno, inthdr)
276
277/*
278 * Š„ž‚݃nƒ“ƒhƒ‰‚Ì“üŒû‚Å•K—v‚ȏˆ—
279 */
280#define i_begin_int(intno) /* “Á‚ɍs‚¤‚ׂ«ˆ—‚Í‚È‚¢ */
281
282/*
283 * Š„ž‚݃nƒ“ƒhƒ‰‚̏oŒû‚Å•K—v‚ȏˆ—
284 */
285#define i_end_int(intno) /* “Á‚ɍs‚¤‚ׂ«ˆ—‚Í‚È‚¢ */
286
287/*
288 * (5) CPU—áŠOˆ—ƒ‚ƒfƒ‹
289 */
290
291/*
292 * CPU—áŠOƒnƒ“ƒhƒ‰‚̐ݒè
293 * RL78 ‚Í ROM ‚ɃxƒNƒ^‚ð”z’u‚·‚邽‚߁C–{ŠÖ”‚Í‹ó‚É’è‹`‚·‚éD
294 */
295#define x_define_exc(excno, exchdr)
296
297/*
298 * (6) ‰Šú‰»EI—¹ˆ—
299 */
300
301/*
302 * ƒvƒƒZƒbƒTˆË‘¶‚̏‰Šú‰»(prc_config.c)
303 */
304extern void prc_initialize(void);
305
306/*
307 * dispatcher ŒÄ‚яo‚µ‘O‚Ƀ^[ƒQƒbƒgˆË‘¶‚Å•K—v‚ȏˆ—‚ðs‚¤‚½‚߂̊֐”
308 * (prc_support.asm)
309 */
310extern void start_dispatch(void);
311
312/*
313 * ƒJ[ƒlƒ‹‚̏I—¹ˆ—‚̌ďo‚µiprc_support.asmj
314 *
315 * call_exit_kernel‚́CƒJ[ƒlƒ‹‚̏I—¹Žž‚ɌĂяo‚³‚êCƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚ð
316 * ‰Šú‰»‚µCƒJ[ƒlƒ‹‚̏I—¹ˆ—iexit_kernelj‚ðŒÄ‚яo‚·D
317 */
318extern void call_exit_kernel(void);
319
320/*
321 * ƒvƒƒZƒbƒTˆË‘¶‚̏I—¹Žžˆ—(prc_config.c)
322 */
323extern void prc_terminate(void);
324
325/*
326 * (7) dispacher ‚Å‚ÌŠ„ž‚Ý‘Ò‚¿
327 */
328extern void idle_loop(void);
329
330
331#endif /* TOPPERS_MACRO_ONLY */
332#endif /* TOPPERS_PRC_CONFIG_H */
Note: See TracBrowser for help on using the repository browser.