-
Notifications
You must be signed in to change notification settings - Fork 0
/
except_vecttbl.c
243 lines (197 loc) · 6.82 KB
/
except_vecttbl.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
//
// 例外ベクタテーブル、リセットベクタ、 オプション設定メモリ(OFSM),フラッシュメモリプロテクト用 ID
//
// 1) 例外ベクタテーブルで、未定義命令例外、特権命令例外、アクセス例外、浮動小数点例外、ノンマスカブル割り込み処理の開始アドレスを設定。
// ・例外ベクタテーブルの先頭アドレスは、レジスタ EXTBで示される。
// ・スタートアップ時 (restprg.c)で、EXTB に section EXCEPTVECTの値を格納している。
// ・EXCEPTVECTの配置アドレスは、リンクオプションのセクション開始アドレスで指定。(0xffff ff80)
//
// 2) リセットベクタは、0xffff fffcに配置。
// ・ RESETVECTの配置アドレスは、リンクオプションのセクション開始アドレスで指定。(0xffff fffc)
//
// 3) オプション設定メモリ(OFSM)
// エンディアン選択レジスタ(MDE),オプション機能選択レジスタ1 (OFS1), (OSF2)を設定。
//
// 4) フラッシュメモリプロテクト機能用のID領域
//
// 参考:
// 「RX23E-Aグループ ユーザーズマニュアル ハードウェア編」( Rev.1.20 2022.04 )
// 2.6.1 例外ベクタテーブル
// 13.1 例外事象
// 2.2.2.9 浮動小数点ステータスワード(FPSW)
// 7. オプション設定メモリ(OFSM)
// 38.9 フラッシュメモリプロテクト機能
//
extern void Dummy(void);
extern void Excep_SuperVisorInst(void);
extern void Excep_AccessInst(void);
extern void Excep_UndefinedInst(void);
extern void Excep_FloatingPoint(void);
extern void NonMaskableInterrupt(void);
extern void PowerON_Reset_PC(void);
//
// オプション機能選択レジスタと例外ベクタテーブル (0xffff ff80~ 0xffff fff8)
// ( reservedには、Dummy()関数の先頭アドレスが入る)
//
// アドレス : 内容
// 0xffff ff80 : エンディアン選択レジスタ(MDE) (リトルエンディアン用)
// 0xffff ff84 : reserved
// 0xffff ff88 : オプション機能選択レジスタ1 (OFS1)
// 0xffff ff8c : オプション機能選択レジスタ0 (OFS0)
// 0xffff ff90 : reserved
// 0xffff ff94 : reserved
// 0xffff ff98 : reserved
// 0xffff ff9c : reserved
// 0xffff ffa0 : フラッシュメモリプロテクト用 ID
// 0xffff ffa4 : フラッシュメモリプロテクト用 ID
// 0xffff ffa8 : フラッシュメモリプロテクト用 ID
// 0xffff ffac : フラッシュメモリプロテクト用 ID
// 0xffff ffb0 : reserved
// 0xffff ffb4 : reserved
// 0xffff ffb8 : reserved
// 0xffff ffbc : reserved
// 0xffff ffc0 : reserved
// 0xffff ffc4 : reserved
// 0xffff ffc8 : reserved
// 0xffff ffcc : reserved
// 0xffff ffd0 : 特権命令例外
// 0xffff ffd4 : アクセス例外
// 0xffff ffd8 : reserved
// 0xffff ffdc : 未定義命令例外
// 0xffff ffe0 : reserved
// 0xffff ffe4 : 浮動小数点例外
// 0xffff ffe8 : reserved
// 0xffff ffec : reserved
// 0xffff fff0 : reserved
// 0xffff fff4 : reserved
// 0xffff fff8 : ノンマスカブル割り込み
//
// 0xffff fffc : リセットベクタ
#pragma section C EXCEPTVECT
void (*const Except_Vectors[])(void) = {
// 0xffffff80 MDE register
(void (*)(void))0xffffffff, // little
// 0xffffff84 Reserved
Dummy,
// 0xffffff88 OFS1 register
//
// 「リンケージエディタとCRC演算器のCRC-CCITT結果の違い」 (https://ja-support.renesas.com/knowledgeBase/17796715)
// FINE接続でマイコンと接続している場合(JTAG接続の場合は該当しません)、E1またはE20エミュレータ起動時に
// エミュレータ制御用のコードとしてオプション機能選択レジスタ1(OFS1:アドレスFFFFFF88h-FFFFFF8Bh)のbit24に0が書き込まれます。
//
(void (*)(void))0xfeffffff, // OFS1
// 0xffffff8c OFS0 register
//
// オプション機能選択レジスタ0(OFS0)
// b0: 予約ビット b0=1
// b1: IWDTスタートモード選択ビット b1
// 0:オートスタートモード IWDT自動起動,
// 1:リセット後、IWDTは停止状態)
// b3-b2: IWDTタイムアウト期間選択ビット b3 b2
// 0 0: 128サイクル(007Fh)
// 0 1: 512サイクル(01FFh)
// 1 0:1024サイクル(03FFh)
// 1 1:2048サイクル(07FFh)
// b7-b4: IWDTクロック分周比選択ビット b7 b6 b5 b4
// 0 0 0 0 : 分周なし
// 0 0 1 0 : 16分周
// 0 0 1 1 : 32分周
// 0 1 0 0 : 64分周
// 1 1 1 1 :128分周
// 0 1 0 1 :256分周
// b9-b8: IWDTウィンドウ終了位置選択 b9 b8
// 0 0 : 75%
// 0 1 : 50%
// 1 0 : 25%
// 1 1 : 0%
// b11-b10: IWDTウィンドウ開始位置選択 b11 b10
// 0 0 : 25%
// 0 1 : 50%
// 1 0 : 75%
// 1 1 : 0%
// b12: IWDTリセット割り込み要求選択ビット b12
// 0: ノンマスカブル割り込み要求を許可
// 1: リセットを許可
// b13: 予約ビット b13=1
// b14: IWDTスリープモードカウント停止制御ビット b14
// 0: カウント停止無効
// 1: スリープモード、ソフトウェアスタンバイモード、
// ディープスリープモード移行時のカウント停止有効
//b31-b15: 予約ビット b31-b15 = 1
//
//
// 設定
// オートスタートモード
// タイムアウト期間 : : 2048サイクル(07ffh)
// クロック分周比 : 1 (分周なし)
// ウインドウ終了位置: 0%
// ウインドウ開始位置:50%
//
// リセット出力の許可
//
// タイムアウトする時間:
// 独立ウオッチドックタイマ専用クロック(15[KHz])の1分周、2048サイクル
// 1/15[msec]x2048 = 136.5[msec] でタイムアウト
//
// 1111 1111 1111 1111 1111 0111 0000 1101
// f f f f f 7 0 d
(void (*)(void))0xfffff70d, // OFS0
// 0xffffff90 Reserved
Dummy,
// 0xffffff94 Reserved
Dummy,
// 0xffffff98 Reserved
Dummy,
// 0xffffff9c Reserved
Dummy,
// 0xffffffa0 ID
(void (*)(void))0xffffffff,
// 0xffffffa4 ID
(void (*)(void))0xffffffff,
// 0xffffffa8 ID
(void (*)(void))0xffffffff,
// 0xffffffac ID
(void (*)(void))0xffffffff,
// 0xffffffb0 Reserved
Dummy,
// 0xffffffb4 Reserved
Dummy,
// 0xffffffb8 Reserved
Dummy,
// 0xffffffbc Reserved
Dummy,
// 0xffffffc0 Reserved
Dummy,
// 0xffffffc4 Reserved
Dummy,
// 0xffffffc8 Reserved
Dummy,
// 0xffffffcc Reserved
Dummy,
// 0xffffffd0 特権命令例外
Excep_SuperVisorInst,
// 0xffffffd4 アクセス例外
Excep_AccessInst,
// 0xffffffd8 Reserved
Dummy,
// 0xffffffdc 未定義命令例外
Excep_UndefinedInst,
// 0xffffffe0 Reserved
Dummy,
// 0xffffffe4 浮動小数点例外
Excep_FloatingPoint,
// 0xffffffe8 Reserved
Dummy,
// 0xffffffec Reserved
Dummy,
//v0xfffffff0 Reserved
Dummy,
//v0xfffffff4 Reserved
Dummy,
//v0xfffffff8 ノンマスカブル割り込み NMI
NonMaskableInterrupt,
};
#pragma section C RESETVECT
void (*const Reset_Vectors[])(void) = {
PowerON_Reset_PC
};