forked from len0rd/rockbox
i7: pcm-telechips fix sampling rate that was about 40000 instead of 44100
- remove test case
- remove trailing spaces
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22761 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
72578ef558
commit
14ac374ffe
1 changed files with 12 additions and 74 deletions
|
|
@ -27,9 +27,6 @@
|
||||||
#include "sound.h"
|
#include "sound.h"
|
||||||
#include "pcm.h"
|
#include "pcm.h"
|
||||||
|
|
||||||
/* Just for tests enable it to play simple tone */
|
|
||||||
//#define PCM_TELECHIPS_TEST
|
|
||||||
|
|
||||||
struct dma_data
|
struct dma_data
|
||||||
{
|
{
|
||||||
/* NOTE: The order of size and p is important if you use assembler
|
/* NOTE: The order of size and p is important if you use assembler
|
||||||
|
|
@ -80,13 +77,14 @@ void pcm_play_dma_init(void)
|
||||||
BCLKCTR &= ~DEV_DAI;
|
BCLKCTR &= ~DEV_DAI;
|
||||||
PCLK_DAI = (1<<28) | 61682; /* DCO mode */
|
PCLK_DAI = (1<<28) | 61682; /* DCO mode */
|
||||||
BCLKCTR |= DEV_DAI;
|
BCLKCTR |= DEV_DAI;
|
||||||
|
|
||||||
/* Enable DAI block in Master mode, 256fs->32fs, 16bit LSB */
|
/* Enable DAI block in Master mode, 256fs->32fs, 16bit LSB */
|
||||||
DAMR = 0x3c8e80;
|
DAMR = 0x3c8e80;
|
||||||
#elif defined(IAUDIO_7)
|
#elif defined(IAUDIO_7)
|
||||||
BCLKCTR &= ~DEV_DAI;
|
BCLKCTR &= ~DEV_DAI;
|
||||||
PCLK_DAI = (0x800b << 16) | (PCLK_DAI & 0xffff);
|
PCLK_DAI = (0x800a << 16) | (PCLK_DAI & 0xffff);
|
||||||
BCLKCTR |= DEV_DAI;
|
BCLKCTR |= DEV_DAI;
|
||||||
|
|
||||||
/* Master mode, 256->64fs, 16bit LSB*/
|
/* Master mode, 256->64fs, 16bit LSB*/
|
||||||
DAMR = 0x3cce20;
|
DAMR = 0x3cce20;
|
||||||
#elif defined(LOGIK_DAX)
|
#elif defined(LOGIK_DAX)
|
||||||
|
|
@ -94,16 +92,16 @@ void pcm_play_dma_init(void)
|
||||||
#elif defined(SANSA_M200)
|
#elif defined(SANSA_M200)
|
||||||
/* TODO */
|
/* TODO */
|
||||||
#elif defined(SANSA_C100)
|
#elif defined(SANSA_C100)
|
||||||
/* TODO */
|
/* TODO */
|
||||||
#else
|
#else
|
||||||
#error "Target isn't supported"
|
#error "Target isn't supported"
|
||||||
#endif
|
#endif
|
||||||
/* Set DAI interrupts as FIQs */
|
/* Set DAI interrupts as FIQs */
|
||||||
IRQSEL = ~(DAI_RX_IRQ_MASK | DAI_TX_IRQ_MASK);
|
IRQSEL = ~(DAI_RX_IRQ_MASK | DAI_TX_IRQ_MASK);
|
||||||
|
|
||||||
/* Initialize default register values. */
|
/* Initialize default register values. */
|
||||||
audiohw_init();
|
audiohw_init();
|
||||||
|
|
||||||
dma_play_data.size = 0;
|
dma_play_data.size = 0;
|
||||||
#if NUM_CORES > 1
|
#if NUM_CORES > 1
|
||||||
dma_play_data.core = 0; /* no core in control */
|
dma_play_data.core = 0; /* no core in control */
|
||||||
|
|
@ -254,7 +252,7 @@ void fiq_handler(void)
|
||||||
* r8 and r9 contains local copies of p and size respectively.
|
* r8 and r9 contains local copies of p and size respectively.
|
||||||
* r0-r3 and r12 is a working register.
|
* r0-r3 and r12 is a working register.
|
||||||
*/
|
*/
|
||||||
asm volatile (
|
asm volatile (
|
||||||
#if defined(CPU_TCC780X)
|
#if defined(CPU_TCC780X)
|
||||||
"mov r8, #0xc000 \n" /* DAI_TX_IRQ_MASK | DAI_RX_IRQ_MASK */
|
"mov r8, #0xc000 \n" /* DAI_TX_IRQ_MASK | DAI_RX_IRQ_MASK */
|
||||||
"ldr r9, =0xf3001004 \n" /* CREQ */
|
"ldr r9, =0xf3001004 \n" /* CREQ */
|
||||||
|
|
@ -317,7 +315,7 @@ void fiq_handler(void)
|
||||||
{
|
{
|
||||||
asm volatile( "stmfd sp!, {r0-r7, ip, lr} \n" /* Store context */
|
asm volatile( "stmfd sp!, {r0-r7, ip, lr} \n" /* Store context */
|
||||||
"sub sp, sp, #8 \n"); /* Reserve stack */
|
"sub sp, sp, #8 \n"); /* Reserve stack */
|
||||||
|
|
||||||
register pcm_more_callback_type get_more;
|
register pcm_more_callback_type get_more;
|
||||||
|
|
||||||
if (dma_play_data.size < 16)
|
if (dma_play_data.size < 16)
|
||||||
|
|
@ -350,78 +348,18 @@ void fiq_handler(void)
|
||||||
pcm_play_dma_stop();
|
pcm_play_dma_stop();
|
||||||
pcm_play_dma_stopped_callback();
|
pcm_play_dma_stopped_callback();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clear FIQ status */
|
/* Clear FIQ status */
|
||||||
CREQ = DAI_TX_IRQ_MASK | DAI_RX_IRQ_MASK;
|
CREQ = DAI_TX_IRQ_MASK | DAI_RX_IRQ_MASK;
|
||||||
|
|
||||||
asm volatile( "add sp, sp, #8 \n" /* Cleanup stack */
|
asm volatile( "add sp, sp, #8 \n" /* Cleanup stack */
|
||||||
"ldmfd sp!, {r0-r7, ip, lr} \n" /* Restore context */
|
"ldmfd sp!, {r0-r7, ip, lr} \n" /* Restore context */
|
||||||
"subs pc, lr, #4 \n"); /* Return from FIQ */
|
"subs pc, lr, #4 \n"); /* Return from FIQ */
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* TODO: required by wm8531 codec, why not to implement */
|
/* TODO: required by wm8731 codec */
|
||||||
void i2s_reset(void)
|
void i2s_reset(void)
|
||||||
{
|
{
|
||||||
/* DAMR = 0; */
|
/* DAMR = 0; */
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PCM_TELECHIPS_TEST
|
|
||||||
#include "lcd.h"
|
|
||||||
#include "sprintf.h"
|
|
||||||
#include "backlight-target.h"
|
|
||||||
|
|
||||||
static int frame = 0;
|
|
||||||
static void test_callback_for_more(unsigned char **start, size_t *size)
|
|
||||||
{
|
|
||||||
static unsigned short data[8];
|
|
||||||
static int cntr = 0;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < 8; i ++) {
|
|
||||||
unsigned short val;
|
|
||||||
|
|
||||||
if (0x100 == (cntr & 0x100))
|
|
||||||
val = 0x0fff;
|
|
||||||
else
|
|
||||||
val = 0x0000;
|
|
||||||
data[i] = val;
|
|
||||||
cntr++;
|
|
||||||
}
|
|
||||||
|
|
||||||
*start = data;
|
|
||||||
*size = sizeof(data);
|
|
||||||
|
|
||||||
frame++;
|
|
||||||
}
|
|
||||||
|
|
||||||
void pcm_telechips_test(void)
|
|
||||||
{
|
|
||||||
static char buf[100];
|
|
||||||
unsigned char *data;
|
|
||||||
size_t size;
|
|
||||||
|
|
||||||
_backlight_on();
|
|
||||||
|
|
||||||
audiohw_preinit();
|
|
||||||
pcm_play_dma_init();
|
|
||||||
pcm_postinit();
|
|
||||||
|
|
||||||
audiohw_mute(false);
|
|
||||||
audiohw_set_master_vol(0x7f, 0x7f);
|
|
||||||
|
|
||||||
pcm_callback_for_more = test_callback_for_more;
|
|
||||||
test_callback_for_more(&data, &size);
|
|
||||||
pcm_play_dma_start(data, size);
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
int line = 0;
|
|
||||||
lcd_clear_display();
|
|
||||||
lcd_puts(0, line++, __func__);
|
|
||||||
snprintf(buf, sizeof(buf), "frame: %d", frame);
|
|
||||||
lcd_puts(0, line++, buf);
|
|
||||||
lcd_update();
|
|
||||||
sleep(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue