?? mp3.c
字號:
/************************************************************/
/* MP3 Code for AT91SAM7S64 */
/* By pasyong */
/* 2006-5 */
/* Base IAR 4.30A */
/************************************************************/
#include "ioat91sam7s64.h"
#include "sd.h"
#include "vs1011.h"
#include "fat.h"
#include "3310.h"
#include "uart.h"
#define VS1011_DATA_REQ ((unsigned int) 1 << 10)
#define uchar unsigned char
#define uint unsigned int
uchar BUFFER[512];
extern unsigned char Fat32Enabled;
extern unsigned int BytesPerSector;
extern unsigned int SectorsPerCluster;
extern unsigned long FirstDirSector;
unsigned long FAT_MASK;
void mp3_play(unsigned long FirstClust);
/*void mp3_test(void)
{ uint i,data_pointer=0;
while(data_pointer<4800)
{
if(*AT91C_PIOA_PDSR&VS1011_DATA_REQ)
{
for(i=0;i<32;i++)
{
vs1011_data_write(vsBeepMP3[data_pointer]);
data_pointer++;
}
}
if(data_pointer>=4799)
break; //如果現(xiàn)在的數(shù)據(jù)不夠了,則跳出來
}
}*/
int main(void)
{
unsigned int w;
uartinit();printf("www.ouravr.com");
vs1011_port_init();
vs1011_init();
LCD_port_init();LCD_init();LCD_write_english_string(0,5,"FAT16 LBA");
SD_port_init();
SD_Init();
//SPI提速
*AT91C_SPI_CSR=AT91C_SPI_NCPHA|AT91C_SPI_BITS_8|((unsigned int) 0x12 << 8);
fatInit(); //查詢SDFAT格式
if(Fat32Enabled)
FAT_MASK=FAT32_MASK;
else FAT_MASK=FAT16_MASK;
//播放音樂
ReadBlock(fatClustToSect(FirstDirSector));
for( w=0;w<512;w++)
putchar(BUFFER[w]);
// e=mp3_play(fatGetDirEntry(10));if(e==0)printf("this 0");
//for(uint f=0;f<2000;f++)
// mp3_play(f);
mp3_play(fatGetDirEntry(6));
mp3_play(fatGetDirEntry(4));
mp3_play(fatGetDirEntry(6));
while(1)
{
;//mp3_test();
}
}
void mp3_play(unsigned long FirstClust)
{
unsigned long LBA,NextCluster;
uint i,data_pointer;
uchar n;
NextCluster = FirstClust;
while (1)
{
LBA =fatClustToSect(NextCluster);
for (i=0;i<SectorsPerCluster;i++)
{
ReadBlock(LBA+i);
data_pointer=0;
while(data_pointer<512)
{
if(*AT91C_PIOA_PDSR&VS1011_DATA_REQ)
{
for(n=0;n<32;n++)
{
vs1011_data_write(BUFFER[data_pointer]);
data_pointer++;
}
}
if (data_pointer==511) break; //如果現(xiàn)在的數(shù)據(jù)不夠了,則跳出來
}
}
NextCluster = fatNextCluster(NextCluster);
if (NextCluster >=(CLUST_RSRVD&FAT_MASK))break;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -