source: uKadecot/trunk/ssp/arch/rx630_ccrx/prc.tf

Last change on this file was 262, checked in by coas-nagasima, 7 years ago

uIPを更新
プロジェクトファイルを更新

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/plain; charset=SHIFT_JIS
File size: 9.7 KB
Line 
1$
2$ TOPPERS/SSP Kernel
3$ Smallest Set Profile Kernel
4$
5$ Copyright (C) 2008-2010 by Witz Corporation, JAPAN
6$ Copyright (C) 2013 by Mitsuhiro Matsuura
7$
8$ 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
9$ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
10$ 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
11$ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12$ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
13$ スコード中に含まれていること.
14$ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15$ 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
16$ 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
17$ の無保証規定を掲載すること.
18$ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
19$ 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
20$ と.
21$ (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
22$ 作権表示,この利用条件および下記の無保証規定を掲載すること.
23$ (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
24$ 報告すること.
25$ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
26$ 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
27$ また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
28$ 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
29$ 免責すること.
30$
31$ 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32$ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
33$ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
34$ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
35$ の責任を負わない.
36$
37$
38
39$
40$ アーキテクチャ依存テンプレート(RX630用)
41$
42
43
44
45$
46$ ATT_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号
47$
48
49$INTNO_ATTISR_VALID = INTNO_VALID$
50$INHNO_ATTISR_VALID = INHNO_VALID$
51
52
53$
54$ DEF_INT/DEF_EXCで使用できる割込みハンドラ番号/CPU例外ハンドラ番号
55$
56
57$INHNO_DEFINH_VALID = INHNO_VALID$
58$EXCNO_DEFEXC_VALID = EXCNO_VALID$
59
60
61$
62$ CFG_INTで使用できる割込み番号と割込み優先度
63$
64
65$INTNO_CFGINT_VALID = INHNO_VALID$
66$INTPRI_CFGINT_VALID = { -7, -6,...,-1 }$
67
68
69$
70$ ターゲット非依存部に含まれる標準の割込み管理機能/例外管理機能の初期化処理を使用する
71$
72
73$OMIT_INITIALIZE_INTERRUPT = 0$
74$OMIT_INITIALIZE_EXCEPTION = 0$
75
76
77$
78$ スタックサイズのチェック方法指定
79$
80
81$CHECK_STKSZ_ALIGN = 4$
82
83
84$
85$ タスクスタックサイズの最小値
86$
87$ タスク起動時に4byte,
88$ 割込み入口処理にて48byte, CPU例外入口処理にて84byte,
89$ であるため, 最小値は88byteとする.
90$
91
92$TARGET_MIN_STKSZ = 88$
93
94
95$
96$ 定数定義
97$
98
99$TA_POSEDGE = TA_EDGE$
100
101
102$
103$ ターゲット依存の割込み属性の定義
104$
105
106$TARGET_INTATR = TA_POSEDGE | TA_NEGEDGE | TA_BOTHEDGE | TA_LOWLEVEL$
107
108
109$
110$ ターゲット依存の割込みハンドラ属性の定義
111$
112
113$TARGET_INHATR = TA_NONKERNEL$
114
115
116$
117$ カーネル管理外割込みハンドラは固定させないため,
118$ INTNO_FIX_KERNEL
119$ INHNO_FIX_KERNEL
120$ INHNO_FIX_NONKERNEL
121$ INHNO_FIX_NONKERNEL
122$ を定義しない.
123$
124
125
126$
127$ 標準テンプレートファイルのインクルード
128$
129$INCLUDE "kernel.tf"$
130
131
132
133$
134$ CFG_INTのターゲット依存のエラーチェック
135$
136
137$FOREACH intno INT.ORDER_LIST$
138$ IRQ割込み番号かどうかをチェック
139 $IF ( LENGTH( FIND( INTNO_INT, INT.INTNO[intno] ) ) != 0 )$
140
141$ TA_POSEDGEとTA_NEGEDGEが同時に設定されている場合
142 $IF ((INT.INTATR[intno] & ( TA_POSEDGE | TA_NEGEDGE )) == ( TA_POSEDGE | TA_NEGEDGE ))$
143 $ERROR$ INT.TEXT_LINE[intno]:$FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "intatr", INT.INTATR[intno], INT.INTNO[intno], "CFG_INT")$$END$
144 $END$
145
146$ TA_POSEDGEとTA_BOTHEDGEが同時に設定されている場合
147 $IF ((INT.INTATR[intno] & ( TA_POSEDGE | TA_BOTHEDGE )) == ( TA_POSEDGE | TA_BOTHEDGE ))$
148 $ERROR$ INT.TEXT_LINE[intno]:$FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "intatr", INT.INTATR[intno], INT.INTNO[intno], "CFG_INT")$$END$
149 $END$
150
151$ TA_NEGEDGEとTA_BOTHEDGEが同時に設定されている場合
152 $IF ((INT.INTATR[intno] & ( TA_NEGEDGE | TA_BOTHEDGE )) == ( TA_NEGEDGE | TA_BOTHEDGE ))$
153 $ERROR$ INT.TEXT_LINE[intno]:$FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "intatr", INT.INTATR[intno], INT.INTNO[intno], "CFG_INT")$$END$
154 $END$
155
156$ TA_POSEDGEとTA_NEGEDGEとTA_BOTHEDGEが同時に設定されている場合
157 $IF ((INT.INTATR[intno] & ( TA_POSEDGE | TA_NEGEDGE | TA_BOTHEDGE )) == ( TA_POSEDGE | TA_NEGEDGE | TA_BOTHEDGE ))$
158 $ERROR$ INT.TEXT_LINE[intno]:$FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "intatr", INT.INTATR[intno], INT.INTNO[intno], "CFG_INT")$$END$
159 $END$
160
161 $ELSE$
162
163$ IRQ割込み以外の割込みに対して割込み属性が指定されている場合
164 $IF (INT.INTATR[intno] & (~( TA_ENAINT | TA_EDGE ))) != 0$
165 $ERROR$ INT.TEXT_LINE[intno]: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "intatr", INT.INTATR[intno], INT.INTNO[intno], "CFG_INT")$$END$
166 $END$
167
168 $END$
169
170$END$
171
172
173
174$
175$ 割込み番号から割込み優先度及び属性を取り出すテーブル
176$
177
178/*$NL$
179$SPC$*$SPC$$SPC$Interrupt Level and Attribute Table$NL$
180$SPC$*/$NL$
181const CFG_INT_INFO _kernel_cfg_int_table[$LENGTH(INTNO_RANGE)$] = {$NL$
182$FOREACH intno INTNO_RANGE$
183$ 割込み優先度を取得
184 $IF LENGTH(INT.INTNO[intno])$
185 $intpri = -INT.INTPRI[intno]$
186 $intatr = INT.INTATR[intno]$
187 $ELSE$
188 $intpri = "0"$
189 $intatr = "0xFFFFFFFF"$
190 $END$
191
192$ テーブルの中身を出力
193 $TAB$$FORMAT("{ %2d, %08x }, /* %02u */", intpri, intatr, +intno)$$NL$
194$END$
195};$NL$$NL$
196
197
198$
199$ アセンブラ出力ファイル
200$
201
202$FILE "kernel_cfg_asm.src"$
203
204;$NL$
205; RX630アーキテクチャ依存出力ファイル$NL$
206;$NL$
207; 割込みベクタ及び割込みハンドラ定義$NL$
208;$NL$
209$NL$$NL$
210
211
212$
213$ 割込み入口処理
214$
215
216$
217$ 共通関数の宣言
218$
219
220$TAB$.section P, CODE$NL$
221$TAB$.glb$TAB$_kernel_interrupt$NL$
222$TAB$.glb$TAB$__kernel_default_int_handler$NL$
223$TAB$.glb$TAB$__kernel_default_exc_handler$NL$$NL$$NL$
224
225
226$
227$ 割込みハンドラの出力
228$
229
230$FOREACH inhno INHNO_RANGE$
231 $IF LENGTH(INH.INHNO[inhno])$
232 $IF ((INH.INHATR[inhno] & TA_NONKERNEL) == 0)$
233 $TAB$.glb _$INH.INTHDR[inhno]$$NL$
234 $TAB$.glb __kernel_$INH.INTHDR[inhno]$_$+INH.INHNO[inhno]$_entry$NL$
235 __kernel_$INH.INTHDR[inhno]$_$+INH.INHNO[inhno]$_entry:$NL$
236 $TAB$pushm r1-r5 ; スクラッチレジスタをタスクスタックへ退避 $NL$
237 $TAB$mov.l #$+INH.INHNO[inhno]$, r1 ; 割込みハンドラ番号をr1へ $NL$
238 $TAB$mov.l #_$INH.INTHDR[inhno]$, r2 ; ハンドラのアドレスをr2へ $NL$
239 $TAB$bra.a _kernel_interrupt ; 共通ルーチンへ $NL$$NL$$NL$
240 $END$
241 $END$
242$END$
243
244
245$ 未登録割込みハンドラ入口処理
246$TAB$.glb$TAB$__kernel_default_int_handler_entry$NL$
247__kernel_default_int_handler_entry:$NL$
248$TAB$pushm r1-r5 ; スクラッチレジスタをタスクスタックへ退避 $NL$
249$TAB$mov.l #0FFFFFFFFH, r1 ; 割込みハンドラ番号をr1へ $NL$
250$TAB$mov.l #__kernel_default_int_handler, r2 ; ハンドラのアドレスをr2へ $NL$
251$TAB$bra.a _kernel_interrupt ; 共通ルーチンへ $NL$$NL$$NL$
252
253
254$
255$ CPU例外ハンドラ入口処理
256$
257
258$TAB$.glb _kernel_exception$NL$$NL$
259
260$FOREACH excno EXCNO_RANGE$
261 $IF LENGTH(EXC.EXCNO[excno])$
262 $TAB$.glb _$EXC.EXCHDR[excno]$$NL$
263 $TAB$.glb __kernel_$EXC.EXCHDR[excno]$_$+EXC.EXCNO[excno]$_entry$NL$
264 __kernel_$EXC.EXCHDR[excno]$_$+EXC.EXCNO[excno]$_entry:$NL$
265 $TAB$pushm r1-r5 ; スクラッチレジスタをタスクスタックへ退避 $NL$
266 $TAB$mov.l #$+EXC.EXCNO[excno]$, r1 ; CPU例外ハンドラ番号をr1へ $NL$
267 $TAB$mov.l #_$EXC.EXCHDR[excno]$, r2 ; ハンドラのアドレスをr2へ $NL$
268 $TAB$bra.a _kernel_exception ; 共通ルーチンへ $NL$$NL$$NL$
269 $END$
270$END$
271
272
273$ 未登録CPU例外ハンドラ入口処理
274$TAB$.glb$TAB$__kernel_default_exc_handler_entry$NL$
275__kernel_default_exc_handler_entry:$NL$
276$TAB$pushm r1-r5 ; スクラッチレジスタをタスクスタックへ退避 $NL$
277$TAB$mov.l #0FFFFFFFFH, r1 ; CPU例外ハンドラ番号をr1へ $NL$
278$TAB$mov.l #__kernel_default_exc_handler, r2 ; ハンドラのアドレスをr2へ $NL$
279$TAB$bra.a _kernel_exception ; 共通ルーチンへ $NL$$NL$$NL$
280
281
282$
283$ 可変ベクタテーブル
284$
285
286;$NL$
287; 可変ベクタテーブル$NL$
288;$NL$
289$NL$
290
291$TAB$.glb $TAB$ _start$NL$$NL$
292
293$FOREACH inhno INH.ORDER_LIST$
294 $IF ((INH.INHATR[inhno] & TA_NONKERNEL) != 0)$
295 $TAB$.glb $TAB$ _$INH.INTHDR[inhno]$ $NL$
296 $END$
297$END$
298$NL$
299
300$TAB$.section C$$VECT, ROMDATA$NL$$NL$
301vvector_table:$NL$
302$FOREACH inhno INHNO_RANGE$
303 $IF LENGTH(INH.INHNO[inhno])$
304 $IF ((INH.INHATR[inhno] & TA_NONKERNEL) == 0)$
305 $inhhdr = CONCAT(CONCAT("_kernel_" , CONCAT(INH.INTHDR[inhno] , "_")) , CONCAT(+INH.INHNO[inhno] , "_entry"))$
306 $ELSE$
307 $inhhdr = INH.INTHDR[inhno]$
308 $END$
309 $ELSE$
310 $inhhdr = "_kernel_default_int_handler_entry"$
311 $END$
312
313 $TAB$.lword$TAB$_$inhhdr$ $TAB$ $TAB$ $FORMAT("; %02d" , inhno)$ $NL$
314$END$
315
316
317$
318$ 固定ベクタテーブル
319$
320$FOREACH excno EXCNO_RANGE$
321 $IF LENGTH(EXC.EXCNO[excno])$
322 $EXCHDR[excno] = CONCAT(CONCAT("_kernel_" , CONCAT(EXC.EXCHDR[excno] , "_")) , CONCAT(+EXC.EXCNO[excno] , "_entry"))$
323 $ELSE$
324 $EXCHDR[excno] = "_kernel_default_exc_handler_entry"$
325 $END$
326$END$
327
328$NL$
329;$NL$
330; 固定ベクタテーブル$NL$
331;$NL$
332$NL$
333
334$TAB$ .section FVECT, ROMDATA$NL$
335$NL$
336fvector_table:$NL$$NL$
337
338$TAB$ .lword$TAB$ 0FFFFFFFFH $TAB$ ; Endian Select Register (little)$NL$
339$TAB$ .offset$TAB$ 008H$NL$
340$TAB$ .lword$TAB$ 0FFFFFFFFH $TAB$ ; OFS1$NL$
341$TAB$ .lword$TAB$ 0FFFFFFFFH $TAB$ ; OFS0$NL$
342$TAB$ .offset$TAB$ 020H$NL$
343$TAB$ .lword$TAB$ 0FFFFFFFFH $TAB$ ; 制御コード, IDコード1 - 3$NL$
344$TAB$ .lword$TAB$ 0FFFFFFFFH $TAB$ ; IDコード4 - 7$NL$
345$TAB$ .lword$TAB$ 0FFFFFFFFH $TAB$ ; IDコード8 - 11$NL$
346$TAB$ .lword$TAB$ 0FFFFFFFFH $TAB$ ; IDコード12 - 15$NL$$NL$
347
348$TAB$ .offset$TAB$ 050H$NL$
349$TAB$ .lword$TAB$ _$EXCHDR[20]$ $TAB$ $TAB$ ;$SPC$ 20:特権命令例外 $SPC$$NL$
350$TAB$ .offset$TAB$ 05CH$NL$
351$TAB$ .lword$TAB$ _$EXCHDR[23]$ $TAB$ $TAB$ ;$SPC$ 23:未定義命令例外 $SPC$$NL$
352$TAB$ .offset$TAB$ 064H$NL$
353$TAB$ .lword$TAB$ _$EXCHDR[25]$ $TAB$ $TAB$ ;$SPC$ 25:浮動小数点例外 $SPC$$NL$
354$TAB$ .offset$TAB$ 078H$NL$
355$TAB$ .lword$TAB$ _$EXCHDR[30]$ $TAB$ $TAB$ ;$SPC$ 30:ノンマスカブル例外 $SPC$$NL$
356$TAB$ .lword$TAB$ _start $TAB$ $TAB$ $TAB$ $TAB$ ;$SPC$ 31:リセット $SPC$$NL$
357
358$NL$ $NL$
359
360 $TAB$.end
361$NL$
Note: See TracBrowser for help on using the repository browser.