📄 mp3main.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 + -