DM320 DSP PCM handler: Use initialization library to make sure that code starts up reliably. Also make some variables volatile so code can be easier debugged.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29219 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Karl Kurbjun 2011-02-06 19:28:46 +00:00
parent 52b0605fb4
commit fafd50938c
7 changed files with 193 additions and 73 deletions

View file

@ -20,13 +20,13 @@
*
****************************************************************************/
#include <stdio.h>
#include "arm.h"
#include "registers.h"
#include "ipc.h"
#include "dma.h"
volatile struct ipc_message status;
volatile short int0_count;
#if defined(HAVE_DEBUG)
static int acked;
@ -34,6 +34,7 @@ static int acked;
interrupt void handle_int0(void) {
IFR = 1;
int0_count++;
#if defined(HAVE_DEBUG)
acked = 1;

View file

@ -46,22 +46,21 @@ volatile unsigned short sdem_dsp_size;
* (SARAM to McBSP) and the level on the ARM buffer (sdem_level).
* sdem_level is used in the main firmware to keep track of the current
* playback status. dsp_level is only used in this function. */
static unsigned short dsp_level;
volatile unsigned short dsp_level;
volatile unsigned short sdem_level;
/* This is used to keep track of the last SDRAM to SARAM transfer */
static unsigned short last_size;
volatile unsigned short last_size;
/* This tells us which half of the DSP buffer (data) is free */
static unsigned short dma0_unlocked;
volatile unsigned short dma0_unlocked;
/* This is used by the ARM to flag playback status and start/stop the DMA
* transfers. */
volatile unsigned short dma0_stopped;
/* This is used to effectively flag whether the ARM has new data ready or not */
short waiting;
volatile short waiting;
/* rebuffer sets up the next SDRAM to SARAM transfer and tells the ARM when DMA
* needs a new buffer.
@ -196,16 +195,8 @@ interrupt void handle_dmac(void) {
}
void dma_init(void) {
/* Initialize some of the global variables to known values avoiding the
* .cinit section. */
dsp_level = 0;
sdem_level = 0;
last_size = 0;
dma0_unlocked = 0;
dma0_stopped = 1;
waiting = 0;
/* Make sure that DMPREC is clear */
DMPREC = 0;
/* Configure SARAM to McBSP DMA */
@ -216,8 +207,7 @@ void dma_init(void) {
* ABU mode, From data space with postincrement, to data space with no
* change
*/
DMMCR0 = 1 << 14 | 1 << 13 |
1 << 12 | 1 << 8 | 1 << 6 | 1;
DMMCR0 = 1 << 14 | 1 << 13 | 1 << 12 | 1 << 8 | 1 << 6 | 1;
/* Set the source (incrementing) location */
DMSRC0 = (unsigned short)&data;
@ -228,6 +218,6 @@ void dma_init(void) {
/* Set the size of the buffer */
DMCTR0 = sizeof(data);
/* Setup DMA0 interrupts and start the transfer */
/* Set the interrupt mux */
DMPREC = 2 << 6;
}

View file

@ -20,46 +20,178 @@
*
*/
static const unsigned short _section_text[] = {
0xf495, 0x4a08, 0x4a09, 0x4a0a, 0x4a0b, 0x4a0c, 0x4a0d, 0x4a10, 0x4a11, 0x4a12, 0x4a13, 0x4a14, 0x4a15, 0x4a16, 0x4a17, 0x4a17, 0x4a19, 0x4a0e, 0x4a06, 0x4a07, 0x4a1a, 0x4a1d, 0x4a1b, 0x4a1c, 0x68f8, 0x0007, 0x7d3f, 0x69f8, 0x0007, 0x4000, 0x68f8, 0x001d, 0xfffc, 0x4818, 0x68f8, 0x0018, 0xfffe, 0x7711, 0x0001, 0x4a08, 0x7681, 0x0001, 0x10f8, 0x031d, 0x76f8, 0x031e, 0x0000, 0xfa44, 0x00c2, 0xf495, 0xeeff, 0x7712, 0x0054, 0x960f, 0xf830, 0x00c2, 0xf074, 0x00fc, 0x7711, 0x0054, 0x6981, 0x0001, 0xf074, 0x02af, 0xf073, 0x00c4, 0xf074, 0x00fc, 0xee01, 0x8a18, 0xf495, 0x8a1c, 0x8a1b, 0x8a1d, 0x8a1a, 0x8a07, 0x8a06, 0x8a0e, 0x8a19, 0x8a17, 0x8a17, 0x8a16, 0x8a15, 0x8a14, 0x8a13, 0x8a12, 0x8a11, 0x8a10, 0x8a0d, 0x8a0c, 0x8a0b, 0x8a0a, 0x8a09, 0x8a08, 0xf4eb, 0x4a11, 0x7711, 0x0026, 0x7712, 0x0001, 0x7713, 0x0001, 0x7681, 0x0010, 0x7711, 0x0000, 0x7681, 0xffff, 0xe501, 0xf495, 0xf6bb, 0xf074, 0x0284, 0xf074, 0x0243, 0xf4e1, 0xf495, 0xf073, 0x00f3, 0xe808, 0x75f8, 0x0008, 0x0280, 0xfc00, 0x4a11, 0x60f8, 0x031d, 0x0001, 0xfa30, 0x0109, 0xf495, 0xeefe, 0x60f8, 0x031d, 0x0002, 0xf820, 0x011e, 0x7711, 0x0054, 0x6881, 0xfffe, 0xf074, 0x02ba, 0xe800, 0x75f8, 0x0008, 0x8006, 0x76f8, 0x031b, 0x0000, 0x76f8, 0x0319, 0x0000, 0x76f8, 0x031a, 0x0000, 0xf073, 0x018b, 0x10f8, 0x031a, 0x08f8, 0x0318, 0xf844, 0x012f, 0x76f8, 0x031a, 0x0000, 0x76f8, 0x031e, 0x0001, 0x76f8, 0x02c5, 0x0003, 0xf074, 0x00f7, 0x10f8, 0x031e, 0xf844, 0x018b, 0x10f8, 0x0318, 0x00f8, 0x0319, 0x08f8, 0x031a, 0x8811, 0xf495, 0x7710, 0x1000, 0xf6a9, 0xf820, 0x0146, 0xf020, 0x1000, 0xf273, 0x014a, 0x08f8, 0x0319, 0x10f8, 0x0318, 0x08f8, 0x031a, 0x80f8, 0x031b, 0x10f8, 0x031c, 0xf6b8, 0xf000, 0x8000, 0x6ff8, 0x0319, 0x0c1f, 0x75f8, 0x0008, 0x8002, 0xe800, 0x75f8, 0x0008, 0x8003, 0x10f8, 0x0316, 0xf1ef, 0xf3e1, 0x10f8, 0x0317, 0xf2a0, 0x00f8, 0x031a, 0x4e00, 0xf020, 0xffff, 0x5700, 0xf280, 0x75f8, 0x0008, 0x8000, 0x5600, 0xf0f0, 0x75f8, 0x0008, 0x8001, 0xe800, 0x75f8, 0x031b, 0x8004, 0x75f8, 0x0008, 0x8005, 0x74f8, 0x02c7, 0x8006, 0x74f8, 0x02c8, 0x8001, 0x74f8, 0x02c9, 0x8000, 0x74f8, 0x02ca, 0x8003, 0xe801, 0x74f8, 0x02cb, 0x8002, 0x75f8, 0x0008, 0x8006, 0xee02, 0x8a11, 0xfc00, 0xf495, 0x4a08, 0x4a09, 0x4a0a, 0x4a0b, 0x4a0c, 0x4a0d, 0x4a10, 0x4a11, 0x4a12, 0x4a13, 0x4a14, 0x4a15, 0x4a16, 0x4a17, 0x4a17, 0x4a19, 0x4a0e, 0x4a06, 0x4a07, 0x4a1a, 0x4a1d, 0x4a1b, 0x4a1c, 0x68f8, 0x0007, 0x7d3f, 0x69f8, 0x0007, 0x4000, 0x68f8, 0x001d, 0xfffc, 0x4818, 0x68f8, 0x0018, 0xfffe, 0x7711, 0x0001, 0x4a08, 0x7681, 0x0040, 0x7711, 0x0055, 0x7681, 0x0000, 0xf020, 0x0800, 0x7711, 0x0057, 0xeeff, 0x1881, 0x8000, 0xf020, 0x0800, 0x1c00, 0x76f8, 0x0319, 0x0000, 0x80f8, 0x031c, 0xf074, 0x00fc, 0xee01, 0x8a18, 0xf495, 0x8a1c, 0x8a1b, 0x8a1d, 0x8a1a, 0x8a07, 0x8a06, 0x8a0e, 0x8a19, 0x8a17, 0x8a17, 0x8a16, 0x8a15, 0x8a14, 0x8a13, 0x8a12, 0x8a11, 0x8a10, 0x8a0d, 0x8a0c, 0x8a0b, 0x8a0a, 0x8a09, 0x8a08, 0xf4eb, 0xf495, 0x4a08, 0x4a09, 0x4a0a, 0x4a0b, 0x4a0c, 0x4a0d, 0x4a10, 0x4a11, 0x4a12, 0x4a13, 0x4a14, 0x4a15, 0x4a16, 0x4a17, 0x4a17, 0x4a19, 0x4a0e, 0x4a06, 0x4a07, 0x4a1a, 0x4a1d, 0x4a1b, 0x4a1c, 0x68f8, 0x0007, 0x7d3f, 0x69f8, 0x0007, 0x4000, 0x68f8, 0x001d, 0xfffc, 0x4818, 0x68f8, 0x0018, 0xfffe, 0x7711, 0x0001, 0x4a08, 0x7681, 0x0800, 0x10f8, 0x031b, 0x00f8, 0x0319, 0x80f8, 0x0319, 0x7710, 0x1000, 0x7211, 0x0319, 0x10f8, 0x031b, 0xf5a9, 0xeeff, 0x00f8, 0x031a, 0xfa20, 0x0228, 0x80f8, 0x031a, 0xf074, 0x00fc, 0xee01, 0x8a18, 0xf495, 0x8a1c, 0x8a1b, 0x8a1d, 0x8a1a, 0x8a07, 0x8a06, 0x8a0e, 0x8a19, 0x8a17, 0x8a17, 0x8a16, 0x8a15, 0x8a14, 0x8a13, 0x8a12, 0x8a11, 0x8a10, 0x8a0d, 0x8a0c, 0x8a0b, 0x8a0a, 0x8a09, 0x8a08, 0xf4eb, 0x4a11, 0x7711, 0x0055, 0x76f8, 0x031a, 0x0000, 0x76f8, 0x0319, 0x0000, 0x76f8, 0x031b, 0x0000, 0x76f8, 0x031c, 0x0000, 0x76f8, 0x031e, 0x0000, 0x76f8, 0x031d, 0x0001, 0x7681, 0x0003, 0x7711, 0x0057, 0x7681, 0x2800, 0x7711, 0x0055, 0x7681, 0x0004, 0x7711, 0x0057, 0x7681, 0x7141, 0x7711, 0x0055, 0x7681, 0x0000, 0x7711, 0x0057, 0x7681, 0x8000, 0x7711, 0x0055, 0x7681, 0x0001, 0x7711, 0x0057, 0x7681, 0x0022, 0x7711, 0x0055, 0x7681, 0x0002, 0x7711, 0x0057, 0x7681, 0x1000, 0x7711, 0x0054, 0x7681, 0x0080, 0x8a11, 0xfc00, 0x4a11, 0x7711, 0x0038, 0x7681, 0x0000, 0x7711, 0x0039, 0x7681, 0x0000, 0x7711, 0x0038, 0x7681, 0x0001, 0x7711, 0x0039, 0x7681, 0x0030, 0x7711, 0x0038, 0x7681, 0x000e, 0x7711, 0x0039, 0x7681, 0x0002, 0x7711, 0x0038, 0x7681, 0x0004, 0x7711, 0x0039, 0x7681, 0x00a0, 0x7711, 0x0038, 0x7681, 0x0005, 0x7711, 0x0039, 0x7681, 0x0000, 0x8a11, 0xfc00, 0x4a11, 0x7711, 0x0038, 0x7681, 0x0001, 0x7711, 0x0039, 0x6981, 0x0001, 0x8a11, 0xfc00, 0x4a11, 0x7711, 0x0038, 0x7681, 0x0001, 0x7711, 0x0039, 0x6881, 0xfffe, 0x8a11, 0xfc00,
0xe808, 0x75f8, 0x0008, 0x0280, 0xfc00, 0x4a11, 0x60f8, 0x05a4,
0x0001, 0xfa30, 0x0092, 0xf495, 0xeefe, 0x60f8, 0x05a4, 0x0002,
0xf820, 0x00a7, 0x7711, 0x0054, 0x6881, 0xfffe, 0xf074, 0x02e2,
0xe800, 0x75f8, 0x0008, 0x8006, 0x76f8, 0x05a1, 0x0000, 0x76f8,
0x05a0, 0x0000, 0x76f8, 0x05a2, 0x0000, 0xf073, 0x0114, 0x10f8,
0x05a1, 0x08f8, 0x059f, 0xf844, 0x00b8, 0x76f8, 0x05a1, 0x0000,
0x76f8, 0x054b, 0x0002, 0x76f8, 0x05a5, 0x0001, 0xf074, 0x0080,
0x10f8, 0x05a5, 0xf844, 0x0114, 0x10f8, 0x059f, 0x00f8, 0x05a0,
0x08f8, 0x05a1, 0x8811, 0xf495, 0x7710, 0x1000, 0xf6a9, 0xf820,
0x00cf, 0xf020, 0x1000, 0xf273, 0x00d3, 0x08f8, 0x05a0, 0x10f8,
0x059f, 0x08f8, 0x05a1, 0x80f8, 0x05a2, 0xf6b8, 0x10f8, 0x05a3,
0xf000, 0x8000, 0x6ff8, 0x05a0, 0x0c1f, 0x75f8, 0x0008, 0x8002,
0xe800, 0x75f8, 0x0008, 0x8003, 0x10f8, 0x059d, 0xf1ef, 0xf3e1,
0x10f8, 0x059e, 0xf2a0, 0x00f8, 0x05a1, 0x4e00, 0xf020, 0xffff,
0x5700, 0xf280, 0x75f8, 0x0008, 0x8000, 0x5600, 0xf0f0, 0x75f8,
0x0008, 0x8001, 0xe800, 0x75f8, 0x05a2, 0x8004, 0x75f8, 0x0008,
0x8005, 0xe801, 0x74f8, 0x054d, 0x8006, 0x74f8, 0x054e, 0x8001,
0x74f8, 0x054f, 0x8000, 0x74f8, 0x0550, 0x8003, 0x74f8, 0x0551,
0x8002, 0x75f8, 0x0008, 0x8006, 0xee02, 0x8a11, 0xfc00, 0xf495,
0x4a08, 0x4a09, 0x4a0a, 0x4a0b, 0x4a0c, 0x4a0d, 0x4a10, 0x4a11,
0x4a12, 0x4a13, 0x4a14, 0x4a15, 0x4a16, 0x4a17, 0x4a17, 0x4a19,
0x4a0e, 0x4a06, 0x4a07, 0x4a1a, 0x4a1d, 0x4a1b, 0x4a1c, 0x68f8,
0x0007, 0x7d3f, 0x69f8, 0x0007, 0x4000, 0x68f8, 0x001d, 0xfffc,
0x4818, 0x68f8, 0x0018, 0xfffe, 0x7711, 0x0001, 0x4a08, 0xeeff,
0xf020, 0x0800, 0x7681, 0x0040, 0x7711, 0x0055, 0x7681, 0x0000,
0x7711, 0x0057, 0x1881, 0x8000, 0xf020, 0x0800, 0x1c00, 0x80f8,
0x05a3, 0x76f8, 0x05a0, 0x0000, 0xf074, 0x0085, 0xee01, 0x8a18,
0xf495, 0x8a1c, 0x8a1b, 0x8a1d, 0x8a1a, 0x8a07, 0x8a06, 0x8a0e,
0x8a19, 0x8a17, 0x8a17, 0x8a16, 0x8a15, 0x8a14, 0x8a13, 0x8a12,
0x8a11, 0x8a10, 0x8a0d, 0x8a0c, 0x8a0b, 0x8a0a, 0x8a09, 0x8a08,
0xf4eb, 0xf495, 0x4a08, 0x4a09, 0x4a0a, 0x4a0b, 0x4a0c, 0x4a0d,
0x4a10, 0x4a11, 0x4a12, 0x4a13, 0x4a14, 0x4a15, 0x4a16, 0x4a17,
0x4a17, 0x4a19, 0x4a0e, 0x4a06, 0x4a07, 0x4a1a, 0x4a1d, 0x4a1b,
0x4a1c, 0x68f8, 0x0007, 0x7d3f, 0x69f8, 0x0007, 0x4000, 0x68f8,
0x001d, 0xfffc, 0x4818, 0x68f8, 0x0018, 0xfffe, 0x7711, 0x0001,
0x4a08, 0x7681, 0x0800, 0x10f8, 0x05a2, 0x00f8, 0x05a0, 0x80f8,
0x05a0, 0x10f8, 0x05a2, 0x00f8, 0x05a1, 0x80f8, 0x05a1, 0x7211,
0x05a0, 0x7710, 0x1000, 0xf5a9, 0xfa20, 0x01b2, 0xf495, 0xeeff,
0xf074, 0x0085, 0xee01, 0x8a18, 0xf495, 0x8a1c, 0x8a1b, 0x8a1d,
0x8a1a, 0x8a07, 0x8a06, 0x8a0e, 0x8a19, 0x8a17, 0x8a17, 0x8a16,
0x8a15, 0x8a14, 0x8a13, 0x8a12, 0x8a11, 0x8a10, 0x8a0d, 0x8a0c,
0x8a0b, 0x8a0a, 0x8a09, 0x8a08, 0xf4eb, 0x4a11, 0x7711, 0x0054,
0x7681, 0x0000, 0x7711, 0x0055, 0x7681, 0x0003, 0x7711, 0x0057,
0x7681, 0x2800, 0x7711, 0x0055, 0x7681, 0x0004, 0x7711, 0x0057,
0x7681, 0x7141, 0x7711, 0x0055, 0x7681, 0x0000, 0x7711, 0x0057,
0x7681, 0x8000, 0x7711, 0x0055, 0x7681, 0x0001, 0x7711, 0x0057,
0x7681, 0x0022, 0x7711, 0x0055, 0x7681, 0x0002, 0x7711, 0x0057,
0x7681, 0x1000, 0x7711, 0x0054, 0x7681, 0x0080, 0x8a11, 0xfc00,
0xf495, 0x4a08, 0x4a09, 0x4a0a, 0x4a0b, 0x4a0c, 0x4a0d, 0x4a10,
0x4a11, 0x4a12, 0x4a13, 0x4a14, 0x4a15, 0x4a16, 0x4a17, 0x4a17,
0x4a19, 0x4a0e, 0x4a06, 0x4a07, 0x4a1a, 0x4a1d, 0x4a1b, 0x4a1c,
0x68f8, 0x0007, 0x7d3f, 0x69f8, 0x0007, 0x4000, 0x68f8, 0x001d,
0xfffc, 0x4818, 0x68f8, 0x0018, 0xfffe, 0x7711, 0x0001, 0x4a08,
0x7681, 0x0001, 0x6bf8, 0x059c, 0x0001, 0x76f8, 0x05a5, 0x0000,
0x10f8, 0x05a4, 0xfa44, 0x0245, 0xf495, 0xeeff, 0x7712, 0x0054,
0x960f, 0xf830, 0x0245, 0xf074, 0x0085, 0x7711, 0x0054, 0x6981,
0x0001, 0xf074, 0x02d7, 0xf073, 0x0247, 0xf074, 0x0085, 0xee01,
0x8a18, 0xf495, 0x8a1c, 0x8a1b, 0x8a1d, 0x8a1a, 0x8a07, 0x8a06,
0x8a0e, 0x8a19, 0x8a17, 0x8a17, 0x8a16, 0x8a15, 0x8a14, 0x8a13,
0x8a12, 0x8a11, 0x8a10, 0x8a0d, 0x8a0c, 0x8a0b, 0x8a0a, 0x8a09,
0x8a08, 0xf4eb, 0xf7be, 0xf6b9, 0xf4a0, 0xf6b7, 0xf6b5, 0xf6b6,
0xf7b8, 0x7718, 0x034b, 0x6bf8, 0x0018, 0x01ff, 0x68f8, 0x0018,
0xfffe, 0xf020, 0x05aa, 0xf100, 0x0001, 0xf84d, 0x028e, 0xf6b8,
0xf495, 0xf020, 0x05aa, 0xf073, 0x0288, 0x7ef8, 0x0012, 0xf000,
0x0001, 0x47f8, 0x0011, 0x7e92, 0x00f8, 0x0011, 0xf000, 0x0001,
0x7ef8, 0x0011, 0xf000, 0x0001, 0x6c89, 0x027d, 0xf7b8, 0xeefc,
0xf020, 0xffff, 0xf100, 0x0001, 0xf84d, 0x02a6, 0xf6b8, 0xf495,
0xf020, 0xffff, 0xf273, 0x02a0, 0x4e02, 0xf495, 0xf5e3, 0x5602,
0x7e00, 0x1100, 0xfa4c, 0x029e, 0x6b03, 0x0001, 0xf6b8, 0xee04,
0xf074, 0x02ed, 0xf074, 0x0310, 0x4a11, 0x7711, 0x0038, 0x7681,
0x0000, 0x7711, 0x0039, 0x7681, 0x0000, 0x7711, 0x0038, 0x7681,
0x0001, 0x7711, 0x0039, 0x7681, 0x0030, 0x7711, 0x0038, 0x7681,
0x000e, 0x7711, 0x0039, 0x7681, 0x0002, 0x7711, 0x0038, 0x7681,
0x0004, 0x7711, 0x0039, 0x7681, 0x00a0, 0x7711, 0x0038, 0x7681,
0x0005, 0x7711, 0x0039, 0x7681, 0x0000, 0x8a11, 0xfc00, 0x4a11,
0x7711, 0x0038, 0x7681, 0x0001, 0x7711, 0x0039, 0x6981, 0x0001,
0x8a11, 0xfc00, 0x4a11, 0x7711, 0x0038, 0x7681, 0x0001, 0x7711,
0x0039, 0x6881, 0xfffe, 0x8a11, 0xfc00, 0xf6b8, 0xf495, 0xf162,
0xffff, 0xf340, 0xffff, 0xf640, 0xf0e0, 0xf010, 0xffff, 0xf061,
0xffff, 0xfa44, 0x0301, 0x4a11, 0xeefe, 0xf273, 0x0307, 0xe800,
0xe900, 0x8911, 0xf495, 0x4911, 0x1081, 0xf300, 0x0001, 0x8100,
0xf074, 0x032c, 0xee02, 0x8a11, 0xfc00, 0xf495, 0xf073, 0x030e,
0x4a11, 0x8811, 0x10f8, 0x05a6, 0xf4e3, 0x10f8, 0x05a9, 0xf845,
0x031e, 0x11f8, 0x05a9, 0xf7e3, 0xf495, 0x4811, 0x10f8, 0x05a8,
0xf845, 0x0325, 0x10f8, 0x05a8, 0xf4e3, 0x10f8, 0x05a7, 0xf4e3,
0xf074, 0x030d, 0x8a11, 0xfc00, 0x4a11, 0x7711, 0x0026, 0x7712,
0x0001, 0x7713, 0x0001, 0x7681, 0x0010, 0x7711, 0x0000, 0x7681,
0xffff, 0xe501, 0xf495, 0xf6bb, 0xf074, 0x02ac, 0xf074, 0x01cd,
0xf4e1, 0xf495, 0xf073, 0x0340, 0x80f8, 0x05a7, 0xfc00, 0x80f8,
0x05a6, 0xfc00, 0xfc00,
};
static const unsigned short _section_cinit[] = {
0x0001, 0x05a6, 0x034a, 0x0001, 0x05a7, 0x034a, 0x0001, 0x05a8,
0x0000, 0x0001, 0x05a9, 0x0000, 0x0000,
};
static const unsigned short _section_vectors[] = {
0xf273, 0x00df, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf273, 0x0080, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf273, 0x018e, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf273, 0x01e8, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495,
0xf273, 0x0262, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0xf273, 0x0200, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495,
0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495,
0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495,
0xf273, 0x0117, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495,
0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495,
0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495,
0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495,
0xf273, 0x0171, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495,
};
/* Program Mapping */
static const struct dsp_section dsp_image[] = {
{_section_text, 0x0080, 0x0245},
{NULL /* .bss */, 0x02c5, 0x005a},
{_section_text, 0x0080, 0x02cb},
{_section_cinit, 0x05aa, 0x000d},
{NULL /* .bss */, 0x054b, 0x005f},
{NULL /* .stack */, 0x034b, 0x0200},
{_section_vectors, 0x7f80, 0x0080},
{NULL /* .dma */, 0x8000, 0x1000},
{NULL, 0, 0}
};
/* Symbol table, usable with the DSP_() macro (see dsp-target.h). */
#define _handle_int0 0x0080
#define _status 0x02c5
#define _audiohw_start 0x02af
#define _dma0_stopped 0x031d
#define _waiting 0x031e
#define _rebuffer 0x00fc
#define _main 0x00df
#define _dma_init 0x0243
#define _audiohw_init 0x0284
#define _handle_dma0 0x018e
#define _handle_dmac 0x01e8
#define _sdem_addrh 0x0316
#define _sdem_addrl 0x0317
#define _sdem_level 0x031a
#define _sdem_dsp_size 0x0318
#define _audiohw_stop 0x02ba
#define cinit 0x05aa
#define ___cinit__ 0x05aa
#define ___text__ 0x0080
#define etext 0x02c5
#define ___etext__ 0x02c5
#define etext 0x034b
#define ___etext__ 0x034b
#define ___data__ 0x0080
#define edata 0x0080
#define ___edata__ 0x0080
#define ___bss__ 0x02c5
#define end 0x031f
#define ___end__ 0x031f
#define ___bss__ 0x054b
#define end 0x05aa
#define ___end__ 0x05aa
#define _int0_count 0x059c
#define _status 0x054b
#define _handle_int0 0x0200
#define _main 0x032c
#define _handle_dmac 0x0171
#define _waiting 0x05a5
#define _sdem_addrh 0x059d
#define _sdem_addrl 0x059e
#define _dma0_stopped 0x05a4
#define _dma0_unlocked 0x05a3
#define _sdem_dsp_size 0x059f
#define _handle_dma0 0x0117
#define _dsp_level 0x05a0
#define _dma_init 0x01cd
#define _sdem_level 0x05a1
#define _rebuffer 0x0085
#define _last_size 0x05a2
#define _audiohw_start 0x02d7
#define _audiohw_init 0x02ac
#define _audiohw_stop 0x02e2
#define _c_int00 0x0262
#define __dtors_ptr 0x05a9
#define _abort 0x030d
#define _exit 0x0310
#define __cleanup_ptr 0x05a8
#define __lock 0x05a6
#define __register_unlock 0x0344
#define __nop 0x034a
#define __register_lock 0x0347
#define __unlock 0x05a7
#define __args_main 0x02ed
#endif

View file

@ -51,11 +51,7 @@ struct ipc_message {
unsigned short sdem_addrl;
unsigned short sdem_addrh;
} init PACKED;
#define MSG_DEBUGF 2
struct {
short buffer[80];
} debugf PACKED;
#define MSG_REFILL 3
#define MSG_REFILL 2
struct {
unsigned short topbottom; /* byte offset to unlocked half-buffer */
@ -66,6 +62,10 @@ struct ipc_message {
unsigned short _DSP_ADDRL;
unsigned short _DMA_SIZE;
} refill PACKED;
#define MSG_DEBUGF 3
struct {
short buffer[80];
} debugf PACKED;
} payload PACKED;
} PACKED;
#endif

View file

@ -1,13 +1,8 @@
-c
-x
-stack 0x1000
-heap 0x100
/* The rtx500.lib should be included if you want proper initialization,
* currently the program is setup so that it is not necessary to save space.
* reset vector should jump to _c_int00 if initialization is needed.
*
* -l rts500.lib*/
-stack 0x200
-heap 0x200
-l rts500.lib
MEMORY
{
@ -37,3 +32,4 @@ SECTIONS
/* DMA buffers for ABU mode must start on a 2*size boundary. */
.dma > SARAM PAGE 0
}

View file

@ -30,6 +30,7 @@
.global _main
.global _handle_dma0
.global _handle_dmac
.global _c_int00
.sect ".vectors"
; Reset Interrupt
@ -37,7 +38,7 @@
; currently the program is setup so that it is not necessary to save space.
; reset vector should jump to _c_int00 instead of main if initialization is
; needed.
RS_V: BD _main
RS_V: BD _c_int00
NOP
NOP

View file

@ -87,8 +87,7 @@ def main():
""" % out_filepath)
# Section data and directory.
h_directory = ["""
static const struct dsp_section dsp_image[] = {"""]
h_directory = ["static const struct dsp_section dsp_image[] = {\n"]
ti_coff = descend(object_file, "ti_coff")
for section in descendAll(ti_coff, "section"):
@ -122,6 +121,7 @@ static const struct dsp_section dsp_image[] = {"""]
break
if data or regular or text:
out_count = 0
sys.stderr.write("%s: placing 0x%04x words at 0x%04x from offset "
"0x%08x\n" % (
name, raw_data_size >> 1, physical_addr, raw_data_ptr))
@ -133,14 +133,16 @@ static const struct dsp_section dsp_image[] = {"""]
out_file.seek(raw_data_ptr)
data = array.array('H')
data.fromfile(out_file, raw_data_size >> 1)
h_file.write("\t")
h_file.write(" ")
for word in data:
out_count = out_count+1
h_file.write("0x%04x, " % word)
h_file.write("""
};
""")
if out_count % 8 == 0:
h_file.write("\n ")
out_count=0
h_file.write("\n};\n\n")
h_directory.append("\t{_section%s, 0x%04x, 0x%04x}," % (
h_directory.append(" {_section%s, 0x%04x, 0x%04x}," % (
sanitized_name, physical_addr, raw_data_size >> 1))
continue
@ -149,15 +151,15 @@ static const struct dsp_section dsp_image[] = {"""]
sys.stderr.write("%s: bss section, 0x%04x words at 0x%04x\n" % (
name, raw_data_size >> 1, physical_addr))
h_directory.append("\t{NULL /* %s */, 0x%04x, 0x%04x}," % (
h_directory.append(" {NULL /* %s */, 0x%04x, 0x%04x}," % (
name, physical_addr, raw_data_size >> 1))
continue
sys.stderr.write("%s: error, unprocessed section\n" % name)
h_file.write("\n")
h_file.write("/* Program Mapping */\n")
h_directory.append("\t{NULL, 0, 0}")
h_directory.append(" {NULL, 0, 0}")
h_directory.append("};")
h_file.write("\n".join(h_directory))
@ -165,9 +167,7 @@ static const struct dsp_section dsp_image[] = {"""]
# Symbols.
symbol_table = descend(ti_coff, "symbol_table")
h_file.write("""
/* Symbol table, usable with the DSP_() macro (see dsp-target.h). */
""")
h_file.write("\n/* Symbol table, usable with the DSP_() macro (see dsp-target.h). */\n")
for symbol in descendAll(symbol_table, "symbol"):
name = getTagText(symbol, "name")
kind = getTagText(symbol, "kind")
@ -181,7 +181,7 @@ static const struct dsp_section dsp_image[] = {"""]
h_file.write("#define %s 0x%04x\n" % (name, value))
h_file.write("\n#endif\n")
h_file.write("\n#endif\n\n")
h_file.close()
out_file.close()