NetBurner 3.5.6
PDF Version
cfinter.h
1/*NB_REVISION*/
2
3/*NB_COPYRIGHT*/
4
10#ifndef _COLDFIRE_INTERRUPT_H
11#define _COLDFIRE_INTERRUPT_H
12
13
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
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
1132 // end of coldfire_vectors group
1133
1134
1135extern "C"
1136{
1190 uint16_t GetSR_IntLevel();
1191
1267 void SetSR_IntLevel(uint16_t sv);
1268}
1269
1270 // groupInterruptMacroColdFire
1271
1272#endif // _COLDFIRE_INTERRUPT_H
1273
1274
void SetSR_IntLevel(uint16_t sv)
Set the interrupt mask level in the Status Register (SR).
uint16_t GetSR_IntLevel()
Get the current interrupt mask level from the Status Register (SR).