FreeCalypso > hg > fc-selenite
diff src/cs/drivers/drv_app/ffs/board/intelsbdrv.c @ 72:4484ab3f6ab3
FFS interrupt voodoo: made original TMS470 approach work with gcc
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 20 Jul 2018 03:35:25 +0000 |
parents | 559a8b3ef10b |
children |
line wrap: on
line diff
--- a/src/cs/drivers/drv_app/ffs/board/intelsbdrv.c Fri Jul 20 02:48:06 2018 +0000 +++ b/src/cs/drivers/drv_app/ffs/board/intelsbdrv.c Fri Jul 20 03:35:25 2018 +0000 @@ -13,7 +13,6 @@ #include "ffs/ffs.h" #include "ffs/board/drv.h" #include "ffs/board/ffstrace.h" -#include "nucleus.h" #define INTEL_UNLOCK_SLOW 1 @@ -226,30 +225,48 @@ * Interrupt Enable/Disable ******************************************************************************/ -uint32 intel_int_disable(void) +#ifdef __GNUC__ +#define NOINLINE __attribute__ ((noinline)) +#else +#define NOINLINE +#endif + +uint32 NOINLINE intel_int_disable(void) { #ifdef __GNUC__ - return NU_Control_Interrupts(0xC0); + asm(" .code 16"); #else asm(" .state16"); +#endif asm(" mov A1, #0xC0"); asm(" ldr A2, tct_intel_disable"); asm(" bx A2 "); +#ifdef __GNUC__ + asm(".balign 4"); + asm("tct_intel_disable:"); + asm(" .word TCT_Control_Interrupts"); +#else asm("tct_intel_disable .field _TCT_Control_Interrupts+0,32"); asm(" .global _TCT_Control_Interrupts"); #endif } -void intel_int_enable(uint32 cpsr) +void NOINLINE intel_int_enable(uint32 cpsr) { #ifdef __GNUC__ - return NU_Control_Interrupts(cpsr); + asm(" .code 16"); #else asm(" .state16"); +#endif asm(" ldr A2, tct_intel_enable"); asm(" bx A2 "); +#ifdef __GNUC__ + asm(".balign 4"); + asm("tct_intel_enable:"); + asm(" .word TCT_Control_Interrupts"); +#else asm("tct_intel_enable .field _TCT_Control_Interrupts+0,32"); asm(" .global _TCT_Control_Interrupts"); #endif