source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/m16c-renesas/cpu_config.h@ 363

Last change on this file since 363 was 363, checked in by ykominami, 5 years ago

add tags/jsp-1.4.4-full-UTF8

  • Property svn:executable set to *
File size: 9.9 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-2004 by Naoki Saito
9 * Nagoya Municipal Industrial Research Institute, JAPAN
10 * Copyright (C) 2003-2004 by Ryosuke Takeuchi
11 * Platform Development Center RICOH COMPANY,LTD. JAPAN
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 * @(#) $Id: cpu_config.h,v 1.4 2006/08/03 04:15:57 honda Exp $
55 */
56
57
58/*
59 * プロセッサ依存モジュール(M16C用)
60 *
61 * このインクルードファイルは,t_config.h のみからインクルードされる.
62 * 他のファイルから直接インクルードしてはならない.
63 */
64
65#ifndef _CPU_CONFIG_H_
66#define _CPU_CONFIG_H_
67
68#ifdef NEED_API
69#include "api.h"
70#endif /* NEED_API */
71
72/*
73 * カーネルの内
74部識別名のリネーム
75 */
76#include <cpu_rename.h>
77
78/*
79 * プロセッサの特殊命令のインライン関数定義
80 */
81#ifndef _MACRO_ONLY
82#include <cpu_insn.h>
83#endif /* _MACRO_ONLY */
84
85/*
86 * TCB 中のフィールドのビット幅
87の定義
88 *
89 * cpu_context.h にå…
90¥ã‚Œã‚‹æ–¹ãŒã‚¨ãƒ¬ã‚¬ãƒ³ãƒˆã ãŒï¼Œå‚ç…
91§ã®ä¾å­˜æ€§ã®é–¢ä¿‚で,
92 * cpu_context.h にはå…
93¥ã‚Œã‚‰ã‚Œãªã„.
94 */
95#define TBIT_TCB_TSTAT 8 /* tstat フィールドのビット幅
96 */
97#define TBIT_TCB_PRIORITY 4 /* priority フィールドのビット幅
98 */
99
100#ifndef _MACRO_ONLY
101
102/*
103 * タスクコンテキストブロックの定義
104 */
105typedef struct task_context_block {
106 void *sp; /* スタックポインタ(near固定) */
107 FP pc; /* プログラムカウンタ */
108} CTXB;
109
110/*
111 * 割込み/CPU例外ネストカウンタ
112 */
113extern char intnest;
114
115/*
116 * システム状æ…
117‹ã®å‚ç…
118§
119 */
120
121/*
122 * 現在のコンテキストを返す関数.
123 * 非タスクコンテキストならTRUEを返す.
124 */
125Inline BOOL
126sense_context(void)
127{
128 /* ネストカウンタ0より大なら非タスクコンテキスト */
129 return(intnest > 0);
130}
131
132/*
133 * 現在のCPUロック状æ…
134‹ã‚’返す関数.
135 * CPUロック状æ…
136‹ãªã‚‰TRUEを返す.
137 */
138Inline BOOL
139sense_lock(void)
140{
141 return((current_flgreg() & FLG_I_MASK) == 0);
142}
143
144#define t_sense_lock sense_lock
145#define i_sense_lock sense_lock
146
147/*
148 * CPUロックとその解除
149 */
150Inline void
151lock_cpu(void)
152{
153 disint();
154}
155
156Inline void
157unlock_cpu(void)
158{
159 enaint();
160}
161
162#define t_lock_cpu lock_cpu
163#define i_lock_cpu lock_cpu
164#define t_unlock_cpu unlock_cpu
165#define i_unlock_cpu unlock_cpu
166
167/*
168 * タスクディスパッチャ
169 */
170
171/*
172 * 最高優å…
173ˆé †ä½ã‚¿ã‚¹ã‚¯ã¸ã®ãƒ‡ã‚£ã‚¹ãƒ‘ッチ(cpu_support.a30)
174 *
175 * dispatch は,タスクコンテキストから呼び出された
176 * サービスコール処理の中から,CPUロック状æ…
177‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
178 */
179extern void dispatch(void);
180
181/*
182 * 現在のコンテキストを捨ててディスパッチ(cpu_support.a30)
183 * exit_and_dispatch は,CPUロック状æ…
184‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
185 */
186extern void exit_and_dispatch(void);
187
188/*
189 * 割込みハンドラ/CPU例外ハンドラの設定
190 */
191
192/*
193 * 割込みハンドラの設定
194 *
195 * ベクトル番号 inhno の割込みハンドラの起動番地を inthdr に設定する.
196 * 割込みハンドラを登録するベクタテーブルはROM上に取り,
197 * そこに書き込む. そのためここでは何もしない.
198 */
199
200Inline void
201define_inh(INHNO inhno, FP inthdr)
202{
203}
204
205/*
206 * CPU例外ハンドラの設定
207 *
208 * ベクトル番号 excno のCPU例外ハンドラの起動番地を exchdr に設定する.
209 * 割込みハンドラを登録するベクタテーブルはROM上に取り,
210 * そこに書き込む. そのためここでは何もしない.
211 */
212Inline void
213define_exc(EXCNO excno, FP exchdr)
214{
215}
216
217/*
218 * 割込みハンドラ/CPU例外ハンドラの出å…
219¥å£å‡¦ç†
220 *
221 * 割込み/CPU例外が発生時のCPUの状æ…
222‹ã¯æ¬¡ã®ã¨ãŠã‚Š.
223 *
224 * FLGレジスタのIビットは 0(割込み禁止)
225 * FLGレジスタのIPLは受け付けた割込みのIPL
226 * FLGレジスタのUビットは, 割込みの種類によって異なるが,
227 * カーネルではISPのみを使用し, USPを使用していないため,
228 * ここでは問題とならない.
229 *
230 * 割込み/例外発生時には, 自動的に FLG, PCがスタックへ保存される.
231 * 出å…
232¥ã‚Šå£å‡¦ç†ã§ã¯ã¾ãšæ®‹ã‚Šã®ãƒ¬ã‚¸ã‚¹ã‚¿ã‚’スタックに保存する.
233 * 初段の割込みの場合はタスクのスタックに,
234 * 多重割り込みの場合は割込み用のスタックに, それぞれ保存される.
235 *
236 * その後, スタックポインタの値を r1 に,
237 * 割込みハンドラのアドレスを a1 と a0 に格納した状æ…
238‹ã§
239 * 割込み出å…
240¥å£å‡¦ç†ã®å¾ŒåŠã¸ã‚¸ãƒ£ãƒ³ãƒ—する.
241 */
242
243/*
244 * 割込みハンドラの出å…
245¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
246 *
247 * 割込み発生時、実行中のレジスタの値をスタックに退避する.その後、ス
248 * タックの値をR1レジスタにセットしアセンブラで記述されたハンドリング
249 * プログラムに分岐する.
250 */
251
252#define INTHDR_ENTRY(inthdr)\
253extern void inthdr##_entry(void);\
254asm(" .glb _" #inthdr " ");\
255asm(" .glb __kernel_interrupt ");\
256asm(" .section program, code, align ");\
257asm("_" #inthdr "_entry: ");\
258asm(" pushm r0,r1,r2,r3,a0,a1,sb,fb ; レジスタをタスクスタックへ退避");\
259asm(" stc isp, r1 ; スタックポインタを取り出し ");\
260asm(" mov.w #_" #inthdr "&0ffffh, a0; 割込みハンドラの下位2バイト ");\
261asm(" mov.w #_" #inthdr ">>16, a1 ; 割込みハンドラの上位2バイト ");\
262asm(" jmp __kernel_interrupt ; 割込み処理ルーチン後半へ ");
263
264#define INT_ENTRY(inthdr) inthdr##_entry
265
266/*
267 * CPU例外ハンドラの出å…
268¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
269 *
270 * CPU例外ハンドラの基本的な処理は割込みハンドラとå…
271±æœ‰ã™ã‚‹ï¼Žå‰²è¾¼ã¿ãƒ
272 * ンドラとの違いはスタック値を退避したR1レジスタの値をp_excinfとして
273 * 使用するか、しないかの差異のみです.
274 */
275
276#define EXCHDR_ENTRY(exchdr)\
277extern void exchdr##_entry(void);\
278asm(" .glb $" #exchdr " ");\
279asm(" .glb __kernel_interrupt ");\
280asm(" .section program, code, align ");\
281asm("_" #exchdr "_entry: ");\
282asm(" pushm r0,r1,r2,r3,a0,a1,sb,fb ; レジスタをタスクスタックへ退避");\
283asm(" stc isp, r1 ; スタックポインタを取り出し ");\
284asm(" mov.w #$" #exchdr "&0ffffh, a0; 割込みハンドラの下位2バイト ");\
285asm(" mov.w #$" #exchdr ">>16, a1 ; 割込みハンドラの上位2バイト ");\
286asm(" jmp __kernel_interrupt ; 割込み処理ルーチン後半へ ");
287
288#define EXC_ENTRY(exchdr) exchdr##_entry
289
290/*
291 * CPU例外の発生した時のシステム状æ…
292‹ã®å‚ç…
293§
294 */
295
296/*
297 * CPU例外の発生した時のコンテキストの参ç…
298§
299 */
300Inline BOOL
301exc_sense_context(VP p_excinf)
302{
303 /*
304 * ネストカウンタが1より大なら非タスクコンテキスト
305 */
306 return( intnest > 1);
307}
308
309/*
310 * CPU例外の発生した時のCPUロック状æ…
311‹ã®å‚ç…
312§
313 */
314Inline BOOL
315exc_sense_lock(VP p_excinf)
316{
317 /*
318 * 例外発生前のFLGレジスタIビットが0ならCPUロック状æ…
319‹
320 *
321 * 下式の定数18はCPU例外å…
322¥ã‚Šå£å‡¦ç†ã§ãƒ¬ã‚¸ã‚¹ã‚¿ãŒã‚¹ã‚¿ãƒƒã‚¯ã«ã©ã†
323 * 保存されているかに依存して決定する数値
324 */
325 return( ( *(char *)((char *)p_excinf+18) & FLG_I_MASK ) == 0);
326}
327
328/*
329 * プロセッサ依存の初期化(cpu_config.c)
330 */
331extern void cpu_initialize(void);
332
333/*
334 * プロセッサ依存の終了時処理(cpu_config.c)
335 */
336extern void cpu_terminate(void);
337
338/*
339 * 割り込み制御レジスタ割り込み優å…
340ˆåº¦å¤‰æ›´
341 */
342extern void set_ic_ilvl(VP addr, UB val);
343
344#endif /* _MACRO_ONLY */
345#endif /* _CPU_CONFIG_H_ */
Note: See TracBrowser for help on using the repository browser.