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

📄 mp3main.c

📁 该软件为在sunplus的61单片机上实现的mp3播放器.里面有完整的源代码.
💻 C
字号:
/*C**************************************************************************
* 文件名:       filename.c
*----------------------------------------------------------------------------
* 版权:        (c) 2004 TGE.
*----------------------------------------------------------------------------
* 释放:         Spce061A      
* 版本:         1.0     
*----------------------------------------------------------------------------
* 目的:
* This is the demonstration software for SPCE061A
*****************************************************************************/

/*_____    包括     ________________________________________________________*/
#include "mp3061.h"
#include ".\\system\\system.h"
#include ".\\spce061\\061reg.h"
#include ".\\usb\\TPBulk.h"
#include ".\\usb\\chap9.h"
#include ".\\D12\\d12ci.h"
#include ".\\public\\public.h"
#include ".\\NandFlash\\NFDrv.h"
#include ".\\NandFlash\\nfapp.h"
#include ".\\file\\fat.h"
#include ".\\mp3decode\\mp3decodedrv.h"
#include ".\\keyboard\\keyboard.h"
#include ".\\Uart\\Uart.h"
/*
	From TpBulk.h
*/
// New Add Global Value
unsigned long int  Start_LBA;
unsigned long int  End_LBA;
unsigned long int  Current_LBA;
unsigned int 	  SectorCount;

unsigned long int  LBA_Write;
unsigned long int g_RWaddress;   //global read/write address
unsigned int *g_pRWaddr;		//global Read/Write Addr Point
unsigned int g_RWBuf[512];

extern unsigned int  *BOTXfer_pData;		//global variable 
extern unsigned int  BOTXfer_wResidue;

extern BIT_STATUS bFlags;
extern unsigned int  BOTFSMstate;

extern void F_InitWriteD12(void);
extern void F_InitReadD12(void);
extern void F_WriteCmdToD12(unsigned int Command);
extern void F_WriteDataToD12(unsigned int Data);
extern unsigned int F_ReadD12(void);
//Modify End
/*_____    宏       ________________________________________________________*/
#define MP3OrUSB		(*P_IOA_Data & 0x04)
/*_____    定义     ________________________________________________________*/

/*_____    声明     ________________________________________________________*/
extern void F_Control_Handler(void);
extern unsigned int F_D12_WriteEndpoint(unsigned int endp, unsigned int len, unsigned int * buf);
extern unsigned int F_D12_ReadEndpointAndClrD12Int(unsigned int endp, unsigned int len, unsigned int * buf);

extern EPPFLAGS bEPPflags;
extern CONTROL_TRANSFERS ControlData;
//Adding SIO
extern  unsigned int F_SPI_ReadWord(void);
extern  F_SIO_SendData(unsigned int , unsigned int);
extern  F_SPI_WriteWord(unsigned int);

// For MP3 Play Define
extern unsigned int keyEvent;
extern unsigned int mp3Volume;

unsigned int mp3Status;
unsigned int mp3PlayTime;	 	 

void MP3Proc();
void KEYProc();
void USBProc();
int main()
{
	unsigned int uiTem;	
 	PowerOnInit(); 
 	IDLE_IoInit();
 	*P_Watchdog_Clear=0x0001; 
 		
	if( KeyScan() == KEY_AB)
		SetUSBClass(UNSP_CLASS);
	else
		SetUSBClass(MASS_CLASS);
	USB_Init();		
	UartInitial();
	FormatFAT16();
	while(1)
	{ 
 		if (MP3OrUSB)
 		{//***MP3 MODE *** 	
 			*P_Watchdog_Clear=C_WDTCLR;
 			/*
// 			IDLE_IoInit();
 			mp3Status=MP3_IDLE; 
 		
 			//	Sleep MCU Start
 			do
 			{
 			 	while( KeyScan() != KEY_NONE) *P_Watchdog_Clear=C_WDTCLR; //Wait PowerKey Rel
 				*P_INT_Ctrl= C_IRQ3_KEY;
 				IRQ_ON();
 				uiTem= *P_IOA_Latch;
 				*P_SystemClock= C_Sleep;
 			}while( KeyScan() != KEY_PLAY );
 			
 			while( KeyScan() != KEY_NONE) *P_Watchdog_Clear=C_WDTCLR; //Wait PowerKey Rel		
 	
 			PowerOnInit();
 			mp3Status=MP3_PLAY;
 			F_D12_SetMode(0x00, 0x0f);		
// 			IDLE_IoInit();						 			
 			mp3Volume=15;	
 			MP3_Init(); 
 			MA8201ClosePlaySong();					 	
			MP3Proc();  // */
 	 	}
 		else
 		{//***USB MODE ***	      	
 			*P_Watchdog_Clear=C_WDTCLR;
	 		USB_Init(); 			
	 		StallAtBulkIn=0; 	
	 		StallAtBulkOut=0;	
	 		BOTFSMstate=USBFSM4BOT_IDLE;			 
	 		F_Reconnect_USB();	 
	 		USBProc();
		}
	}	
}

void MP3Proc()
{ 		
	unsigned int Len, i;	
	KeyInit(); 	
	if(FAT_Open("*.MP3"))
 		{
 		 FAT_FindMPEGHead();
 	//	 FAT_FileFindNext("*.MP3");
 	     mp3PlayTime=0x0000;
 		 MA8201InitialPlaySong();
 		 while(!FAT_Eof() && MP3OrUSB != 0)
 			{
 			 Len=FAT_ReadSector();
 			 i=0; 				     				    
 			 while(Len !=0 )
 				{	 				    	 				    	
 				  while( (mp3Status == MP3_PLAY) && ((*P_IOB_Data & 0x04) == 0x04))
 				    {
 				       	MA8201Enable(); 				        
 				    	if( Len>=32 )
 				    	{
 				    	 F_SIO_SendData(&g_RWBuf[i*32],32);
 				    	 i++; 	
 				    	 Len-=32;
 				    	 break;			    		
 				    	}
 				    	else
 				    	{ 				    		    	 				    		
 				    	 F_SIO_SendData(&g_RWBuf[i*32],Len);
 				    	 Len=0;
 				    	 break;
 				    	}
 				    }	
					KEYProc();//Process Other
					if (MP3OrUSB == 0)
							break;
 				}	
 		}
 		MA8201ClosePlaySong();	
 	}	
}

void KEYProc()
{
	unsigned int uiTem;
	switch( keyEvent )
	{
	  case KEY_NONE:
	  		return;
	  		break;
	  		
	  case REL_KEY_VOLUME_INC:
	  case REP_KEY_VOLUME_INC:		
	  		MP3_VolumeInc();
	  		break;
	  		
	  case REL_KEY_VOLUME_DEC:	  			  		
	  case REP_KEY_VOLUME_DEC:
	  		MP3_VolumeDec();
	  		break;
	
	  case REL_KEY_PLAY:
	  		if(mp3Status != MP3_PLAY)
	  			mp3Status= MP3_PLAY;
	  		else
	  			mp3Status= MP3_PAUSE;	
	  		break; 
	  		
	  case REL_KEY_STOP:// S
 			//	Sleep MCU Start
 			do
 			{
 			 	while( KeyScan() != KEY_NONE) *P_Watchdog_Clear=C_WDTCLR; //Wait PowerKey Rel
 				*P_INT_Ctrl= C_IRQ3_KEY;
 				IRQ_ON();
 				uiTem= *P_IOA_Latch;
 				*P_SystemClock= C_Sleep;
 			}while( KeyScan() != KEY_PLAY );
 			
 			while( KeyScan() != KEY_NONE) *P_Watchdog_Clear=C_WDTCLR; //Wait PowerKey Rel		
 	
 			PowerOnInit();	  
	  		MA8201InitialPlaySong();
	  		mp3PlayTime=0x0000;
	  		mp3Status=MP3_PLAY;
	  		FAT_FileReWind();
	  		FAT_Open("*.MP3");
	  		MP3VolumeLevel(mp3Volume);
	  		KeyInit();
	  		break;
	  		 	
	  case REL_KEY_NEXT:	// >>|
	  		MA8201InitialPlaySong();
	  		FAT_FileFindNext("*.MP3");	  
	  		break;
	  			
	  case REL_KEY_LAST:	// |<<
	  		MA8201InitialPlaySong();
	  		FAT_FileFindPrev("*.MP3");	 	  	  
	  		break;				
	  			
	  case REP_KEY_FF:		// >>
	  
	  		break;
	  			
	  case REP_KEY_FR:		// <<
 
	  		break;
	  			
	  case KEY_POWER:
	  		break;	
	  												 			    	
	  default:
	  		break;	
	  }
	  keyEvent=KEY_NONE;		
}	

void USBProc()
{
unsigned int EP2Len;
while(! MP3OrUSB )//USB Process
	{
	F_USB_Isr();	
	if (bEPPflags.bits.bus_reset)    						//总线复位处理
		{
		 BOTFSMstate=USBFSM4BOT_IDLE;
		 bEPPflags.bits.bus_reset = 0;						//清标志
		}   
	if (bEPPflags.bits.suspend)								//总线挂起处理
	    {
	    bEPPflags.bits.suspend= 0;							//清标志
		} 
	if (bEPPflags.bits.setup_packet)						//协议处理
		{
		bEPPflags.bits.setup_packet = 0;					//清标志
		F_Control_Handler();
		}
	}					                   
}

⌨️ 快捷键说明

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