source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/tlcs900-toshiba/cpu_config.h@ 26

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

initial

File size: 13.1 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) 2006-2010 by Witz Corporation, JAPAN
7 *
8 * The above copyright holders grant permission gratis to use,
9 * duplicate, modify, or redistribute (hereafter called use) this
10 * software (including the one made by modifying this software),
11 * provided that the following four conditions (1) through (4) are
12 * satisfied.
13 *
14 * (1) When this software is used in the form of source code, the above
15 * copyright notice, this use conditions, and the disclaimer shown
16 * below must be retained in the source code without modification.
17 *
18 * (2) When this software is redistributed in the forms usable for the
19 * development of other software, such as in library form, the above
20 * copyright notice, this use conditions, and the disclaimer shown
21 * below must be shown without modification in the document provided
22 * with the redistributed software, such as the user manual.
23 *
24 * (3) When this software is redistributed in the forms unusable for the
25 * development of other software, such as the case when the software
26 * is embedded in a piece of equipment, either of the following two
27 * conditions must be satisfied:
28 *
29 * (a) The above copyright notice, this use conditions, and the
30 * disclaimer shown below must be shown without modification in
31 * the document provided with the redistributed software, such as
32 * the user manual.
33 *
34 * (b) How the software is to be redistributed must be reported to the
35 * TOPPERS Project according to the procedure described
36 * separately.
37 *
38 * (4) The above copyright holders and the TOPPERS Project are exempt
39 * from responsibility for any type of damage directly or indirectly
40 * caused from the use of this software and are indemnified by any
41 * users or end users of this software from any and all causes of
42 * action whatsoever.
43 *
44 * THIS SOFTWARE IS PROVIDED "AS IS." THE ABOVE COPYRIGHT HOLDERS AND
45 * THE TOPPERS PROJECT DISCLAIM ANY EXPRESS OR IMPLIED WARRANTIES,
46 * INCLUDING, BUT NOT LIMITED TO, ITS APPLICABILITY TO A PARTICULAR
47 * PURPOSE. IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS AND THE
48 * TOPPERS PROJECT BE LIABLE FOR ANY TYPE OF DAMAGE DIRECTLY OR
49 * INDIRECTLY CAUSED FROM THE USE OF THIS SOFTWARE.
50 *
51 * 上記著作権者
52は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
53 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
54 * 再é…
55å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
56 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
57 * 表示,この利用条件および下記の無保証規定が,そのままの形でソース
58 * コード中に含まれていること.
59 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
60 * できる形で再é…
61å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
62å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
63マ
64 * ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
65 * 証規定を掲載すること.
66 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
67 * できない形で再é…
68å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこと.
69 * (a) 再é…
70å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
71マニュアルなど)に,上記の著作
72 * 権表示,この利用条件および下記の無保証規定を掲載すること.
73 * (b) 再é…
74å¸ƒã®å½¢æ…
75‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに報
76 * 告すること.
77 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
78 * からも,上記著作権者
79およびTOPPERSプロジェクトをå…
80è²¬ã™ã‚‹ã“と.また,
81 * 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
82 * く請求からも,上記著作権者
83およびTOPPERSプロジェクトをå…
84è²¬ã™ã‚‹ã“と.
85 *
86 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
87およ
88 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
89 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
90 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負
91 * わない.
92 *
93 * @(#) $Id: cpu_config.h,v 1.1 2006/04/10 08:19:25 honda Exp $
94 */
95
96/*
97 * プロセッサ依存モジュール(TLCS-900L1用)
98 *
99 * このインクルードファイルは,t_config.h のみからインクルードされる.
100 * 他のファイルから直接インクルードしてはならない.
101 */
102
103#ifndef _CPU_CONFIG_H_
104#define _CPU_CONFIG_H_
105
106/*
107 * カーネルの内
108部識別名のリネーム
109 */
110#include <cpu_rename.h>
111
112/*
113 * プロセッサの特殊命令のインライン関数定義
114 */
115#ifndef _MACRO_ONLY
116#include <cpu_insn.h>
117#endif /* _MACRO_ONLY */
118
119/*
120 * chg_ipm/get_ipm をサポートするかどうかの定義
121 */
122#define SUPPORT_CHG_IPM
123
124/*
125 * TCB 中のフィールドのビット幅
126の定義
127 *
128 * cpu_context.h にå…
129¥ã‚Œã‚‹æ–¹ãŒã‚¨ãƒ¬ã‚¬ãƒ³ãƒˆã ãŒï¼Œå‚ç…
130§ã®ä¾å­˜æ€§ã®é–¢ä¿‚で,
131 * cpu_context.h にはå…
132¥ã‚Œã‚‰ã‚Œãªã„.
133 */
134#define TBIT_TCB_TSTAT 8 /* tstat フィールドのビット幅
135 */
136#define TBIT_TCB_PRIORITY 4 /* priority フィールドのビット幅
137 */
138
139#ifndef _MACRO_ONLY
140/*
141 * タスクコンテキストブロックの定義
142 */
143typedef struct task_context_block {
144 VP xsp; /* スタックポインタ */
145 FP pc; /* プログラムカウンタ */
146} CTXB;
147
148/*
149 * 割込み/CPU例外ネストカウンタ
150 */
151extern UINT intcnt;
152
153/*
154 * 割込みマスク操作ライブラリ
155 *
156 * 割込みマスク(intmask)は,IPM(Interrupt Priority Mask)を12ビット
157 * 左にシフトしたものである.
158 */
159
160/*
161 * 現在の割込みマスクの読出し
162 */
163#pragma inline current_intmask
164UH
165current_intmask()
166{
167 return(current_sr() & 0x7000);
168}
169
170/*
171 * 割込みマスクの設定
172 */
173#pragma inline set_intmask
174void
175set_intmask(UH intmask)
176{
177 set_sr((current_sr() & ~0x7000) | intmask);
178}
179
180/*
181 * システム状æ…
182‹å‚ç…
183§
184 */
185
186#pragma inline sense_context
187BOOL
188sense_context()
189{
190 Asm(" ldc hl, intnest");
191 return __HL;
192}
193
194#pragma inline sense_lock
195BOOL
196sense_lock()
197{
198 return(current_intmask() == 0x7000);
199}
200
201#define t_sense_lock sense_lock
202#define i_sense_lock sense_lock
203
204/*
205 * CPUロックとその解除(タスクコンテキスト用)
206 *
207 * task_intmask は,chg_ipm をサポートするための変数.chg_ipm をサポー
208 * トしない場合には,task_intmask が常に 0 になっていると考えればよい.
209 */
210
211#ifdef SUPPORT_CHG_IPM
212extern UH task_intmask; /* タスクコンテキストでの割込みマスク */
213#endif /* SUPPORT_CHG_IPM */
214
215#pragma inline t_lock_cpu
216void
217t_lock_cpu()
218{
219 disint();
220}
221
222#pragma inline t_unlock_cpu
223void
224t_unlock_cpu()
225{
226#ifdef SUPPORT_CHG_IPM
227 /*
228 * t_unlock_cpu が呼び出されるのは CPUロック状æ…
229‹ã®ã¿ã§ã‚るた
230 * め,処理の途中で task_intmask が書き換わることはない.
231 */
232 set_intmask(task_intmask);
233#else /* SUPPORT_CHG_IPM */
234 enaint();
235#endif /* SUPPORT_CHG_IPM */
236}
237
238/*
239 * CPUロックとその解除(非タスクコンテキスト用)
240 */
241
242extern UH int_intmask; /* 非タスクコンテキストでの割込みマスク */
243
244#pragma inline i_lock_cpu
245void
246i_lock_cpu()
247{
248 UH intmask;
249
250 /*
251 * 一時変数 intmask を使っているのは,current_intmask() を呼
252 * んだ直後に割込みが発生し,起動された割込みハンドラ内
253で
254 * int_intmask が変更される可能性があるためである.
255 */
256 intmask = current_intmask();
257 disint();
258 int_intmask = intmask;
259}
260
261#pragma inline i_unlock_cpu
262void
263i_unlock_cpu()
264{
265 set_intmask(int_intmask);
266}
267
268/*
269 * タスクディスパッチャ
270 */
271
272/*
273 * 最高優å…
274ˆé †ä½ã‚¿ã‚¹ã‚¯ã¸ã®ãƒ‡ã‚£ã‚¹ãƒ‘ッチ(cpu_support.asm)
275 *
276 * dispatch は,タスクコンテキストから呼び出されたサービスコール処理
277 * 内
278で,CPUロック状æ…
279‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
280 */
281extern void dispatch(void);
282
283/*
284 * 現在のコンテキストを捨ててディスパッチ(cpu_support.asm)
285 *
286 * exit_and_dispatch は,CPUロック状æ…
287‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
288 */
289extern void exit_and_dispatch(void);
290
291/*
292 * 割込みハンドラ/CPU例外ハンドラの設定
293 */
294
295/*
296 * 割込みハンドラの設定
297 *
298 * ベクトル番号 inhno の割込みハンドラの起動番地を inthdr に設定する.
299 * 割込みハンドラを登録するベクタテーブルはROM上に取り,
300 * そこに書き込む. そのためここでは何もしない.
301 */
302
303#pragma inline define_inh
304void
305define_inh(INHNO inhno, FP inthdr)
306{
307}
308
309/*
310 * CPU例外ハンドラの設定
311 *
312 * ベクトル番号 excno のCPU例外ハンドラの起動番地を exchdr に設定する.
313 * 割込みハンドラを登録するベクタテーブルはROM上に取り,
314 * そこに書き込む. そのためここでは何もしない.
315 */
316#pragma inline define_exc
317void
318define_exc(EXCNO excno, FP exchdr)
319{
320}
321
322
323/*
324 * 割込みハンドラ/CPU例外ハンドラの出å…
325¥å£å‡¦ç†
326 */
327
328/*
329 * 割込みハンドラのå…
330¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
331 *
332 * 割込み発生時のスタックの切り替えをソフトウェアで実現する.このため,
333 * 割込みハンドラå…
334¥ã‚Šå£ã«ã¦å‰²è¾¼ã¿ç¦æ­¢å‡¦ç†ã‚’行う.なお,割込み発生から
335 * 割込み禁止を行うまでの間に多重割込みが発生すると,多重割込みである
336 * ことをソフトウェアで検知できないため,最初に発生した割込み処理を実
337 * 行しないままタスクディスパッチする可能性がある.この多重割込みを検
338 * 知するためにハードウェア INTNEST レジスタを利用する.
339 *
340 * TLCS-900 Family C Compiler では XIZ レジスタ以外はå…
341¨ã¦ã‚¹ã‚¯ãƒ©ãƒƒãƒãƒ¬
342 * ジスタである.なお,å…
343¥ã‚Šå£å‡¦ç†ã§ä½¿ç”¨ã™ã‚‹ã‚¹ã‚¯ãƒ©ãƒƒãƒãƒ¬ã‚¸ã‚¹ã‚¿ã®ã¿ã‚’こ
344 * こで保持し,残りは割込みå…
345±é€šå‡¦ç†ã§ä¿æŒã™ã‚‹ï¼Ž
346 *
347 * ここを修正する場合は,下のCPU例外ハンドラå…
348¥å£å‡¦ç†ç”Ÿæˆãƒžã‚¯ãƒ­ã‚‚同様に
349 * 修正すること.
350 */
351#define INTHDR_ENTRY(inthdr) \
352extern void _kernel_interrupt(void); \
353extern void inthdr##(void); \
354void inthdr##_entry(void) \
355{ \
356Asm(" push xwa "); /* 使用するスクラッチレジスタを保存 */ \
357Asm(" push sr"); /* 割込み発生時のIFFを取得 */ \
358Asm(" pop wa"); \
359Asm(" ei 7"); /* 割込み禁止 */ \
360Asm(" push xhl "); /* 使用するスクラッチレジスタを保存 */ \
361Asm(" ld xhl, _" #inthdr ); /* ユーザハンドラポインタを取得 */ \
362Asm(" jp __kernel_interrupt" ); /* 割込みå…
363±é€šå‡¦ç†ã¸ */ \
364}
365/*
366 * 上記を修正する場合は,下のCPU例外ハンドラå…
367¥å£å‡¦ç†ç”Ÿæˆãƒžã‚¯ãƒ­ã‚‚同様に
368 * 修正すること.
369 */
370
371
372#define INT_ENTRY(inthdr) inthdr##_entry
373
374/*
375 * CPU例外ハンドラの出å…
376¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
377 *
378 * CPU例外ハンドラは,非タスクコンテキストで実行する.
379 * CPU例外ハンドラは,割込みハンドラと同等処理とする.
380 * なお,例外ハンドラの引数型が異なるため,同等処理のマクロを別途
381 * 生成する.
382 *
383 * ここを修正する場合は,上の割込みハンドラå…
384¥å£å‡¦ç†ç”Ÿæˆãƒžã‚¯ãƒ­ã‚‚同様に
385 * 修正すること.
386 */
387
388#define EXCHDR_ENTRY(exchdr) \
389extern void _kernel_interrupt(void); \
390extern void exchdr##(VP p_excinf); \
391void exchdr##_entry(void) \
392{ \
393Asm(" push xwa "); /* 使用するスクラッチレジスタを保存 */ \
394Asm(" push sr"); /* 割込み発生時のIFFを取得 */ \
395Asm(" pop wa"); \
396Asm(" ei 7"); /* 割込み禁止 */ \
397Asm(" push xhl "); /* 使用するスクラッチレジスタを保存 */ \
398Asm(" ld xhl, _" #exchdr ); /* ユーザハンドラポインタを取得 */ \
399Asm(" jp __kernel_interrupt" ); /* 割込みå…
400±é€šå‡¦ç†ã¸ */ \
401}
402/*
403 * ここを修正する場合は,上の割込みハンドラå…
404¥å£å‡¦ç†ç”Ÿæˆãƒžã‚¯ãƒ­ã‚‚同様に
405 * 修正すること.
406 */
407
408#define EXC_ENTRY(exchdr) exchdr##_entry
409
410
411/*
412 * CPU例外の発生した時のシステム状æ…
413‹ã®å‚ç…
414§
415 */
416
417/*
418 * CPU例外の発生した時のコンテキストの参ç…
419§
420 */
421#pragma inline exc_sense_context
422BOOL
423exc_sense_context(VP p_excinf)
424{
425 Asm(" ldc hl, intnest");
426 return ( __HL > 1 );
427}
428
429/*
430 * CPU例外の発生した時のCPUロック状æ…
431‹ã®å‚ç…
432§
433 */
434#pragma inline exc_sense_lock
435BOOL
436exc_sense_lock(VP p_excinf)
437{
438 return ((*((UH *) p_excinf) & 0x7000) == 0x7000);
439}
440
441/*
442 * プロセッサ依存の初期化
443 */
444extern void cpu_initialize(void);
445
446/*
447 * プロセッサ依存の終了時処理
448 */
449extern void cpu_terminate(void);
450
451#endif /* _MACRO_ONLY */
452#endif /* _CPU_CONFIG_H_ */
Note: See TracBrowser for help on using the repository browser.