From 3c7ada594142b44bfb543f7ec693ac7250176287 Mon Sep 17 00:00:00 2001 From: Karl Kurbjun Date: Wed, 11 Mar 2009 01:18:23 +0000 Subject: Sound working with rockbox PCM interface on the M:Robe 500. Doom and Rockboy run with sound. There are stability problems that need to be looked into causing the player to reset when music playback is attempted. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20284 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/tms320dm320/dsp-dm320.c | 123 +--------------------------- 1 file changed, 2 insertions(+), 121 deletions(-) (limited to 'firmware/target/arm/tms320dm320/dsp-dm320.c') diff --git a/firmware/target/arm/tms320dm320/dsp-dm320.c b/firmware/target/arm/tms320dm320/dsp-dm320.c index aad2941254..f729cc4e90 100644 --- a/firmware/target/arm/tms320dm320/dsp-dm320.c +++ b/firmware/target/arm/tms320dm320/dsp-dm320.c @@ -27,18 +27,6 @@ #include "dsp-target.h" #include "dsp/ipc.h" -/* A "DSP image" is an array of these, terminated by raw_data_size_half = 0. */ -struct dsp_section { - const unsigned short *raw_data; - unsigned short physical_addr; - unsigned short raw_data_size_half; -}; - -/* Must define struct dsp_section before including the image. */ -#include "dsp/dsp-image.h" - -#define dsp_message (*(volatile struct ipc_message *)&DSP_(_status)) - #ifdef DEBUG static void dsp_status(void) { @@ -74,7 +62,7 @@ static void dsp_status(void) } #endif -static void dsp_reset(void) +void dsp_reset(void) { DSP_(0x7fff) = 0xdead; @@ -102,7 +90,7 @@ void dsp_wake(void) restore_irq(old_level); } -static void dsp_load(const struct dsp_section *im) +void dsp_load(const struct dsp_section *im) { while (im->raw_data_size_half) { volatile unsigned short *data_ptr = &DSP_(im->physical_addr); @@ -131,110 +119,3 @@ static void dsp_load(const struct dsp_section *im) } } -static signed short *the_rover = (signed short *)0x1900000; -static unsigned int index_rover = 0; -#define ARM_BUFFER_SIZE (PCM_SIZE) - -void dsp_init(void) -{ - unsigned long sdem_addr; - int fd; - int bytes; - - IO_INTC_IRQ0 = 1 << 11; - IO_INTC_EINT0 |= 1 << 11; - - IO_DSPC_HPIB_CONTROL = 1 << 10 | 1 << 9 | 1 << 8 | 1 << 7 | 1 << 3 | 1 << 0; - - dsp_reset(); - dsp_load(dsp_image); - - /* Initialize codec. */ - sdem_addr = (unsigned long)the_rover - CONFIG_SDRAM_START; - DEBUGF("pcm_sdram at 0x%08lx, sdem_addr 0x%08lx", - (unsigned long)the_rover, (unsigned long)sdem_addr); - DSP_(_sdem_addrl) = sdem_addr & 0xffff; - DSP_(_sdem_addrh) = sdem_addr >> 16; - DSP_(_sdem_dsp_size) = ARM_BUFFER_SIZE; - - fd = open("/test.raw", O_RDONLY); - bytes = read(fd, the_rover, 4*1024*1024); - close(fd); - - DEBUGF("read %d rover bytes", bytes); - -#ifdef IPC_SIZES - DEBUGF("dsp_message at 0x%08x", &dsp_message); - DEBUGF("sizeof(ipc_message)=%uB offset(ipc_message.payload)=%uB", - sizeof(struct ipc_message), (int)&((struct ipc_message*)0)->payload); -#endif - -#if 0//def INIT_MSG - /* Prepare init message. */ - - /* DSP accesses MUST be done a word at a time. */ - dsp_message.msg = MSG_INIT; - - sdem_addr = (unsigned long)pcm_sdram - CONFIG_SDRAM_START; - DEBUGF("pcm_sdram at 0x%08x, sdem_addr 0x%08x", pcm_sdram, sdem_addr); - dsp_message.payload.init.sdem_addrl = sdem_addr & 0xffff; - dsp_message.payload.init.sdem_addrh = sdem_addr >> 16; - - DEBUGF("dsp_message: %04x %04x %04x %04x", - ((unsigned short *)&dsp_message)[0], - ((unsigned short *)&dsp_message)[1], - ((unsigned short *)&dsp_message)[2], - ((unsigned short *)&dsp_message)[3]); -#endif - -} - -void DSPHINT(void) -{ - unsigned long sdem_addr; - unsigned int i; - char buffer[80]; - - IO_INTC_IRQ0 = 1 << 11; - - switch (dsp_message.msg) - { - case MSG_DEBUGF: - /* DSP stores one character per word. */ - for (i = 0; i < sizeof(buffer); i++) - { - buffer[i] = dsp_message.payload.debugf.buffer[i]; - } - - /* Release shared area to DSP. */ - dsp_wake(); - - DEBUGF("DSP: %s", buffer); - break; - case MSG_REFILL: - sdem_addr = (unsigned long)the_rover + index_rover - CONFIG_SDRAM_START; - - DSP_(_sdem_addrl) = sdem_addr & 0xffff; - DSP_(_sdem_addrh) = sdem_addr >> 16; - DSP_(_sdem_dsp_size) = ARM_BUFFER_SIZE; - - index_rover += ARM_BUFFER_SIZE; - if (index_rover >= 4*1024*1024) - { - index_rover = 0; - } - - DEBUGF("pcm_sdram at 0x%08lx, sdem_addr 0x%08lx", - (unsigned long)the_rover, (unsigned long)sdem_addr); - - break; - default: - DEBUGF("DSP: unknown msg 0x%04x", dsp_message.msg); - break; - } - - /* Release shared area to DSP. */ - dsp_wake(); - - DEBUGF("DSP: %s", buffer); -} -- cgit v1.2.3