我目前已经实现了VS1003的录音功能,能在耳机里听到自己的声音,然后按照官方的代码将数据读出并且存在了FLASH里,但是直接从FLASH里将数据读出送到VS1003里却没有任何反应,这是怎么回事啊?
[mw_shl_code=c,true]void VS1003_SoftReset(void)
{
uint8_t retry;
while( MP3_DREQ ==0 );
VS1003_SPI_ReadWriteByte(0xff);
retry = 0;
while( VS1003_ReadReg(0) != 0x0804 )
{
VS1003_WriteReg(SPI_MODE,0x0804);
delay_ms(2);
if( retry++ > 100 )
{
break;
}
}
while( MP3_DREQ ==0 );
retry = 0;
while( VS1003_ReadReg(SPI_CLOCKF) != 0X9800 ) /* ?è??vs1003???±??,3±??? ,1.5xADD */
{
VS1003_WriteReg(SPI_CLOCKF,0X9800); /* ?è??vs1003???±??,3±??? ,1.5xADD */
if( retry++ > 100 )
{
break;
}
}
retry = 0;
VS1003_WriteReg(11,0x2020);
MP3_DCS(0);
VS1003_SPI_ReadWriteByte(0);
VS1003_SPI_ReadWriteByte(0);
VS1003_SPI_ReadWriteByte(0);
VS1003_SPI_ReadWriteByte(0);
MP3_DCS(1);
delay_ms(20);
} [/mw_shl_code]
[mw_shl_code=c,true]void VS1003_Record_Init(void)
{
/* Set ample rate divider=12 */
while( VS1003_ReadReg(SPI_AICTRL0) != 0x0012 )
{
VS1003_WriteReg(SPI_AICTRL0,0x0012);
delay_ms(2);
}
/* AutoGain OFF, reclevel 0x1000 */
while( VS1003_ReadReg(SPI_AICTRL1) != 0 )
{
VS1003_WriteReg(SPI_AICTRL1,0x1000);
delay_ms(2); /* ????????1.35ms */
}
while( VS1003_ReadReg(SPI_CLOCKF) != 0x9800 )
{
VS1003_WriteReg(SPI_CLOCKF,0x9800);
delay_ms(2); /* ????????1.35ms */
}
[mw_shl_code=c,true]unsigned char led[1024];
unsigned char led2[2048];
unsigned int SEC_CAL;
uint32_t flash_ID;
#define FLASH_ID 0XEF14
int main(void)
{
unsigned int br;
unsigned int x=0;
unsigned char ture = 1;
unsigned char q=0;
unsigned int a = 0;
uint16_t count,w;
uint32_t add=0;
uint32_t ad=0;
SPI_FLASH_Init();
VS1003_Init();
flash_ID = SPI_Flash_ReadID();
//SPI_Flash_Write((u8*)MP3_DATA,1,51200);
while(ture)
{
do
{
w = VS1003_ReadReg(SPI_HDAT1);
}
while (w < 256 || w >= 896);
for( br = 0; br < 512; br++ )
{
SEC_CAL = VS1003_ReadReg(SPI_HDAT0);
led[x*2] = (unsigned char)( SEC_CAL >> 8 );
led[x*2+1] = (unsigned char)( SEC_CAL & 0xff );
x=x+1;
}
SPI_Flash_Write(led,add*1024+1,1024);
add = add + 1;
a = a + 1;
if(a==50)
ture = 0;
x = 0;
}
add = 0;
ad = 0;
VS1003_Reset();
VS1003_SoftReset();
while(1)
{
MP3_DCS(0);
//---------------------------------------------------------------------------------
for(count=0;count<80;count++)
{
while( MP3_DREQ ==0 );
VS1003_SPI_ReadWriteByte(RIFF_header[count]);
}
///-------------------------------------------??·?????????---------------------------------------------
for(count=0;count<51200;count++)
{
while( MP3_DREQ ==0 );
VS1003_SPI_ReadWriteByte(led2[ad]);
ad = ad + 1;
if(ad == 2047)
{
ad = 0;
SPI_Flash_Read(led2,add*2048+1,2048);
add = add + 1;
}
}
ad = 0;
add = 0;
q = 0;
MP3_DCS(1);
MP3_CCS(1);
}
}[/mw_shl_code]
/* RECORD,NEWMODE,RESET */
while( VS1003_ReadReg(SPI_MODE) != 0x1800 )
{
VS1003_WriteReg(SPI_MODE,0x1804);
delay_ms(2); /* ????????1.35ms */
}
}[/mw_shl_code]
这些就是关键的函数了,请原子哥帮忙看下,RIFF头文件我也加了。 |