source: ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_config.h@ 95

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

ファイルの mime-type 変更

  • Property svn:mime-type set to text/plain; charset=shift_jis
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 * 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
15 * 再配布(以下,利用と呼ぶ)することを無償で許諾する.
16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
17 * 表示,この利用条件および下記の無保証規定が,そのままの形でソース
18 * コード中に含まれていること.
19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
20 * できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
21 * ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
22 * 証規定を掲載すること.
23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
24 * できない形で再配布する場合には,次のいずれかの条件を満たすこと.
25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
26 * 権表示,この利用条件および下記の無保証規定を掲載すること.
27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
28 * 告すること.
29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
30 * からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
31 * 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
32 * く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
33 *
34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
35 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
36 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
37 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負
38 * わない.
39 *
40 */
41
42/*
43 * プロセッサ依存モジュール(RL78)
44 *
45 * このインクルードファイルは,"<プロセッサ型番>_config.h" のみから
46 * インクルードされる.他のファイルから直接インクルードしてはならない.
47 */
48
49#ifndef TOPPERS_PRC_CONFIG_H
50#define TOPPERS_PRC_CONFIG_H
51
52/*
53 * (1) コンテキストに関する定義
54 */
55
56/* 共有スタック領域のためのスタックポインタ初期値を生成するマクロ */
57#define TOPPERS_ISTKPT(istk, istksz) ((STK_T *)((char *)(istk) + (istksz)))
58
59/*
60 * (2) システム状態に関する定義
61 */
62
63/*
64 * CPUロック状態での割込み優先度マスク(IPM)の値
65 * TIPM_LOCKは,CPUロック状態を表現する割込み優先度マスク(IPM)の値を示す.
66 * カーネル管理の割込みに対する割込み優先度の最小値(TMIN_INTPRI)に等しい.
67 */
68#ifndef TIPM_LOCK
69#define TIPM_LOCK TMIN_INTPRI
70#endif /* TIPM_LOCK */
71
72/*
73 * 割込み優先度マスク(IPM) とプロセッサの割込み優先度マスク(ISP) の変換
74 *
75 * RL78 では,PSWレジスタの下位から数えてビット1および 2 の 2 ビットに
76 * インサービス・プライオリティ・フラグ(ISP) の値が格納される.
77 *
78 * カーネルの管理するIPM (-1から連続した負の値) を使って
79 * プロセッサの ISP を制御するために変換が必要となる.
80 *
81 * 指定したレベル以下の割込みをマスクする場合は,ISPの設定値を
82 * 目的のレベルより一つ高い優先度(値としては小さい)値にする必要がある.
83 */
84#define IPM2ISP(ipm) (((uint8_t)(4-1+(ipm))) << 1U) /* IPM-->ISP(ipm=-3,-2,-1,0) */
85#define ISP2IPM(isp) ((PRI)((PRI)(isp >> 1U)+1-4)) /* ISP-->IPM */
86
87
88/*
89 * 割込み優先度マスクの特別な値に対する内部表現
90 */
91#define ISP_LOCK (IPM2ISP(TIPM_LOCK)) /* CPUロック状態での ISP */
92#define ISP_ENAALL (IPM2ISP(TIPM_ENAALL)) /* TIPM_ENAALL での ISP */
93
94
95
96/*
97 * (3) 割込み処理モデル(割込み要求ライン)
98 */
99
100/*
101 * intnoが,dis_int/ena_intに対する割込み番号として
102 * 有効な値である場合にtrue,そうでない場合にfalseを返すマクロ
103 */
104#define VALID_INTNO_DISINT(intno) VALID_INTNO(intno)
105#define VALID_INTNO_CFGINT(intno) VALID_INTNO(intno)
106
107/*
108 * IPM から割込み制御レジスタでの表現に変換するマクロ
109 */
110#define IPM2ILVL(ipm) ((ipm)+4) // ipm=-1,-2,-3,-4
111
112
113/*
114 * (4) 割込み処理モデル(割込みハンドラ)
115 */
116
117/*
118 * 割込みハンドラの入口処理の生成マクロ
119 */
120#define _INT_ENTRY(inhno, inthdr) _kernel_##inthdr##_##inhno##_entry
121#define INT_ENTRY(inhno, inthdr) _INT_ENTRY(inhno , inthdr)
122
123#define _INTHDR_ENTRY(inhno, inhno_num ,inthdr) \
124 extern _kernel_##inthdr##_##inhno##_entry(void);
125#define INTHDR_ENTRY(inhno, inhno_num ,inthdr) _INTHDR_ENTRY(inhno, inhno_num ,inthdr)
126
127/*
128 * (5) CPU例外処理モデル
129 */
130
131/*
132 * CPU例外ハンドラの入口処理の生成マクロ
133 */
134#define _EXC_ENTRY(excno , exchdr) _kernel_##exchdr##_##excno##_entry
135#define EXC_ENTRY(excno , exchdr) _EXC_ENTRY(excno , exchdr)
136
137#define _EXCHDR_ENTRY(excno , excno_num , exchdr) \
138 extern _kernel_##exchdr##_##excno##_entry(void);
139#define EXCHDR_ENTRY(excno , excno_num , exchdr) _EXCHDR_ENTRY(excno , excno_num , exchdr)
140
141/*
142 * (6) 初期化・終了処理
143 */
144
145// 定義なし
146
147#ifndef TOPPERS_MACRO_ONLY
148
149/*
150 * (1) コンテキストに関する定義
151 */
152
153/*
154 * コンテキストの参照
155 */
156extern bool_t sense_context(void);
157
158/*
159 * (2) システム状態に関する定義
160 */
161
162/*
163 * CPUロックフラグ実現のための変数 (prc_config.c)
164 */
165extern bool_t lock_flag; /* CPUロックフラグの値 */
166extern uint8_t saved_psw; /* CPUロック状態移行前の割込み優先度レベル */
167
168/*
169 * CPU ロック状態への移行
170 * この関数は,CPU ロック状態のときに呼びだされないことを前提とする.
171 */
172extern void t_lock_cpu(void);
173extern void i_lock_cpu(void);
174
175/*
176 * CPUロック状態の解除
177 * この関数は,CPU ロック状態のときにのみ呼びだされることを前提とする.
178 */
179extern void t_unlock_cpu(void);
180extern void i_unlock_cpu(void);
181
182
183/*
184 * CPUロック状態の参照
185 */
186extern bool_t x_sense_lock(void);
187
188#define t_sense_lock() x_sense_lock()
189#define i_sense_lock() x_sense_lock()
190
191/*
192 * 割込み優先度マスク(IPM) の設定
193 * 指定した割込み優先度(-1, -2, ..., TMIN_INTPRI) を元に
194 * プロセッサの割込み優先度レベル (IPL) を設定する.
195 */
196extern void x_set_ipm(PRI intpri);
197
198#define t_set_ipm(intpri) x_set_ipm(intpri)
199#define i_set_ipm(intpri) x_set_ipm(intpri)
200
201extern PRI x_get_ipm(void);
202
203#define i_get_ipm() x_get_ipm()
204#define t_get_ipm() t_get_ipm()
205
206/*
207 * (3) 割込み処理モデル(割込み要求ライン)
208 */
209
210/*
211 * 割込み要因毎のレベル定義テーブル (kernel_cfg.c による出力)
212 * 割込み番号(INTNO) から割込み優先度を取得するために使用.
213 */
214extern const PRI intpri_table[];
215
216/*
217 * 割込み要求禁止フラグのセット(prc_config.c)
218 * 指定した割込み番号に対応する割込み要求ラインの割込み要求フラグをセットする.
219 * 割込み属性が設定されていない割込み要求ラインの割込み番号を指定した
220 * 場合は,単に FALSE を返す.
221 */
222extern bool_t x_disable_int(INTNO intno);
223
224#define t_disable_int(intno) x_disable_int(intno)
225#define i_disable_int(intno) x_disable_int(intno)
226
227/*
228 * 割込み要求禁止フラグのクリア(prc_config.c)
229 * 指定した割込み番号に対応する割込み要求ラインの割込み要求フラグをクリアする.
230 * 割込み属性が設定されていない割込み要求ラインの割込み番号を指定した
231 * 場合は,単に FALSE を返す.
232 */
233extern bool_t x_enable_int(INTNO intno);
234
235#define t_enable_int(intno) x_enable_int(intno)
236#define i_enable_int(intno) x_enable_int(intno)
237
238
239/*
240 * 割込み要求のクリア(prc_config.c)
241 */
242extern void x_clear_int(INTNO intno);
243
244#define t_clear_int(intno) x_clear_int(intno)
245#define i_clear_int(intno) x_clear_int(intno)
246
247
248/*
249 * 割込み要求のチェック(prc_config.c)
250 */
251extern bool_t x_probe_int(INTNO intno);
252
253#define t_probe_int(intno) x_probe_int(intno)
254#define i_probe_int(intno) x_probe_int(intno)
255
256/*
257 * 割込み要求ラインの属性の設定 (prc_config.c)
258 */
259extern void x_config_int(INTNO intno, ATR intatr, PRI intpri);
260
261/*
262 * (4) 割込み処理モデル(割込みハンドラ)
263 */
264
265/*
266 * 割込みハンドラの設定
267 *
268 * RL78はROMに割込みベクタを配置するため,本関数は空に定義する.
269 */
270#define x_define_inh(inhno, inthdr)
271
272/*
273 * 割込みハンドラの入口で必要な処理
274 */
275#define i_begin_int(intno) /* 特に行うべき処理はない */
276
277/*
278 * 割込みハンドラの出口で必要な処理
279 */
280#define i_end_int(intno) /* 特に行うべき処理はない */
281
282/*
283 * (5) CPU例外処理モデル
284 */
285
286/*
287 * CPU例外ハンドラの設定
288 * RL78 は ROM にベクタを配置するため,本関数は空に定義する.
289 */
290#define x_define_exc(excno, exchdr)
291
292/*
293 * (6) 初期化・終了処理
294 */
295
296/*
297 * プロセッサ依存の初期化(prc_config.c)
298 */
299extern void prc_initialize(void);
300
301/*
302 * dispatcher 呼び出し前にターゲット依存で必要な処理を行うための関数
303 * (prc_support.asm)
304 */
305extern void start_dispatch(void);
306
307/*
308 * カーネルの終了処理の呼出し(prc_support.asm)
309 *
310 * call_exit_kernelは,カーネルの終了時に呼び出され,スタックポインタを
311 * 初期化し,カーネルの終了処理(exit_kernel)を呼び出す.
312 */
313extern void call_exit_kernel(void);
314
315/*
316 * プロセッサ依存の終了時処理(prc_config.c)
317 */
318extern void prc_terminate(void);
319
320/*
321 * (7) dispacher での割込み待ち
322 */
323extern void idle_loop(void);
324
325
326#endif /* TOPPERS_MACRO_ONLY */
327#endif /* TOPPERS_PRC_CONFIG_H */
Note: See TracBrowser for help on using the repository browser.