source: asp_ccsproject/trunk/asp/arch/arm_m_gcc/common/core.tf@ 85

Last change on this file since 85 was 85, checked in by ecsg-okazaki, 10 years ago

2014/09/26 ECS E.Okazaki Folder configuration change

File size: 3.6 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__attribute__ ((section(".vector"))) $NL$
56const FP _kernel_vector_table[] = $NL$
57{ $NL$
58 $TAB$(FP)(TOPPERS_ISTKPT(TOPPERS_ISTK, TOPPERS_ISTKSZ)), // 0 The initial stack pointer $NL$
59 $TAB$(FP)_start, // 1 The reset handler $NL$
60
61$FOREACH excno {2,3,...,14}$
62 $IF excno == 11$
63 $TAB$(FP)(_kernel_svc_handler), // 11 SVCall handler
64 $ELSE$
65 $TAB$(FP)(_kernel_core_exc_entry),
66 $END$
67 $SPC$$FORMAT("/* %d */", +excno)$$NL$
68$END$
69
70$FOREACH inhno INTNO_VALID$
71 $IF LENGTH(INH.INHNO[inhno]) && ((INH.INHATR[inhno] & TA_NONKERNEL) != 0)$
72 $TAB$(FP)($INH.INTHDR[inhno]$),
73 $ELSE$
74 $TAB$(FP)(_kernel_core_int_entry),
75 $END$
76 $SPC$$FORMAT("/* %d */", +inhno)$$NL$
77$END$
78
79
80$NL$};$NL$
81$NL$
82
83$NL$
84const FP _kernel_exc_tbl[] = $NL$
85{$NL$
86$FOREACH excno {0,1,...,14}$
87 $IF LENGTH(EXC.EXCNO[excno])$
88 $TAB$(FP)($EXC.EXCHDR[excno]$),
89 $ELSE$
90 $TAB$(FP)(_kernel_default_exc_handler),
91 $END$
92 $SPC$$FORMAT("/* %d */", +excno)$$NL$
93$END$
94
95
96$FOREACH inhno INTNO_VALID$
97 $IF LENGTH(INH.INHNO[inhno])$
98 $TAB$(FP)($INH.INTHDR[inhno]$),
99 $ELSE$
100 $TAB$(FP)(_kernel_default_int_handler),
101 $END$
102 $SPC$$FORMAT("/* %d */", +inhno)$$NL$
103$END$
104
105
106$NL$};$NL$
107$NL$
108
109$
110$ _kernel_bitpat_cfgintの生成
111$
112
113$bitpat_cfgint_num = 0$
114$bitpat_cfgint = 0$
115
116
117const uint32_t _kernel_bitpat_cfgint[
118$IF (TMAX_INTNO & 0x0f) == 0x00 $
119 $bitpat_cfgint_num = (TMAX_INTNO >> 4)$
120$ELSE$
121 $bitpat_cfgint_num = (TMAX_INTNO >> 4) + 1$
122$END$
123 $bitpat_cfgint_num$
124] = {$NL$
125$FOREACH num RANGE(0,(bitpat_cfgint_num-1))$
126$ //boost のバージョンによって挙動が変わるための対策
127$ //http://www.toppers.jp/TOPPERS-USERS/201004/msg00034.html
128 $bitpat_cfgint = 1-1$
129 $FOREACH inhno RANGE(num*32, (num*32)+31)$
130 $IF LENGTH(INH.INHNO[inhno])$
131 $bitpat_cfgint = bitpat_cfgint | (1 << (inhno & 0x01f))$
132 $END$
133 $END$
134 $TAB$UINT32_C($FORMAT("0x%08x", bitpat_cfgint)$), $NL$
135$END$
136
137$NL$};$NL$
138$NL$
139
140
141$
142$ 割込み優å…
143ˆåº¦ãƒ†ãƒ¼ãƒ–ル(内
144部表現)
145$
146const uint32_t _kernel_int_iipm_tbl[] = {$NL$
147$FOREACH excno {0,1,...,14}$
148 $TAB$$FORMAT("UINT32_C(0x%08x), /* 0x%03x */", 0, +excno)$$NL$
149$END$
150
151$FOREACH intno INTNO_VALID$
152 $IF LENGTH(INT.INTNO[intno])$
153 $intpri = (((1 << TBITW_IPRI) + INT.INTPRI[intno]) << (8 - TBITW_IPRI))$
154 $ELSE$
155$ // LSBを1にしているのは,割込み属性が設定されていないことを判
156$ // 別するためである.
157 $intpri = 0 $
158 $END$
159 $TAB$$FORMAT("UINT32_C(0x%08x), /* 0x%03x */", intpri, +intno)$$NL$
160$END$
161$NL$};$NL$
162$NL$
Note: See TracBrowser for help on using the repository browser.