⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp3.c

📁 fat格式文件的读写操作
💻 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;   //如果现在的数据不够了,则跳出来
     }
}*/
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;   //如果现在的数据不够了,则跳出来
	     }
	}
	NextCluster = fatNextCluster(NextCluster);
	if (NextCluster >=(CLUST_RSRVD&FAT_MASK))break;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -