source: azure_iot_hub_f767zi/trunk/asp_baseplatform/arch/arm_m_gcc/common/core.tf@ 457

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

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/plain;charset=UTF-8
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$ 最大優先度はBASEPRIレジスタでマスクできない優先度(内部優先度'0')
31$ そのため,カーネル管理外の割込みでのみ指定可能.
32$INTNO_CFGINT_VALID = INTNO_VALID$
33$INTPRI_CFGINT_VALID = RANGE(-(1 << TBITW_IPRI),-1)$
34
35$
36$ 標準テンプレートファイルのインクルード
37$
38$INCLUDE "kernel/kernel.tf"$
39
40/*$NL$
41$SPC$* Target-dependent Definitions (ARM-M)$NL$
42$SPC$*/$NL$
43$NL$
44
45$
46$ ベクターテーブル
47$
48$FILE "kernel_cfg.c"$
49$NL$
50
51$IF ISFUNCTION("GEN_VECTOR_TABLE_VARNAME")$
52 $GEN_VECTOR_TABLE_VARNAME()$
53$ELSE$
54 $IF ISFUNCTION("VECTOR_ATTRIBUTE")$
55 $VECTOR_ATTRIBUTE()$
56 $ELSE$
57 __attribute__ ((section(".vector"))) $NL$
58 $END$
59 const FP _kernel_vector_table[] = $NL$
60$END$
61{ $NL$
62 $TAB$(FP)(TOPPERS_ISTKPT(TOPPERS_ISTK, TOPPERS_ISTKSZ)), /* 0 The initial stack pointer */$NL$
63 $TAB$(FP)_kernel__start, /* 1 The reset handler */$NL$
64
65$FOREACH excno {2,3,...,14}$
66 $IF (excno == 11) && (__TARGET_ARCH_THUMB == 4) $
67 $TAB$(FP)(_kernel_svc_handler), /* 11 SVCall handler */$NL$
68 $ELSE$
69 $IF (excno == 14) && (__TARGET_ARCH_THUMB == 3) $
70 $TAB$(FP)(pendsvc_handler), /* 14 PandSVCall handler */$NL$
71 $ELSE$
72 $TAB$(FP)(_kernel_core_exc_entry),$SPC$$FORMAT("/* %d */", +excno)$$NL$
73 $END$
74 $END$
75$END$
76
77$FOREACH inhno INTNO_VALID$
78 $IF LENGTH(INH.INHNO[inhno]) && ((INH.INHATR[inhno] & TA_NONKERNEL) != 0)$
79 $TAB$(FP)($INH.INTHDR[inhno]$),
80 $ELSE$
81 $TAB$(FP)(_kernel_core_int_entry),
82 $END$
83 $SPC$$FORMAT("/* %d */", +inhno)$$NL$
84$END$
85
86
87$NL$};$NL$
88$NL$
89
90$NL$
91const FP _kernel_exc_tbl[] = $NL$
92{$NL$
93$FOREACH excno {0,1,...,14}$
94 $IF LENGTH(EXC.EXCNO[excno])$
95 $TAB$(FP)($EXC.EXCHDR[excno]$),
96 $ELSE$
97 $TAB$(FP)(_kernel_default_exc_handler),
98 $END$
99 $SPC$$FORMAT("/* %d */", +excno)$$NL$
100$END$
101
102
103$FOREACH inhno INTNO_VALID$
104 $IF LENGTH(INH.INHNO[inhno])$
105 $TAB$(FP)($INH.INTHDR[inhno]$),
106 $ELSE$
107 $TAB$(FP)(_kernel_default_int_handler),
108 $END$
109 $SPC$$FORMAT("/* %d */", +inhno)$$NL$
110$END$
111
112
113$NL$};$NL$
114$NL$
115
116$
117$ _kernel_bitpat_cfgintの生成
118$
119
120$bitpat_cfgint_num = 0$
121$bitpat_cfgint = 0$
122
123
124const uint32_t _kernel_bitpat_cfgint[
125$IF (TMAX_INTNO & 0x0f) == 0x00 $
126 $bitpat_cfgint_num = (TMAX_INTNO >> 4)$
127$ELSE$
128 $bitpat_cfgint_num = (TMAX_INTNO >> 4) + 1$
129$END$
130 $bitpat_cfgint_num$
131] = {$NL$
132$FOREACH num RANGE(0,(bitpat_cfgint_num-1))$
133$ //boost のバージョンによって挙動が変わるための対策
134$ //http://www.toppers.jp/TOPPERS-USERS/201004/msg00034.html
135 $bitpat_cfgint = 1-1$
136 $FOREACH inhno RANGE(num*32, (num*32)+31)$
137 $IF LENGTH(INH.INHNO[inhno])$
138 $bitpat_cfgint = bitpat_cfgint | (1 << (inhno & 0x01f))$
139 $END$
140 $END$
141 $TAB$UINT32_C($FORMAT("0x%08x", bitpat_cfgint)$), $NL$
142$END$
143
144$NL$};$NL$
145$NL$
146
147
148
149
150$IF __TARGET_ARCH_THUMB == 4 $
151
152$
153$ 割込み優先度テーブル(内部表現)
154$
155const uint32_t _kernel_int_iipm_tbl[] = {$NL$
156$FOREACH excno {0,1,...,14}$
157 $TAB$$FORMAT("UINT32_C(0x%08x), /* 0x%03x */", 0, +excno)$$NL$
158$END$
159
160$FOREACH intno INTNO_VALID$
161 $IF LENGTH(INT.INTNO[intno])$
162 $intpri = (((1 << TBITW_IPRI) + INT.INTPRI[intno]) << (8 - TBITW_IPRI))$
163 $ELSE$
164$ // LSBを1にしているのは,割込み属性が設定されていないことを判
165$ // 別するためである.
166 $intpri = 0 $
167 $END$
168 $TAB$$FORMAT("UINT32_C(0x%08x), /* 0x%03x */", intpri, +intno)$$NL$
169$END$
170$NL$};$NL$
171$NL$
172
173$END$
174
175$IF __TARGET_ARCH_THUMB == 3 $
176
177$
178$ 割込み優先度テーブル(内部表現)
179$
180const uint8_t _kernel_int_iipm_tbl[] = {$NL$
181$FOREACH excno {0,1,...,14}$
182 $TAB$$FORMAT("UINT8_C(0x%02x), /* 0x%03x */", 0, +excno)$$NL$
183$END$
184
185$FOREACH intno INTNO_VALID$
186 $IF LENGTH(INT.INTNO[intno])$
187 $intpri = (((1 << TBITW_IPRI) + INT.INTPRI[intno]))$
188 $ELSE$
189 $intpri = +255 $
190 $END$
191 $TAB$$FORMAT("UINT8_C(0x%02x), /* 0x%03x */", intpri, +intno)$$NL$
192$END$
193};$NL$
194$NL$
195
196$
197$ 割込み優先度マスク毎の割込みを許可する割込み
198$
199const uint32_t _kernel_iipm_enable_irq_tbl[]={$NL$
200$FOREACH intpri {-4,-3,...,0}$
201 $enable_mask = 0$
202 $FOREACH intno RANGE(16, TMAX_INTNO)$
203 $IF LENGTH(INT.INTNO[intno]) && (INT.INTPRI[intno] < intpri)$
204 $enable_mask = enable_mask | (1 << (intno - 16))$
205 $END$
206 $END$
207 $TAB$$FORMAT("UINT32_C(0x%08x), /* %d(%d) */", enable_mask, intpri+4, intpri)$$NL$
208$END$
209};$NL$
210$NL$
211
212const uint8_t _kernel_iipm_enable_systic_tbl[]={$NL$
213$FOREACH intpri {-4,-3,...,0}$
214 $enable_mask = 0$
215 $IF LENGTH(INT.INTNO[15]) && (INT.INTPRI[15] < intpri)$
216 $enable_mask = 1$
217 $END$
218 $TAB$$FORMAT("UINT8_C(0x%02x), /* %d(%d) */", enable_mask, intpri+4, intpri)$$NL$
219$END$
220};$NL$
221$END$
Note: See TracBrowser for help on using the repository browser.