NetBurner 3.5.8
PDF Version
Toggle main menu visibility
cfinter.h
1
/*NB_REVISION*/
2
3
/*NB_COPYRIGHT*/
4
8
9
10
#ifndef _COLDFIRE_INTERRUPT_H
11
#define _COLDFIRE_INTERRUPT_H
12
13
20
21
#ifdef __cplusplus
22
#ifdef _NBRTOS_H
23
363
#define INTERRUPT(x, y) \
364
extern "C" \
365
{ \
366
void real_##x(); \
367
void x(); \
368
} \
369
void fake_##x() \
370
{ \
371
__asm__(".global " #x); \
372
__asm__(#x ":"); \
373
__asm__("move.w #0x2700,%sr "); \
374
__asm__("lea -60(%a7),%a7 "); \
375
__asm__("movem.l %d0-%d7/%a0-%a6,(%a7) "); \
376
__asm__("move.l (OSISRLevel32),%d0 "); \
377
__asm__("move.l %d0,-(%sp) "); \
378
__asm__("move.l (OSIntNesting),%d0"); \
379
__asm__("addq.l #1,%d0"); \
380
__asm__("move.l %d0,(OSIntNesting)"); \
381
__asm__("move.l #" #y ",%d0 "); \
382
__asm__("move.w %d0,%sr "); \
383
__asm__("move.l %d0,(OSISRLevel32)"); \
384
__asm__("jsr real_" #x); \
385
__asm__("move.l (%sp)+,%d0 "); \
386
__asm__("move.l %d0,(OSISRLevel32)"); \
387
__asm__(" jsr OSIntExit "); \
388
__asm__("movem.l (%a7),%d0-%d7/%a0-%a6 "); \
389
__asm__("lea 60(%a7),%a7 "); \
390
__asm__("rte"); \
391
} \
392
void real_##x()
393
394
#else
395
396
#error NBRTOS must be included
397
398
#endif
// _NBRTOS_H for C++ ver
399
400
#else
/*Do C version */
401
402
#ifdef _NBRTOS_H
403
#define INTERRUPT(x, y) \
404
void x(); \
405
void fake_##x() \
406
{ \
407
__asm__(".global " #x); \
408
__asm__(#x ":"); \
409
__asm__("move.w #0x2700,%sr "); \
410
__asm__("lea -60(%a7),%a7 "); \
411
__asm__("movem.l %d0-%d7/%a0-%a6,(%a7) "); \
412
__asm__("move.l (OSISRLevel32),%d0 "); \
413
__asm__("move.l %d0,-(%sp) "); \
414
__asm__("move.l (OSIntNesting),%d0"); \
415
__asm__("addq.l #1,%d0"); \
416
__asm__("move.l %d0,(OSIntNesting)"); \
417
__asm__("move.l #" #y ",%d0 "); \
418
__asm__("move.w %d0,%sr "); \
419
__asm__("move.l %d0,(OSISRLevel32)"); \
420
__asm__("jsr real_" #x); \
421
__asm__("move.l (%sp)+,%d0 "); \
422
__asm__("move.l %d0,(OSISRLevel32)"); \
423
__asm__(" jsr OSIntExit "); \
424
__asm__("movem.l (%a7),%d0-%d7/%a0-%a6 "); \
425
__asm__("lea 60(%a7),%a7 "); \
426
__asm__("rte"); \
427
} \
428
void real_##x()
429
#else
430
#error NBRTOS must be included
431
#endif
// _NBRTOS_H for C ver
432
#endif
// C Version
433
434
/*----------------------------------------------------------------------------------------------------
435
* The following definitions define the vector offset for various predefined vectors on the coldfire.
436
*----------------------------------------------------------------------------------------------------*/
437
/*
438
#define CF_ACCESSERROR_VECTOR 2
439
#define CF_ADDRESSERROR_VECTOR 3
440
#define CF_ILLEGAL_INSTRUCTION_VECTOR 4
441
#define CF_PRIVLEDGE_VIOLATION_VECTOR 8
442
#define CF_TRACE_VECTOR 9
443
#define CF_UNIMPLMENTED_A_VECTOR 10
444
#define CF_UNIMPLMENTED_F_VECTOR 11
445
#define CF_DEBUG_INTERRUPT 12
446
#define CF_FORMAT_ERR_VECTOR 14
447
#define CF_UNINITIALIZED_VECTOR 15
448
#define CF_SPURIOUS_INT_VECTOR 24
449
#define CF_AUTOVECTOR_IRQ1 25
450
#define CF_AUTOVECTOR_IRQ2 26
451
#define CF_AUTOVECTOR_IRQ3 27
452
#define CF_AUTOVECTOR_IRQ4 28
453
#define CF_AUTOVECTOR_IRQ5 29
454
#define CF_AUTOVECTOR_IRQ6 30
455
#define CF_AUTOVECTOR_IRQ7 31
456
#define CF_TRAP0_VECTOR 32
457
#define CF_TRAP1_VECTOR 33
458
#define CF_TRAP2_VECTOR 34
459
#define CF_TRAP3_VECTOR 35
460
#define CF_TRAP4_VECTOR 36
461
#define CF_TRAP5_VECTOR 37
462
#define CF_TRAP6_VECTOR 38
463
#define CF_TRAP7_VECTOR 39
464
#define CF_TRAP8_VECTOR 40
465
#define CF_TRAP9_VECTOR 41
466
#define CF_TRAP10_VECTOR 42
467
#define CF_TRAP11_VECTOR 43
468
#define CF_TRAP12_VECTOR 44
469
#define CF_TRAP13_VECTOR 45
470
#define CF_TRAP14_VECTOR 46
471
#define CF_TRAP15_VECTOR 47
472
#define CF_USER_BASE_VECTOR 64
473
*/
474
509
510
/*----------------------------------------------------------------------------------------------------
511
* The following definitions define the vector offset for various predefined vectors on the ColdFire.
512
*----------------------------------------------------------------------------------------------------*/
513
563
#define CF_ACCESSERROR_VECTOR 2
564
580
#define CF_ADDRESSERROR_VECTOR 3
581
597
#define CF_ILLEGAL_INSTRUCTION_VECTOR 4
598
613
#define CF_PRIVLEDGE_VIOLATION_VECTOR 8
614
624
#define CF_TRACE_VECTOR 9
625
635
#define CF_UNIMPLMENTED_A_VECTOR 10
636
645
#define CF_UNIMPLMENTED_F_VECTOR 11
646
656
#define CF_DEBUG_INTERRUPT 12
657
669
#define CF_FORMAT_ERR_VECTOR 14
670
683
#define CF_UNINITIALIZED_VECTOR 15
684
733
#define CF_SPURIOUS_INT_VECTOR 24
734
745
#define CF_AUTOVECTOR_IRQ1 25
746
752
#define CF_AUTOVECTOR_IRQ2 26
753
759
#define CF_AUTOVECTOR_IRQ3 27
760
766
#define CF_AUTOVECTOR_IRQ4 28
767
773
#define CF_AUTOVECTOR_IRQ5 29
774
780
#define CF_AUTOVECTOR_IRQ6 30
781
793
#define CF_AUTOVECTOR_IRQ7 31
794
838
#define CF_TRAP0_VECTOR 32
839
845
#define CF_TRAP1_VECTOR 33
846
852
#define CF_TRAP2_VECTOR 34
853
859
#define CF_TRAP3_VECTOR 35
860
866
#define CF_TRAP4_VECTOR 36
867
873
#define CF_TRAP5_VECTOR 37
874
880
#define CF_TRAP6_VECTOR 38
881
887
#define CF_TRAP7_VECTOR 39
888
894
#define CF_TRAP8_VECTOR 40
895
901
#define CF_TRAP9_VECTOR 41
902
908
#define CF_TRAP10_VECTOR 42
909
915
#define CF_TRAP11_VECTOR 43
916
922
#define CF_TRAP12_VECTOR 44
923
929
#define CF_TRAP13_VECTOR 45
930
936
#define CF_TRAP14_VECTOR 46
937
943
#define CF_TRAP15_VECTOR 47
944
1130
#define CF_USER_BASE_VECTOR 64
1131
// end of coldfire_vectors group
1133
1134
1135
extern
"C"
1136
{
1190
uint16_t
GetSR_IntLevel
();
1191
1267
void
SetSR_IntLevel
(uint16_t sv);
1268
}
1269
// groupInterruptMacroColdFire
1271
1272
#endif
// _COLDFIRE_INTERRUPT_H
1273
1274
SetSR_IntLevel
void SetSR_IntLevel(uint16_t sv)
Set the interrupt mask level in the Status Register (SR).
GetSR_IntLevel
uint16_t GetSR_IntLevel()
Get the current interrupt mask level from the Status Register (SR).
arch
coldfire
include
cfinter.h
Generated by
1.18.0