From e087751b107982eeaa001e92c2dd1f24f1af6809 Mon Sep 17 00:00:00 2001 From: Karl Kurbjun Date: Sat, 12 Dec 2009 18:36:52 +0000 Subject: M:Robe 500: Fix FIQ's and make the audio DMA a FIQ, simplify the ADC code and make it more reliable. Fix ADC problems on initial boot. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23948 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/tms320dm320/system-dm320.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'firmware/target/arm/tms320dm320/system-dm320.c') diff --git a/firmware/target/arm/tms320dm320/system-dm320.c b/firmware/target/arm/tms320dm320/system-dm320.c index 434b0065a5..9dff1afc20 100644 --- a/firmware/target/arm/tms320dm320/system-dm320.c +++ b/firmware/target/arm/tms320dm320/system-dm320.c @@ -155,17 +155,17 @@ void fiq_handler(void) * Based on: linux/arch/arm/kernel/entry-armv.S and system-meg-fx.c */ - asm volatile ( - "sub lr, lr, #4 \r\n" - "stmfd sp!, {r0-r3, ip, lr} \r\n" - "mov r0, #0x00030000 \r\n" - "ldr r0, [r0, #0x510] \r\n" /* Fetch value from IO_INTC_FIQENTRY0 */ - "sub r0, r0, #1 \r\n" - "ldr r1, =irqvector \r\n" - "ldr r1, [r1, r0, lsl #2] \r\n" /* Divide value by 4 (TBA0/TBA1 is set to 0) and load appropriate pointer from the vector list */ - "blx r1 \r\n" /* Jump to handler */ - "ldmfd sp!, {r0-r3, ip, pc}^ \r\n" /* Return from FIQ */ - ); + asm volatile( "stmfd sp!, {r0-r7, ip, lr} \n" /* Store context */ + "sub sp, sp, #8 \n"); /* Reserve stack */ + unsigned short addr = IO_INTC_FIQENTRY0>>2; + if(addr != 0) + { + addr--; + irqvector[addr](); + } + asm volatile( "add sp, sp, #8 \n" /* Cleanup stack */ + "ldmfd sp!, {r0-r7, ip, lr} \n" /* Restore context */ + "subs pc, lr, #4 \n"); /* Return from FIQ */ } void system_reboot(void) -- cgit v1.2.3