14 unsigned int last_int;
17 volatile int flg_interrput_proc = 0;
18 typedef void (*inthdr)(void);
19 typedef void (*gs_inthdr)(
unsigned int intnum,
void *sp);
21 int is_in_interrupt(
void)
23 return flg_interrput_proc;
26 static void unreg_inthdr(
unsigned int intnum,
void *sp)
28 SYSERR_PRINT(
"Unknown interrupt(%u).\n", intnum);
36 #define CFSR (*(volatile unsigned int *)0xE000ED28) 37 #define MMSR (*(volatile unsigned char *)0xE000ED28) 38 #define BFSR (*(volatile unsigned char *)0xE000ED29) 39 #define UFSR (*(volatile unsigned short *)0xE000ED2A) 40 #define HFSR (*(volatile unsigned int *)0xE000ED2C) 41 #define DFSR (*(volatile unsigned int *)0xE000ED30) 42 #define AFSR (*(volatile unsigned int *)0xE000ED3C) 44 #define DHCSR (*(volatile unsigned int *)0xE000EDF0) 45 #define DCRSR (*(volatile unsigned int *)0xE000EDF4) 46 #define DCRDR (*(volatile unsigned int *)0xE000EDF8) 47 #define DEMCR (*(volatile unsigned int *)0xE000EDFC) 49 void disp_debug_info(
void)
64 tkprintf(
"Last Int = %02X(%d)\n", (
int)last_int, (
int)last_int);
65 tkprintf(
"Last SP = %08X\n", (
int)last_sp);
69 void fault_inthdr(
unsigned int intnum,
void *sp)
73 SYSERR_PRINT(
"Hard Fault Interrupt(%d).\n", intnum);
77 SYSERR_PRINT(
"Mem Manage Interrupt(%d).\n", intnum);
81 SYSERR_PRINT(
"Buf Fault Interrupt(%d).\n", intnum);
85 SYSERR_PRINT(
"Usage Fault Interrupt(%d).\n", intnum);
89 SYSERR_PRINT(
"??? Interrupt(%d).\n", intnum);
111 void ur_inthdr_000(
unsigned int intnum,
void *sp){unreg_inthdr(0,sp);}
112 void ur_inthdr_001(
unsigned int intnum,
void *sp){unreg_inthdr(1,sp);}
113 void ur_inthdr_002(
unsigned int intnum,
void *sp){unreg_inthdr(2,sp);}
114 void ur_inthdr_003(
unsigned int intnum,
void *sp){unreg_inthdr(3,sp);}
115 void ur_inthdr_004(
unsigned int intnum,
void *sp){unreg_inthdr(4,sp);}
116 void ur_inthdr_005(
unsigned int intnum,
void *sp){unreg_inthdr(5,sp);}
117 void ur_inthdr_006(
unsigned int intnum,
void *sp){unreg_inthdr(6,sp);}
118 void ur_inthdr_007(
unsigned int intnum,
void *sp){unreg_inthdr(7,sp);}
119 void ur_inthdr_008(
unsigned int intnum,
void *sp){unreg_inthdr(8,sp);}
120 void ur_inthdr_009(
unsigned int intnum,
void *sp){unreg_inthdr(9,sp);}
121 void ur_inthdr_010(
unsigned int intnum,
void *sp){unreg_inthdr(10,sp);}
122 void ur_inthdr_011(
unsigned int intnum,
void *sp){unreg_inthdr(11,sp);}
123 void ur_inthdr_012(
unsigned int intnum,
void *sp){unreg_inthdr(12,sp);}
124 void ur_inthdr_013(
unsigned int intnum,
void *sp){unreg_inthdr(13,sp);}
125 void ur_inthdr_014(
unsigned int intnum,
void *sp){unreg_inthdr(14,sp);}
126 void ur_inthdr_015(
unsigned int intnum,
void *sp){unreg_inthdr(15,sp);}
127 void ur_inthdr_016(
unsigned int intnum,
void *sp){unreg_inthdr(16,sp);}
128 void ur_inthdr_017(
unsigned int intnum,
void *sp){unreg_inthdr(17,sp);}
129 void ur_inthdr_018(
unsigned int intnum,
void *sp){unreg_inthdr(18,sp);}
130 void ur_inthdr_019(
unsigned int intnum,
void *sp){unreg_inthdr(19,sp);}
131 void ur_inthdr_020(
unsigned int intnum,
void *sp){unreg_inthdr(20,sp);}
132 void ur_inthdr_021(
unsigned int intnum,
void *sp){unreg_inthdr(21,sp);}
133 void ur_inthdr_022(
unsigned int intnum,
void *sp){unreg_inthdr(22,sp);}
134 void ur_inthdr_023(
unsigned int intnum,
void *sp){unreg_inthdr(23,sp);}
135 void ur_inthdr_024(
unsigned int intnum,
void *sp){unreg_inthdr(24,sp);}
136 void ur_inthdr_025(
unsigned int intnum,
void *sp){unreg_inthdr(25,sp);}
137 void ur_inthdr_026(
unsigned int intnum,
void *sp){unreg_inthdr(26,sp);}
138 void ur_inthdr_027(
unsigned int intnum,
void *sp){unreg_inthdr(27,sp);}
139 void ur_inthdr_028(
unsigned int intnum,
void *sp){unreg_inthdr(28,sp);}
140 void ur_inthdr_029(
unsigned int intnum,
void *sp){unreg_inthdr(29,sp);}
141 void ur_inthdr_030(
unsigned int intnum,
void *sp){unreg_inthdr(30,sp);}
142 void ur_inthdr_031(
unsigned int intnum,
void *sp){unreg_inthdr(31,sp);}
143 void ur_inthdr_032(
unsigned int intnum,
void *sp){unreg_inthdr(32,sp);}
144 void ur_inthdr_033(
unsigned int intnum,
void *sp){unreg_inthdr(33,sp);}
145 void ur_inthdr_034(
unsigned int intnum,
void *sp){unreg_inthdr(34,sp);}
146 void ur_inthdr_035(
unsigned int intnum,
void *sp){unreg_inthdr(35,sp);}
147 void ur_inthdr_036(
unsigned int intnum,
void *sp){unreg_inthdr(36,sp);}
148 void ur_inthdr_037(
unsigned int intnum,
void *sp){unreg_inthdr(37,sp);}
149 void ur_inthdr_038(
unsigned int intnum,
void *sp){unreg_inthdr(38,sp);}
150 void ur_inthdr_039(
unsigned int intnum,
void *sp){unreg_inthdr(39,sp);}
151 void ur_inthdr_040(
unsigned int intnum,
void *sp){unreg_inthdr(40,sp);}
152 void ur_inthdr_041(
unsigned int intnum,
void *sp){unreg_inthdr(41,sp);}
153 void ur_inthdr_042(
unsigned int intnum,
void *sp){unreg_inthdr(42,sp);}
154 void ur_inthdr_043(
unsigned int intnum,
void *sp){unreg_inthdr(43,sp);}
155 void ur_inthdr_044(
unsigned int intnum,
void *sp){unreg_inthdr(44,sp);}
156 void ur_inthdr_045(
unsigned int intnum,
void *sp){unreg_inthdr(45,sp);}
157 void ur_inthdr_046(
unsigned int intnum,
void *sp){unreg_inthdr(46,sp);}
158 void ur_inthdr_047(
unsigned int intnum,
void *sp){unreg_inthdr(47,sp);}
159 void ur_inthdr_048(
unsigned int intnum,
void *sp){unreg_inthdr(48,sp);}
160 void ur_inthdr_049(
unsigned int intnum,
void *sp){unreg_inthdr(49,sp);}
161 void ur_inthdr_050(
unsigned int intnum,
void *sp){unreg_inthdr(50,sp);}
162 void ur_inthdr_051(
unsigned int intnum,
void *sp){unreg_inthdr(51,sp);}
163 void ur_inthdr_052(
unsigned int intnum,
void *sp){unreg_inthdr(52,sp);}
164 void ur_inthdr_053(
unsigned int intnum,
void *sp){unreg_inthdr(53,sp);}
165 void ur_inthdr_054(
unsigned int intnum,
void *sp){unreg_inthdr(54,sp);}
166 void ur_inthdr_055(
unsigned int intnum,
void *sp){unreg_inthdr(55,sp);}
167 void ur_inthdr_056(
unsigned int intnum,
void *sp){unreg_inthdr(56,sp);}
168 void ur_inthdr_057(
unsigned int intnum,
void *sp){unreg_inthdr(57,sp);}
169 void ur_inthdr_058(
unsigned int intnum,
void *sp){unreg_inthdr(58,sp);}
170 void ur_inthdr_059(
unsigned int intnum,
void *sp){unreg_inthdr(59,sp);}
171 void ur_inthdr_060(
unsigned int intnum,
void *sp){unreg_inthdr(60,sp);}
172 void ur_inthdr_061(
unsigned int intnum,
void *sp){unreg_inthdr(61,sp);}
173 void ur_inthdr_062(
unsigned int intnum,
void *sp){unreg_inthdr(62,sp);}
174 void ur_inthdr_063(
unsigned int intnum,
void *sp){unreg_inthdr(63,sp);}
175 void ur_inthdr_064(
unsigned int intnum,
void *sp){unreg_inthdr(64,sp);}
176 void ur_inthdr_065(
unsigned int intnum,
void *sp){unreg_inthdr(65,sp);}
177 void ur_inthdr_066(
unsigned int intnum,
void *sp){unreg_inthdr(66,sp);}
178 void ur_inthdr_067(
unsigned int intnum,
void *sp){unreg_inthdr(67,sp);}
179 void ur_inthdr_068(
unsigned int intnum,
void *sp){unreg_inthdr(68,sp);}
180 void ur_inthdr_069(
unsigned int intnum,
void *sp){unreg_inthdr(69,sp);}
181 void ur_inthdr_070(
unsigned int intnum,
void *sp){unreg_inthdr(70,sp);}
182 void ur_inthdr_071(
unsigned int intnum,
void *sp){unreg_inthdr(71,sp);}
183 void ur_inthdr_072(
unsigned int intnum,
void *sp){unreg_inthdr(72,sp);}
184 void ur_inthdr_073(
unsigned int intnum,
void *sp){unreg_inthdr(73,sp);}
185 void ur_inthdr_074(
unsigned int intnum,
void *sp){unreg_inthdr(74,sp);}
186 void ur_inthdr_075(
unsigned int intnum,
void *sp){unreg_inthdr(75,sp);}
187 void ur_inthdr_076(
unsigned int intnum,
void *sp){unreg_inthdr(76,sp);}
188 void ur_inthdr_077(
unsigned int intnum,
void *sp){unreg_inthdr(77,sp);}
189 void ur_inthdr_078(
unsigned int intnum,
void *sp){unreg_inthdr(78,sp);}
190 void ur_inthdr_079(
unsigned int intnum,
void *sp){unreg_inthdr(79,sp);}
191 void ur_inthdr_080(
unsigned int intnum,
void *sp){unreg_inthdr(80,sp);}
192 void ur_inthdr_081(
unsigned int intnum,
void *sp){unreg_inthdr(81,sp);}
193 void ur_inthdr_082(
unsigned int intnum,
void *sp){unreg_inthdr(82,sp);}
194 void ur_inthdr_083(
unsigned int intnum,
void *sp){unreg_inthdr(83,sp);}
195 void ur_inthdr_084(
unsigned int intnum,
void *sp){unreg_inthdr(84,sp);}
196 void ur_inthdr_085(
unsigned int intnum,
void *sp){unreg_inthdr(85,sp);}
197 void ur_inthdr_086(
unsigned int intnum,
void *sp){unreg_inthdr(86,sp);}
198 void ur_inthdr_087(
unsigned int intnum,
void *sp){unreg_inthdr(87,sp);}
199 void ur_inthdr_088(
unsigned int intnum,
void *sp){unreg_inthdr(88,sp);}
200 void ur_inthdr_089(
unsigned int intnum,
void *sp){unreg_inthdr(89,sp);}
201 void ur_inthdr_090(
unsigned int intnum,
void *sp){unreg_inthdr(90,sp);}
202 void ur_inthdr_091(
unsigned int intnum,
void *sp){unreg_inthdr(91,sp);}
203 void ur_inthdr_092(
unsigned int intnum,
void *sp){unreg_inthdr(92,sp);}
204 void ur_inthdr_093(
unsigned int intnum,
void *sp){unreg_inthdr(93,sp);}
205 void ur_inthdr_094(
unsigned int intnum,
void *sp){unreg_inthdr(94,sp);}
206 void ur_inthdr_095(
unsigned int intnum,
void *sp){unreg_inthdr(95,sp);}
207 void ur_inthdr_096(
unsigned int intnum,
void *sp){unreg_inthdr(96,sp);}
208 void ur_inthdr_097(
unsigned int intnum,
void *sp){unreg_inthdr(97,sp);}
210 extern void _endof_stack();
211 extern void start(
void);
213 static const gs_inthdr init_gs_inthdr_table[MAXVECT] = {
314 extern void int000(
void);
315 extern void int001(
void);
316 extern void int002(
void);
317 extern void int003(
void);
318 extern void int004(
void);
319 extern void int005(
void);
320 extern void int006(
void);
321 extern void int007(
void);
322 extern void int008(
void);
323 extern void int009(
void);
324 extern void int010(
void);
325 extern void int011(
void);
326 extern void int012(
void);
327 extern void int013(
void);
328 extern void int014(
void);
329 extern void int015(
void);
330 extern void int016(
void);
331 extern void int017(
void);
332 extern void int018(
void);
333 extern void int019(
void);
334 extern void int020(
void);
335 extern void int021(
void);
336 extern void int022(
void);
337 extern void int023(
void);
338 extern void int024(
void);
339 extern void int025(
void);
340 extern void int026(
void);
341 extern void int027(
void);
342 extern void int028(
void);
343 extern void int029(
void);
344 extern void int030(
void);
345 extern void int031(
void);
346 extern void int032(
void);
347 extern void int033(
void);
348 extern void int034(
void);
349 extern void int035(
void);
350 extern void int036(
void);
351 extern void int037(
void);
352 extern void int038(
void);
353 extern void int039(
void);
354 extern void int040(
void);
355 extern void int041(
void);
356 extern void int042(
void);
357 extern void int043(
void);
358 extern void int044(
void);
359 extern void int045(
void);
360 extern void int046(
void);
361 extern void int047(
void);
362 extern void int048(
void);
363 extern void int049(
void);
364 extern void int050(
void);
365 extern void int051(
void);
366 extern void int052(
void);
367 extern void int053(
void);
368 extern void int054(
void);
369 extern void int055(
void);
370 extern void int056(
void);
371 extern void int057(
void);
372 extern void int058(
void);
373 extern void int059(
void);
374 extern void int060(
void);
375 extern void int061(
void);
376 extern void int062(
void);
377 extern void int063(
void);
378 extern void int064(
void);
379 extern void int065(
void);
380 extern void int066(
void);
381 extern void int067(
void);
382 extern void int068(
void);
383 extern void int069(
void);
384 extern void int070(
void);
385 extern void int071(
void);
386 extern void int072(
void);
387 extern void int073(
void);
388 extern void int074(
void);
389 extern void int075(
void);
390 extern void int076(
void);
391 extern void int077(
void);
392 extern void int078(
void);
393 extern void int079(
void);
394 extern void int080(
void);
395 extern void int081(
void);
396 extern void int082(
void);
397 extern void int083(
void);
398 extern void int084(
void);
399 extern void int085(
void);
400 extern void int086(
void);
401 extern void int087(
void);
402 extern void int088(
void);
403 extern void int089(
void);
404 extern void int090(
void);
405 extern void int091(
void);
406 extern void int092(
void);
407 extern void int093(
void);
408 extern void int094(
void);
409 extern void int095(
void);
410 extern void int096(
void);
411 extern void int097(
void);
413 const inthdr init_inthdr_table[MAXVECT] __attribute__ ((section(
"vect"))) = {
514 gs_inthdr inthdr_table[MAXVECT];
516 void init_interrupt_vector(
void)
520 for(i=0; i<MAXVECT; i++) {
521 inthdr_table[i] = init_gs_inthdr_table[i];
527 int register_interrupt(
unsigned short vectnum,
528 void (* func)(
unsigned int intnum,
void *sp))
530 if(inthdr_table[vectnum] == init_gs_inthdr_table[vectnum]) {
531 inthdr_table[vectnum] = func;
533 SYSERR_PRINT(
"Interrupt Vector %d allready registered.\n",
541 int unregister_interrupt(
unsigned short vectnum)
543 inthdr_table[vectnum] = init_gs_inthdr_table[vectnum];
548 #ifdef GSC_KERNEL_ENABLE_INTERRUPT_COUNT 549 static unsigned int interrupt_count[MAXVECT];
551 int get_interrupt_count(
int intnum)
553 if(inthdr_table[intnum] == init_gs_inthdr_table[intnum]) {
556 return (
int)interrupt_count[intnum];
561 void interrupt_func(
unsigned int intnum,
void *sp)
563 void (* func)(
unsigned int in,
void *s);
565 #ifdef GSC_KERNEL_ENABLE_INTERRUPT_COUNT 566 interrupt_count[intnum] ++;
572 func = inthdr_table[intnum];
574 flg_interrput_proc = 1;
575 (* func)(intnum, sp);
576 flg_interrput_proc = 0;
int tkprintf(const char *fmt,...)
非タスクコンテキスト実行用メッセージ出力