FreeCalypso > hg > fc-selenite
diff src/cs/drivers/drv_app/ffs/board/amdsbdrv.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/amdsbdrv.c Fri Jul 20 02:48:06 2018 +0000 +++ b/src/cs/drivers/drv_app/ffs/board/amdsbdrv.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" // Due to long branches, we disable all tracing and led function calls. @@ -142,30 +141,48 @@ * Interrupt Enable/Disable ******************************************************************************/ -uint32 amd_int_disable(void) +#ifdef __GNUC__ +#define NOINLINE __attribute__ ((noinline)) +#else +#define NOINLINE +#endif + +uint32 NOINLINE amd_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_amd_disable"); asm(" bx A2 "); +#ifdef __GNUC__ + asm(".balign 4"); + asm("tct_amd_disable:"); + asm(" .word TCT_Control_Interrupts"); +#else asm("tct_amd_disable .field _TCT_Control_Interrupts+0,32"); asm(" .global _TCT_Control_Interrupts"); #endif } -void amd_int_enable(uint32 cpsr) +void NOINLINE amd_int_enable(uint32 cpsr) { #ifdef __GNUC__ - return NU_Control_Interrupts(cpsr); + asm(" .code 16"); #else asm(" .state16"); +#endif asm(" ldr A2, tct_amd_enable"); asm(" bx A2 "); +#ifdef __GNUC__ + asm(".balign 4"); + asm("tct_amd_enable:"); + asm(" .word TCT_Control_Interrupts"); +#else asm("tct_amd_enable .field _TCT_Control_Interrupts+0,32"); asm(" .global _TCT_Control_Interrupts"); #endif