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

📄 mp3.c

📁 Read MP3 from sd,send vs1003 decode
💻 C
字号:
/************************************************************/
/*		         MP3 Code for   M32L					    */
/*				   By   pasyong								*/
/*				   2006-4									*/
/*				   Base ICC6.31A					        */
/************************************************************/
//#include <macros.h>
//#include <stdio.h>

#include "vs1003.h"
#include "mp3.h"
#include "Sddriver.h"
#include "fat.h"
#include "LPC2210Uart.h"
#include "config.h"
#include "Common.h"
#include "Sdhal.h"

void key_port(void)
 {
	;
 }
int main()
{
	key_port();

	UART0_Init();
	SD_HardWareInit();
	MP3_Port_Init();

	VS1003_Init();
	VS1003_Init();

	SD_Initialize();
	SD_Initialize();
	
//SPCR = 0x50;                //提速
//SPSR = 0x01;                //setup SPI

	fatInit();                  //查询SDFAT格式

	if(Fat32Enabled)            //设置FAT格式标志
		{
			FAT_MASK=FAT32_MASK;
		}
	else 
		{
			FAT_MASK=FAT16_MASK;
		}

	while(1)
		{ 
			//播放音乐
			for(t=3;t<50;t++)
   				{
					flag=0;
					mp3_play(fatGetDirEntry(t));
				}
   		}
}

/*********************************************************************************************************
** Function name:		mp3_play
**
** Descriptions:		   judge the keys status,and play the reading sector data
**
** input parameters:		FirstClust
** Returned value:		
**         
** Used global variables:	none
** Calling modules:		None
**
** Created by:			JOSEPH
** Created Date:		2006/11/07
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

void mp3_play(unsigned long FirstClust)
{  
	uint32 LBA,NextCluster;
	uint16 i,data_pointer;
	uint8 n;
	NextCluster = FirstClust;

	while (1)
		{	
	  		LBA =fatClustToSect(NextCluster);
	  		for (i=0;i<SectorsPerCluster;i++)
	  	  		{
		  			if(flag==0)  //ReadBlock(LBA+i);      //读完后文件指针自动后移
		  								SD_ReadBlock(LBA+i, BUFFER);
				//按键处理程序
	    		//ST/PS键按下
	  				if(!(ST_PS))
	   					{
	    					delay_Nus(250);
							if(!(ST_PS))
								{
		 							flag^=0x01;
		 						}
	   					}
	  		//VOLUP键按下
	  				if(!(VOLUP))  
	   					{
	    					delay_Nus(250);
	    					if(!(VOLUP))  
		  						{
		  							vol=vol+((uint32)(2<<8)+2);
		   							if(vol>=0xF0F0) vol=0xF0F0; 
	       							else vs1003_cmd_write(SPI_VOL,vol);    //每次左右声道VOL减2
		  						}
	   					}
	  		//VOLDOWN键按下
	  				if(!(VOLDOWN)) 
	    				{
							delay_Nus(250);
							if(!(VOLDOWN)) 
		  						{
		   							vol=vol-((uint32)(2<<8)+2);
		   							if(vol<=0x0505) vol=0x0505;
		   							else vs1003_cmd_write(SPI_VOL,vol);   //每次左右声道VOL加2
	      						}
						}
	   		//NEXT键按下
	  				if(!(NEXTSONG)) 
	    				{
							delay_Nus(250);		
							if(!(NEXTSONG))  goto NEXT;       //跳到下一首歌曲
	    				}
	    	//PREV键按下
	  				if(!(PREVSONG)) 
	    				{
							delay_Nus(250);
							if(!(PREVSONG))
		  					{
		  						t=t-2;goto NEXT;  //返回前一首歌曲
	      					}
						}
		
	 	
		 			data_pointer=0; 
        			while(data_pointer<512)
        				{    
            				if(MP3_DATA_REQ_STATUS())
               					{
                					for(n=0;n<32;n++)
		           						{
                    						vs1003_data_write(BUFFER[data_pointer]);
                    						data_pointer++;   
   	               						}
								}
	     					if (data_pointer==511) break;   //如果现在的数据不够了,则跳出来
	     				}
					}
			NextCluster = fatNextCluster(NextCluster);
			if (NextCluster >=(CLUST_RSRVD&FAT_MASK))break;
		}
 NEXT: delay_Nus(3);  /* 下一首歌曲*/

}














⌨️ 快捷键说明

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