source: rtos_arduino/trunk/asp_1.9.2/arch/arm_m_gcc/common/core.tf@ 136

Last change on this file since 136 was 136, checked in by ertl-honda, 8 years ago

ライブラリとOS及びベーシックなサンプルの追加.

File size: 5.2 KB
Line 
1$
2$ パス2のアーキテクチャ依存テンプレート(ARM-M用)
3$
4
5$
6$ 有効な割込み番号,割込みハンドラ番号
7$
8$INTNO_VALID = RANGE(15, TMAX_INTNO)$
9$INHNO_VALID = INTNO_VALID$
10
11$
12$ 有効なCPU例外番号
13$
14$EXCNO_VALID = { 2,3,4,5,6,11,12,14 }$
15
16$
17$ ATT_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号
18$
19$INTNO_ATTISR_VALID = INTNO_VALID$
20$INHNO_ATTISR_VALID = INHNO_VALID$
21
22$
23$ DEF_INT/DEF_EXCで使用できる割込みハンドラ番号/CPU例外ハンドラ番号
24$
25$INHNO_DEFINH_VALID = INHNO_VALID$
26$EXCNO_DEFEXC_VALID = EXCNO_VALID$
27
28$
29$ CFG_INTで使用できる割込み番号と割込み優å…
30ˆåº¦
31$ 最大優å…
32ˆåº¦ã¯BASEPRIレジスタでマスクできない優å…
33ˆåº¦ï¼ˆå†…
34部優å…
35ˆåº¦'0')
36$ そのため,カーネル管理外の割込みでのみ指定可能.
37$INTNO_CFGINT_VALID = INTNO_VALID$
38$INTPRI_CFGINT_VALID = RANGE(-(1 << TBITW_IPRI),-1)$
39
40$
41$ 標準テンプレートファイルのインクルード
42$
43$INCLUDE "kernel/kernel.tf"$
44
45/*$NL$
46$SPC$* Target-dependent Definitions (ARM-M)$NL$
47$SPC$*/$NL$
48$NL$
49
50$
51$ ベクターテーブル
52$
53$FILE "kernel_cfg.c"$
54$NL$
55
56$IF ISFUNCTION("GEN_VECTOR_TABLE_VARNAME")$
57 $GEN_VECTOR_TABLE_VARNAME()$
58$ELSE$
59 $IF ISFUNCTION("VECTOR_ATTRIBUTE")$
60 $VECTOR_ATTRIBUTE()$
61 $ELSE$
62 __attribute__ ((section(".vector"))) $NL$
63 $END$
64 const FP _kernel_vector_table[] = $NL$
65$END$
66{ $NL$
67 $TAB$(FP)(TOPPERS_ISTKPT(TOPPERS_ISTK, TOPPERS_ISTKSZ)), /* 0 The initial stack pointer */$NL$
68 $TAB$(FP)_kernel__start, /* 1 The reset handler */$NL$
69
70$FOREACH excno {2,3,...,14}$
71 $IF (excno == 11) && (__TARGET_ARCH_THUMB == 4) $
72 $TAB$(FP)(_kernel_svc_handler), /* 11 SVCall handler */$NL$
73 $ELSE$
74 $IF (excno == 14) && (__TARGET_ARCH_THUMB == 3) $
75 $TAB$(FP)(pendsvc_handler), /* 14 PandSVCall handler */$NL$
76 $ELSE$
77 $TAB$(FP)(_kernel_core_exc_entry),$SPC$$FORMAT("/* %d */", +excno)$$NL$
78 $END$
79 $END$
80$END$
81
82$FOREACH inhno INTNO_VALID$
83 $IF LENGTH(INH.INHNO[inhno]) && ((INH.INHATR[inhno] & TA_NONKERNEL) != 0)$
84 $TAB$(FP)($INH.INTHDR[inhno]$),
85 $ELSE$
86 $TAB$(FP)(_kernel_core_int_entry),
87 $END$
88 $SPC$$FORMAT("/* %d */", +inhno)$$NL$
89$END$
90
91
92$NL$};$NL$
93$NL$
94
95$NL$
96const FP _kernel_exc_tbl[] = $NL$
97{$NL$
98$FOREACH excno {0,1,...,14}$
99 $IF LENGTH(EXC.EXCNO[excno])$
100 $TAB$(FP)($EXC.EXCHDR[excno]$),
101 $ELSE$
102 $TAB$(FP)(_kernel_default_exc_handler),
103 $END$
104 $SPC$$FORMAT("/* %d */", +excno)$$NL$
105$END$
106
107
108$FOREACH inhno INTNO_VALID$
109 $IF LENGTH(INH.INHNO[inhno])$
110 $TAB$(FP)($INH.INTHDR[inhno]$),
111 $ELSE$
112 $TAB$(FP)(_kernel_default_int_handler),
113 $END$
114 $SPC$$FORMAT("/* %d */", +inhno)$$NL$
115$END$
116
117
118$NL$};$NL$
119$NL$
120
121$
122$ _kernel_bitpat_cfgintの生成
123$
124
125$bitpat_cfgint_num = 0$
126$bitpat_cfgint = 0$
127
128
129const uint32_t _kernel_bitpat_cfgint[
130$IF (TMAX_INTNO & 0x0f) == 0x00 $
131 $bitpat_cfgint_num = (TMAX_INTNO >> 4)$
132$ELSE$
133 $bitpat_cfgint_num = (TMAX_INTNO >> 4) + 1$
134$END$
135 $bitpat_cfgint_num$
136] = {$NL$
137$FOREACH num RANGE(0,(bitpat_cfgint_num-1))$
138$ //boost のバージョンによって挙動が変わるための対策
139$ //http://www.toppers.jp/TOPPERS-USERS/201004/msg00034.html
140 $bitpat_cfgint = 1-1$
141 $FOREACH inhno RANGE(num*32, (num*32)+31)$
142 $IF LENGTH(INH.INHNO[inhno])$
143 $bitpat_cfgint = bitpat_cfgint | (1 << (inhno & 0x01f))$
144 $END$
145 $END$
146 $TAB$UINT32_C($FORMAT("0x%08x", bitpat_cfgint)$), $NL$
147$END$
148
149$NL$};$NL$
150$NL$
151
152
153
154
155$IF __TARGET_ARCH_THUMB == 4 $
156
157$
158$ 割込み優å…
159ˆåº¦ãƒ†ãƒ¼ãƒ–ル(内
160部表現)
161$
162const uint32_t _kernel_int_iipm_tbl[] = {$NL$
163$FOREACH excno {0,1,...,14}$
164 $TAB$$FORMAT("UINT32_C(0x%08x), /* 0x%03x */", 0, +excno)$$NL$
165$END$
166
167$FOREACH intno INTNO_VALID$
168 $IF LENGTH(INT.INTNO[intno])$
169 $intpri = (((1 << TBITW_IPRI) + INT.INTPRI[intno]) << (8 - TBITW_IPRI))$
170 $ELSE$
171$ // LSBを1にしているのは,割込み属性が設定されていないことを判
172$ // 別するためである.
173 $intpri = 0 $
174 $END$
175 $TAB$$FORMAT("UINT32_C(0x%08x), /* 0x%03x */", intpri, +intno)$$NL$
176$END$
177$NL$};$NL$
178$NL$
179
180$END$
181
182$IF __TARGET_ARCH_THUMB == 3 $
183
184$
185$ 割込み優å…
186ˆåº¦ãƒ†ãƒ¼ãƒ–ル(内
187部表現)
188$
189const uint8_t _kernel_int_iipm_tbl[] = {$NL$
190$FOREACH excno {0,1,...,14}$
191 $TAB$$FORMAT("UINT8_C(0x%02x), /* 0x%03x */", 0, +excno)$$NL$
192$END$
193
194$FOREACH intno INTNO_VALID$
195 $IF LENGTH(INT.INTNO[intno])$
196 $intpri = (((1 << TBITW_IPRI) + INT.INTPRI[intno]))$
197 $ELSE$
198 $intpri = +255 $
199 $END$
200 $TAB$$FORMAT("UINT8_C(0x%02x), /* 0x%03x */", intpri, +intno)$$NL$
201$END$
202};$NL$
203$NL$
204
205$
206$ 割込み優å…
207ˆåº¦ãƒžã‚¹ã‚¯æ¯Žã®å‰²è¾¼ã¿ã‚’許可する割込み
208$
209const uint32_t _kernel_iipm_enable_irq_tbl[]={$NL$
210$FOREACH intpri {-4,-3,...,0}$
211 $enable_mask = 0$
212 $FOREACH intno RANGE(16, TMAX_INTNO)$
213 $IF LENGTH(INT.INTNO[intno]) && (INT.INTPRI[intno] < intpri)$
214 $enable_mask = enable_mask | (1 << (intno - 16))$
215 $END$
216 $END$
217 $TAB$$FORMAT("UINT32_C(0x%08x), /* %d(%d) */", enable_mask, intpri+4, intpri)$$NL$
218$END$
219};$NL$
220$NL$
221
222const uint8_t _kernel_iipm_enable_systic_tbl[]={$NL$
223$FOREACH intpri {-4,-3,...,0}$
224 $enable_mask = 0$
225 $IF LENGTH(INT.INTNO[15]) && (INT.INTPRI[15] < intpri)$
226 $enable_mask = 1$
227 $END$
228 $TAB$$FORMAT("UINT8_C(0x%02x), /* %d(%d) */", enable_mask, intpri+4, intpri)$$NL$
229$END$
230};$NL$
231$END$
Note: See TracBrowser for help on using the repository browser.