source: ssp_armv6_m_gcc/tags/1.3.0/arch/armv6_m_gcc/prc.tf@ 86

Last change on this file since 86 was 86, checked in by nmir-saito, 9 years ago

add separate package of SSP kernel for ARMv6-M

File size: 2.8 KB
Line 
1$
2$ パス2のアーキテクチャ依存テンプレート(ARMv6-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,11,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$ チェック方法の指定
30$
31$CHECK_STKSZ_ALIGN = 8$
32
33$
34$ CFG_INTで使用できる割込み番号と割込み優先度
35$
36$INTNO_CFGINT_VALID = INTNO_VALID$
37$INTPRI_CFGINT_VALID = RANGE(-(1 << TBITW_IPRI),-1)$
38
39$
40$ 割込み属性中のターゲット依存に用いるビット
41$
42$ TARGET_INTATR = $
43
44$
45$ 標準テンプレートファイルのインクルード
46$
47$INCLUDE "kernel/kernel.tf"$
48
49/*$NL$
50$SPC$* Target-dependent Definitions (ARMv6-M)$NL$
51$SPC$*/$NL$
52$NL$
53
54$
55$ ベクターテーブル
56$
57
58$FILE "kernel_cfg.c"$
59$NL$
60
61extern void kernel_svc_handler(void);$NL$
62$NL$
63
64__attribute__ ((section(".vector"))) $NL$
65const FP _kernel_vector_table[] = $NL$
66{ $NL$
67$ $TAB$(FP)(TOPPERS_ISTKPT(TOPPERS_ISTK, TOPPERS_ISTKSZ)), // 0 The initial stack pointer $NL$
68 $TAB$(FP)(TOPPERS_ISTKPT(TOPPERS_STK, TOPPERS_STKSZ)), // 0 The initial stack pointer $NL$
69 $TAB$(FP)_start, // 1 The reset handler $NL$
70
71$FOREACH excno {2,3,...,14}$
72 $TAB$(FP)(_kernel_exc_entry),
73 $SPC$$FORMAT("/* %d */", +excno)$$NL$
74$END$
75
76$FOREACH inhno INTNO_VALID$
77 $IF LENGTH(INH.INHNO[inhno]) && (INT.INTPRI[inhno] < TIPM_LOCK)$
78 $TAB$(FP)($INH.INTHDR[inhno]$),
79 $ELSE$
80 $TAB$(FP)(_kernel_int_entry),
81 $END$
82 $SPC$$FORMAT("/* %d */", +inhno)$$NL$
83$END$
84
85
86$NL$};$NL$
87$NL$
88
89$NL$
90const FP _kernel_exc_tbl[] = $NL$
91{$NL$
92$FOREACH excno {0,1,...,14}$
93 $IF LENGTH(EXC.EXCNO[excno])$
94 $TAB$(FP)($EXC.EXCHDR[excno]$),
95 $ELSE$
96 $TAB$(FP)(_kernel_default_exc_handler),
97 $END$
98 $SPC$$FORMAT("/* %d */", +excno)$$NL$
99$END$
100
101
102$FOREACH inhno INTNO_VALID$
103 $IF LENGTH(INH.INHNO[inhno])$
104 $TAB$(FP)($INH.INTHDR[inhno]$),
105 $ELSE$
106 $TAB$(FP)(_kernel_default_int_handler),
107 $END$
108 $SPC$$FORMAT("/* %d */", +inhno)$$NL$
109$END$
110
111
112$NL$};$NL$
113$NL$
114
115$
116$ _kernel_bitpat_cfgintの生成
117$
118
119$bitpat_cfgint_num = 0$
120$bitpat_cfgint = 0$
121
122
123const uint32_t _kernel_bitpat_cfgint[
124$IF (TMAX_INTNO & 0x0f) == 0x00 $
125 $bitpat_cfgint_num = (TMAX_INTNO >> 4)$
126$ELSE$
127 $bitpat_cfgint_num = (TMAX_INTNO >> 4) + 1$
128$END$
129 $bitpat_cfgint_num$
130] = {$NL$
131$FOREACH num RANGE(0,(bitpat_cfgint_num-1))$
132 $bitpat_cfgint = 0$
133 $FOREACH inhno RANGE(num*32, (num*32)+31)$
134 $IF LENGTH(INH.INHNO[inhno])$
135 $bitpat_cfgint = bitpat_cfgint | (1 << (inhno & 0x01f))$
136 $END$
137 $END$
138 $TAB$UINT32_C($FORMAT("0x%08x", bitpat_cfgint)$), $NL$
139$END$
140
141$NL$};$NL$
142$NL$
Note: See TracBrowser for help on using the repository browser.