source: UsbWattMeter/trunk/asp_dcre/arch/rx630_ccrx/prc.tf@ 167

Last change on this file since 167 was 167, checked in by coas-nagasima, 6 years ago

MIMEにSJISを設定

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