18 unsigned int last_int;
21 typedef void (*inthdr)(void);
22 typedef void (*gs_inthdr)(
unsigned int intnum,
void *sp);
24 int is_in_interrupt(
void)
28 asm(
"mrs %[result], ipsr" : [result]
"=r" (regIPSR) : : );
33 static void unreg_inthdr(
unsigned int intnum,
void *sp)
35 SYSERR_PRINT(
"Unknown interrupt(%u).\n", intnum);
43 #define CFSR (*(volatile unsigned int *)0xE000ED28) 44 #define MMSR (*(volatile unsigned char *)0xE000ED28) 45 #define BFSR (*(volatile unsigned char *)0xE000ED29) 46 #define UFSR (*(volatile unsigned short *)0xE000ED2A) 47 #define HFSR (*(volatile unsigned int *)0xE000ED2C) 48 #define DFSR (*(volatile unsigned int *)0xE000ED30) 49 #define AFSR (*(volatile unsigned int *)0xE000ED3C) 51 #define DHCSR (*(volatile unsigned int *)0xE000EDF0) 52 #define DCRSR (*(volatile unsigned int *)0xE000EDF4) 53 #define DCRDR (*(volatile unsigned int *)0xE000EDF8) 54 #define DEMCR (*(volatile unsigned int *)0xE000EDFC) 56 void disp_debug_info(
void)
71 tkprintf(
"Last Int = %02X(%d)\n", (
int)last_int, (
int)last_int);
72 tkprintf(
"Last SP = %08X\n", (
int)last_sp);
76 void fault_inthdr(
unsigned int intnum,
void *sp)
80 SYSERR_PRINT(
"Hard Fault Interrupt(%d).\n", intnum);
84 SYSERR_PRINT(
"Mem Manage Interrupt(%d).\n", intnum);
88 SYSERR_PRINT(
"Buf Fault Interrupt(%d).\n", intnum);
92 SYSERR_PRINT(
"Usage Fault Interrupt(%d).\n", intnum);
96 SYSERR_PRINT(
"??? Interrupt(%d).\n", intnum);
102 disp_regs((
union st_regs *)sp);
118 void ur_inthdr_000(
unsigned int intnum,
void *sp){unreg_inthdr(0,sp);}
119 void ur_inthdr_001(
unsigned int intnum,
void *sp){unreg_inthdr(1,sp);}
120 void ur_inthdr_002(
unsigned int intnum,
void *sp){unreg_inthdr(2,sp);}
121 void ur_inthdr_003(
unsigned int intnum,
void *sp){unreg_inthdr(3,sp);}
122 void ur_inthdr_004(
unsigned int intnum,
void *sp){unreg_inthdr(4,sp);}
123 void ur_inthdr_005(
unsigned int intnum,
void *sp){unreg_inthdr(5,sp);}
124 void ur_inthdr_006(
unsigned int intnum,
void *sp){unreg_inthdr(6,sp);}
125 void ur_inthdr_007(
unsigned int intnum,
void *sp){unreg_inthdr(7,sp);}
126 void ur_inthdr_008(
unsigned int intnum,
void *sp){unreg_inthdr(8,sp);}
127 void ur_inthdr_009(
unsigned int intnum,
void *sp){unreg_inthdr(9,sp);}
128 void ur_inthdr_010(
unsigned int intnum,
void *sp){unreg_inthdr(10,sp);}
129 void ur_inthdr_011(
unsigned int intnum,
void *sp){unreg_inthdr(11,sp);}
130 void ur_inthdr_012(
unsigned int intnum,
void *sp){unreg_inthdr(12,sp);}
131 void ur_inthdr_013(
unsigned int intnum,
void *sp){unreg_inthdr(13,sp);}
132 void ur_inthdr_014(
unsigned int intnum,
void *sp){unreg_inthdr(14,sp);}
133 void ur_inthdr_015(
unsigned int intnum,
void *sp){unreg_inthdr(15,sp);}
134 void ur_inthdr_016(
unsigned int intnum,
void *sp){unreg_inthdr(16,sp);}
135 void ur_inthdr_017(
unsigned int intnum,
void *sp){unreg_inthdr(17,sp);}
136 void ur_inthdr_018(
unsigned int intnum,
void *sp){unreg_inthdr(18,sp);}
137 void ur_inthdr_019(
unsigned int intnum,
void *sp){unreg_inthdr(19,sp);}
138 void ur_inthdr_020(
unsigned int intnum,
void *sp){unreg_inthdr(20,sp);}
139 void ur_inthdr_021(
unsigned int intnum,
void *sp){unreg_inthdr(21,sp);}
140 void ur_inthdr_022(
unsigned int intnum,
void *sp){unreg_inthdr(22,sp);}
141 void ur_inthdr_023(
unsigned int intnum,
void *sp){unreg_inthdr(23,sp);}
142 void ur_inthdr_024(
unsigned int intnum,
void *sp){unreg_inthdr(24,sp);}
143 void ur_inthdr_025(
unsigned int intnum,
void *sp){unreg_inthdr(25,sp);}
144 void ur_inthdr_026(
unsigned int intnum,
void *sp){unreg_inthdr(26,sp);}
145 void ur_inthdr_027(
unsigned int intnum,
void *sp){unreg_inthdr(27,sp);}
146 void ur_inthdr_028(
unsigned int intnum,
void *sp){unreg_inthdr(28,sp);}
147 void ur_inthdr_029(
unsigned int intnum,
void *sp){unreg_inthdr(29,sp);}
148 void ur_inthdr_030(
unsigned int intnum,
void *sp){unreg_inthdr(30,sp);}
149 void ur_inthdr_031(
unsigned int intnum,
void *sp){unreg_inthdr(31,sp);}
150 void ur_inthdr_032(
unsigned int intnum,
void *sp){unreg_inthdr(32,sp);}
151 void ur_inthdr_033(
unsigned int intnum,
void *sp){unreg_inthdr(33,sp);}
152 void ur_inthdr_034(
unsigned int intnum,
void *sp){unreg_inthdr(34,sp);}
153 void ur_inthdr_035(
unsigned int intnum,
void *sp){unreg_inthdr(35,sp);}
154 void ur_inthdr_036(
unsigned int intnum,
void *sp){unreg_inthdr(36,sp);}
155 void ur_inthdr_037(
unsigned int intnum,
void *sp){unreg_inthdr(37,sp);}
156 void ur_inthdr_038(
unsigned int intnum,
void *sp){unreg_inthdr(38,sp);}
157 void ur_inthdr_039(
unsigned int intnum,
void *sp){unreg_inthdr(39,sp);}
158 void ur_inthdr_040(
unsigned int intnum,
void *sp){unreg_inthdr(40,sp);}
159 void ur_inthdr_041(
unsigned int intnum,
void *sp){unreg_inthdr(41,sp);}
160 void ur_inthdr_042(
unsigned int intnum,
void *sp){unreg_inthdr(42,sp);}
161 void ur_inthdr_043(
unsigned int intnum,
void *sp){unreg_inthdr(43,sp);}
162 void ur_inthdr_044(
unsigned int intnum,
void *sp){unreg_inthdr(44,sp);}
163 void ur_inthdr_045(
unsigned int intnum,
void *sp){unreg_inthdr(45,sp);}
164 void ur_inthdr_046(
unsigned int intnum,
void *sp){unreg_inthdr(46,sp);}
165 void ur_inthdr_047(
unsigned int intnum,
void *sp){unreg_inthdr(47,sp);}
166 void ur_inthdr_048(
unsigned int intnum,
void *sp){unreg_inthdr(48,sp);}
167 void ur_inthdr_049(
unsigned int intnum,
void *sp){unreg_inthdr(49,sp);}
168 void ur_inthdr_050(
unsigned int intnum,
void *sp){unreg_inthdr(50,sp);}
169 void ur_inthdr_051(
unsigned int intnum,
void *sp){unreg_inthdr(51,sp);}
170 void ur_inthdr_052(
unsigned int intnum,
void *sp){unreg_inthdr(52,sp);}
171 void ur_inthdr_053(
unsigned int intnum,
void *sp){unreg_inthdr(53,sp);}
172 void ur_inthdr_054(
unsigned int intnum,
void *sp){unreg_inthdr(54,sp);}
173 void ur_inthdr_055(
unsigned int intnum,
void *sp){unreg_inthdr(55,sp);}
174 void ur_inthdr_056(
unsigned int intnum,
void *sp){unreg_inthdr(56,sp);}
175 void ur_inthdr_057(
unsigned int intnum,
void *sp){unreg_inthdr(57,sp);}
176 void ur_inthdr_058(
unsigned int intnum,
void *sp){unreg_inthdr(58,sp);}
177 void ur_inthdr_059(
unsigned int intnum,
void *sp){unreg_inthdr(59,sp);}
178 void ur_inthdr_060(
unsigned int intnum,
void *sp){unreg_inthdr(60,sp);}
179 void ur_inthdr_061(
unsigned int intnum,
void *sp){unreg_inthdr(61,sp);}
180 void ur_inthdr_062(
unsigned int intnum,
void *sp){unreg_inthdr(62,sp);}
181 void ur_inthdr_063(
unsigned int intnum,
void *sp){unreg_inthdr(63,sp);}
182 void ur_inthdr_064(
unsigned int intnum,
void *sp){unreg_inthdr(64,sp);}
183 void ur_inthdr_065(
unsigned int intnum,
void *sp){unreg_inthdr(65,sp);}
184 void ur_inthdr_066(
unsigned int intnum,
void *sp){unreg_inthdr(66,sp);}
185 void ur_inthdr_067(
unsigned int intnum,
void *sp){unreg_inthdr(67,sp);}
186 void ur_inthdr_068(
unsigned int intnum,
void *sp){unreg_inthdr(68,sp);}
187 void ur_inthdr_069(
unsigned int intnum,
void *sp){unreg_inthdr(69,sp);}
188 void ur_inthdr_070(
unsigned int intnum,
void *sp){unreg_inthdr(70,sp);}
189 void ur_inthdr_071(
unsigned int intnum,
void *sp){unreg_inthdr(71,sp);}
190 void ur_inthdr_072(
unsigned int intnum,
void *sp){unreg_inthdr(72,sp);}
191 void ur_inthdr_073(
unsigned int intnum,
void *sp){unreg_inthdr(73,sp);}
192 void ur_inthdr_074(
unsigned int intnum,
void *sp){unreg_inthdr(74,sp);}
193 void ur_inthdr_075(
unsigned int intnum,
void *sp){unreg_inthdr(75,sp);}
194 void ur_inthdr_076(
unsigned int intnum,
void *sp){unreg_inthdr(76,sp);}
195 void ur_inthdr_077(
unsigned int intnum,
void *sp){unreg_inthdr(77,sp);}
196 void ur_inthdr_078(
unsigned int intnum,
void *sp){unreg_inthdr(78,sp);}
197 void ur_inthdr_079(
unsigned int intnum,
void *sp){unreg_inthdr(79,sp);}
198 void ur_inthdr_080(
unsigned int intnum,
void *sp){unreg_inthdr(80,sp);}
199 void ur_inthdr_081(
unsigned int intnum,
void *sp){unreg_inthdr(81,sp);}
200 void ur_inthdr_082(
unsigned int intnum,
void *sp){unreg_inthdr(82,sp);}
201 void ur_inthdr_083(
unsigned int intnum,
void *sp){unreg_inthdr(83,sp);}
202 void ur_inthdr_084(
unsigned int intnum,
void *sp){unreg_inthdr(84,sp);}
203 void ur_inthdr_085(
unsigned int intnum,
void *sp){unreg_inthdr(85,sp);}
204 void ur_inthdr_086(
unsigned int intnum,
void *sp){unreg_inthdr(86,sp);}
205 void ur_inthdr_087(
unsigned int intnum,
void *sp){unreg_inthdr(87,sp);}
206 void ur_inthdr_088(
unsigned int intnum,
void *sp){unreg_inthdr(88,sp);}
207 void ur_inthdr_089(
unsigned int intnum,
void *sp){unreg_inthdr(89,sp);}
208 void ur_inthdr_090(
unsigned int intnum,
void *sp){unreg_inthdr(90,sp);}
209 void ur_inthdr_091(
unsigned int intnum,
void *sp){unreg_inthdr(91,sp);}
210 void ur_inthdr_092(
unsigned int intnum,
void *sp){unreg_inthdr(92,sp);}
211 void ur_inthdr_093(
unsigned int intnum,
void *sp){unreg_inthdr(93,sp);}
212 void ur_inthdr_094(
unsigned int intnum,
void *sp){unreg_inthdr(94,sp);}
213 void ur_inthdr_095(
unsigned int intnum,
void *sp){unreg_inthdr(95,sp);}
214 void ur_inthdr_096(
unsigned int intnum,
void *sp){unreg_inthdr(96,sp);}
215 void ur_inthdr_097(
unsigned int intnum,
void *sp){unreg_inthdr(97,sp);}
216 void ur_inthdr_098(
unsigned int intnum,
void *sp){unreg_inthdr(98,sp);}
217 void ur_inthdr_099(
unsigned int intnum,
void *sp){unreg_inthdr(99,sp);}
218 void ur_inthdr_100(
unsigned int intnum,
void *sp){unreg_inthdr(100,sp);}
219 void ur_inthdr_101(
unsigned int intnum,
void *sp){unreg_inthdr(101,sp);}
220 void ur_inthdr_102(
unsigned int intnum,
void *sp){unreg_inthdr(102,sp);}
221 void ur_inthdr_103(
unsigned int intnum,
void *sp){unreg_inthdr(103,sp);}
222 void ur_inthdr_104(
unsigned int intnum,
void *sp){unreg_inthdr(104,sp);}
223 void ur_inthdr_105(
unsigned int intnum,
void *sp){unreg_inthdr(105,sp);}
224 void ur_inthdr_106(
unsigned int intnum,
void *sp){unreg_inthdr(106,sp);}
225 void ur_inthdr_107(
unsigned int intnum,
void *sp){unreg_inthdr(107,sp);}
226 void ur_inthdr_108(
unsigned int intnum,
void *sp){unreg_inthdr(108,sp);}
227 void ur_inthdr_109(
unsigned int intnum,
void *sp){unreg_inthdr(109,sp);}
228 void ur_inthdr_110(
unsigned int intnum,
void *sp){unreg_inthdr(110,sp);}
229 void ur_inthdr_111(
unsigned int intnum,
void *sp){unreg_inthdr(111,sp);}
230 void ur_inthdr_112(
unsigned int intnum,
void *sp){unreg_inthdr(112,sp);}
231 void ur_inthdr_113(
unsigned int intnum,
void *sp){unreg_inthdr(113,sp);}
232 void ur_inthdr_114(
unsigned int intnum,
void *sp){unreg_inthdr(114,sp);}
233 void ur_inthdr_115(
unsigned int intnum,
void *sp){unreg_inthdr(115,sp);}
234 void ur_inthdr_116(
unsigned int intnum,
void *sp){unreg_inthdr(116,sp);}
235 void ur_inthdr_117(
unsigned int intnum,
void *sp){unreg_inthdr(117,sp);}
236 void ur_inthdr_118(
unsigned int intnum,
void *sp){unreg_inthdr(118,sp);}
237 void ur_inthdr_119(
unsigned int intnum,
void *sp){unreg_inthdr(119,sp);}
238 void ur_inthdr_120(
unsigned int intnum,
void *sp){unreg_inthdr(120,sp);}
239 void ur_inthdr_121(
unsigned int intnum,
void *sp){unreg_inthdr(121,sp);}
240 void ur_inthdr_122(
unsigned int intnum,
void *sp){unreg_inthdr(122,sp);}
241 void ur_inthdr_123(
unsigned int intnum,
void *sp){unreg_inthdr(123,sp);}
242 void ur_inthdr_124(
unsigned int intnum,
void *sp){unreg_inthdr(124,sp);}
243 void ur_inthdr_125(
unsigned int intnum,
void *sp){unreg_inthdr(125,sp);}
245 extern void _endof_stack();
246 extern void start(
void);
248 static const gs_inthdr init_gs_inthdr_table[MAXVECT] = {
377 extern void int000(
void);
378 extern void int001(
void);
379 extern void int002(
void);
380 extern void int003(
void);
381 extern void int004(
void);
382 extern void int005(
void);
383 extern void int006(
void);
384 extern void int007(
void);
385 extern void int008(
void);
386 extern void int009(
void);
387 extern void int010(
void);
388 extern void int011(
void);
389 extern void int012(
void);
390 extern void int013(
void);
391 extern void int014(
void);
392 extern void int015(
void);
393 extern void int016(
void);
394 extern void int017(
void);
395 extern void int018(
void);
396 extern void int019(
void);
397 extern void int020(
void);
398 extern void int021(
void);
399 extern void int022(
void);
400 extern void int023(
void);
401 extern void int024(
void);
402 extern void int025(
void);
403 extern void int026(
void);
404 extern void int027(
void);
405 extern void int028(
void);
406 extern void int029(
void);
407 extern void int030(
void);
408 extern void int031(
void);
409 extern void int032(
void);
410 extern void int033(
void);
411 extern void int034(
void);
412 extern void int035(
void);
413 extern void int036(
void);
414 extern void int037(
void);
415 extern void int038(
void);
416 extern void int039(
void);
417 extern void int040(
void);
418 extern void int041(
void);
419 extern void int042(
void);
420 extern void int043(
void);
421 extern void int044(
void);
422 extern void int045(
void);
423 extern void int046(
void);
424 extern void int047(
void);
425 extern void int048(
void);
426 extern void int049(
void);
427 extern void int050(
void);
428 extern void int051(
void);
429 extern void int052(
void);
430 extern void int053(
void);
431 extern void int054(
void);
432 extern void int055(
void);
433 extern void int056(
void);
434 extern void int057(
void);
435 extern void int058(
void);
436 extern void int059(
void);
437 extern void int060(
void);
438 extern void int061(
void);
439 extern void int062(
void);
440 extern void int063(
void);
441 extern void int064(
void);
442 extern void int065(
void);
443 extern void int066(
void);
444 extern void int067(
void);
445 extern void int068(
void);
446 extern void int069(
void);
447 extern void int070(
void);
448 extern void int071(
void);
449 extern void int072(
void);
450 extern void int073(
void);
451 extern void int074(
void);
452 extern void int075(
void);
453 extern void int076(
void);
454 extern void int077(
void);
455 extern void int078(
void);
456 extern void int079(
void);
457 extern void int080(
void);
458 extern void int081(
void);
459 extern void int082(
void);
460 extern void int083(
void);
461 extern void int084(
void);
462 extern void int085(
void);
463 extern void int086(
void);
464 extern void int087(
void);
465 extern void int088(
void);
466 extern void int089(
void);
467 extern void int090(
void);
468 extern void int091(
void);
469 extern void int092(
void);
470 extern void int093(
void);
471 extern void int094(
void);
472 extern void int095(
void);
473 extern void int096(
void);
474 extern void int097(
void);
475 extern void int098(
void);
476 extern void int099(
void);
477 extern void int100(
void);
478 extern void int101(
void);
479 extern void int102(
void);
480 extern void int103(
void);
481 extern void int104(
void);
482 extern void int105(
void);
483 extern void int106(
void);
484 extern void int107(
void);
485 extern void int108(
void);
486 extern void int109(
void);
487 extern void int110(
void);
488 extern void int111(
void);
489 extern void int112(
void);
490 extern void int113(
void);
491 extern void int114(
void);
492 extern void int115(
void);
493 extern void int116(
void);
494 extern void int117(
void);
495 extern void int118(
void);
496 extern void int119(
void);
497 extern void int120(
void);
498 extern void int121(
void);
499 extern void int122(
void);
500 extern void int123(
void);
501 extern void int124(
void);
502 extern void int125(
void);
504 const inthdr init_inthdr_table[MAXVECT] __attribute__ ((section(
"vect"))) = {
633 gs_inthdr inthdr_table[MAXVECT];
635 void init_interrupt_vector(
void)
639 for(i=0; i<MAXVECT; i++) {
640 inthdr_table[i] = init_gs_inthdr_table[i];
646 int register_interrupt(
unsigned short vectnum,
647 void (* func)(
unsigned int intnum,
void *sp))
649 if(inthdr_table[vectnum] == init_gs_inthdr_table[vectnum]) {
650 inthdr_table[vectnum] = func;
652 SYSERR_PRINT(
"Interrupt Vector %d allready registered.\n",
660 int unregister_interrupt(
unsigned short vectnum)
662 inthdr_table[vectnum] = init_gs_inthdr_table[vectnum];
667 #ifdef GSC_KERNEL_ENABLE_INTERRUPT_COUNT // $gsc カーネル割込カウンタを有効にする 668 static unsigned int interrupt_count[MAXVECT];
670 int get_interrupt_count(
int intnum)
672 if(inthdr_table[intnum] == init_gs_inthdr_table[intnum]) {
675 return (
int)interrupt_count[intnum];
680 void interrupt_func(
unsigned int intnum,
void *sp)
682 void (* func)(
unsigned int in,
void *s);
684 DKPRINTF(0x04,
"int = %u\n", intnum);
686 #ifdef GSC_KERNEL_ENABLE_INTERRUPT_COUNT 687 interrupt_count[intnum] ++;
693 func = inthdr_table[intnum];
695 (* func)(intnum, sp);
int tkprintf(const char *fmt,...)
非タスクコンテキスト実行用メッセージ出力