📄 mp3.c
字号:
#include "dp8051.h"
#include "config.h"
#include "absacc.h"
#include "constant.h"
#include "variable.h"
#include "function.h"
#include "sdhost.h"
#include "sssmp3_regs.h"
#include "fat.h"
#include "mp3_appl.h"
//***********************************************
//***********************************************
/*code void (*MusicMode_table[])() =
{
MP3EQU_Normal,
MP3EQU_Rock,
MP3EQU_Jazz,
MP3EQU_Classic,
MP3EQU_Pop
};*/
/************************************************
函 数 名: MP3EQU_Normal()
功 能:正常
说 明:
调 用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3EQU_Normal(void)
{
MP3_EQBAND060 = 0x1F;
MP3_EQBAND170 = 0x1F;
MP3_EQBAND310 = 0x1F;
MP3_EQBAND600 = 0x1F;
MP3_EQBAND01K = 0x1F;
MP3_EQBAND03K = 0x1F;
MP3_EQBAND06K = 0x1F;
MP3_EQBAND12K = 0x1F;
MP3_EQBAND14K = 0x1F;
MP3_EQBAND16K = 0x1F;
}
/************************************************
函 数 名: MP3EQU_Rock()
功 能:摇滚
说 明:
调 用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3EQU_Rock(void)
{
MP3_EQBAND060 = 0x17;
MP3_EQBAND170 = 0x1A;
MP3_EQBAND310 = 0x25;
MP3_EQBAND600 = 0x28;
MP3_EQBAND01K = 0x23;
MP3_EQBAND03K = 0x1C;
MP3_EQBAND06K = 0x13;
MP3_EQBAND12K = 0x0F;
MP3_EQBAND14K = 0x0F;
MP3_EQBAND16K = 0x0F;
}
/************************************************
函 数 名: MP3EQU_Jazz()
功 能:爵士
说 明:
调 用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3EQU_Jazz(void)
{
MP3_EQBAND060 = 0x1F;
MP3_EQBAND170 = 0x1F;
MP3_EQBAND310 = 0x1C;
MP3_EQBAND600 = 0x1C;
MP3_EQBAND01K = 0x1C;
MP3_EQBAND03K = 0x1E;
MP3_EQBAND06K = 0x1C;
MP3_EQBAND12K = 0x1A;
MP3_EQBAND14K = 0x19;
MP3_EQBAND16K = 0x17;
}
/************************************************
函 数 名: MP3EQU_Classic()
功 能:经典
说 明:
调 用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3EQU_Classic(void)
{
MP3_EQBAND060 = 0x1F;
MP3_EQBAND170 = 0x1F;
MP3_EQBAND310 = 0x1F;
MP3_EQBAND600 = 0x1F;
MP3_EQBAND01K = 0x1F;
MP3_EQBAND03K = 0x1F;
MP3_EQBAND06K = 0x14;
MP3_EQBAND12K = 0x14;
MP3_EQBAND14K = 0x14;
MP3_EQBAND16K = 0x30;
}
/************************************************
函 数 名: MP3EQU_Pop()
功 能:流行
说 明:
调 用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3EQU_Pop(void)
{
MP3_EQBAND060 = 0x23;
MP3_EQBAND170 = 0x1C;
MP3_EQBAND310 = 0x17;
MP3_EQBAND600 = 0x15;
MP3_EQBAND01K = 0x17;
MP3_EQBAND03K = 0x23;
MP3_EQBAND06K = 0x25;
MP3_EQBAND12K = 0x25;
MP3_EQBAND14K = 0x25;
MP3_EQBAND16K = 0x25;
}
/************************************************
函 数 名: MP3_MusicPlayMode()
功 能:MP3
说 明:
调 用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3_MusicPlayMode(void)
{
varAl.MusicMode++;
if(varAl.MusicMode == 0xFF)
varAl.MusicMode = 0;
//MusicMode_table[varAl.MusicMode % 5]();
switch(varAl.MusicMode % 5)
{
case 0x00:
MP3EQU_Normal();
break;
case 0x01:
MP3EQU_Rock();
break;
case 0x02:
MP3EQU_Jazz();
break;
case 0x03:
MP3EQU_Classic();
break;
case 0x04:
MP3EQU_Pop();
break;
}
}
/************************************************
函 数 名: MP3_PrevInit()
功 能:MP3
说 明:
调 用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3_PrevInit(void)
{
//MP3_ISR_Flag = 0;
CLASS_D_DAC_CTL = (SUSPEND | PAUSE);// suspend & Mute Class-D
EIE = 0x00;// Disable INT3
MP3_INT_CLR = 0x3F;
MP3_INT_EN = 0x00;//
MP3_SWReset();
MP3_ISR_Flag = 0;
}
/************************************************
函 数 名: MP3_SWReset()
功 能:MP3
说 明:
调 用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3_SWReset(void)
{
MP3_CTL |= (MP3_CLR | MUTE);//软件复位MP3解码器
MP3_FIFOCTL = 0x00; // PCM_output FIFO Disable
MP3_I2S_CTL = 0x00;
MP3_DMACTL = DMA_CLR;// DMA is not ready
//MP3_VOLUME = 31; // 0 -> No volume gain, 31 -> Max value for volume gain
MP3_DMACTL = 0x00; // DMA is not ready
}
/************************************************
函 数 名: MP3_Init()
功 能:MP3
说 明:
调 用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3_Init(void)
{
MP3_DMASTART0700_LEFT = 0x00; // in MP3 0x0 Byte
MP3_DMASTART1508_LEFT = 0x00;
MP3_DMALEN0700_LEFT = 0xFF; // in MP3
MP3_DMALEN1508_LEFT = 0x01; // -> 0x0 ~ 0x01FF= 512 Bytes
MP3_CTL = STEREO | L_ENDIAN; // Bit5->Stero mode, Bit4->Little Endian,MP3 mode
}
/************************************************
函 数 名: MP3_INT_Enable()
功 能:MP3
说 明:
调 用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3_INT_Enable(void)
{
// set-up INT3
MP3_INT_EN = 0x7F; // -> move to before _getkey()
MP3_INT_MASK = 0x3F;
MP3_DMACTL = DMA_READY_L; // set left DMA is ready
MP3_FIFOCTL = FIFO_EN; // PCM_output FIFO enable -> Must first enable it for playback WAVE file
MP3_I2S_RATE = 0x07;
MP3_I2S_DUTY = 0x04;
MP3_I2S_CTL = 0x00; // for Class-D in Parallel Mode
EIP = 0x02;
EIE = 0x02; // enable INT3
}
/************************************************
函 数 名: MP3_ActiveFAT()
功 能:MP3
说 明:
调 用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3_ActiveFAT(void)
{
FileData.dwMovedDataToBuffSizeCNT = 0;
MP3_Init();
CLASS_D_DAC_CTL &= 0xF0;
MP3_ISR_Flag = 0;
tmpINT3 = 0;
varAl.SystemFlag &= ~(END_FILEADDR_FLAG);
MP3_INT_Enable();
}
/************************************************
函 数 名: MP3_Play_Task()
功 能:MP3
说 明:
调 用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void MP3_Play_Task(void)
{
switch(mp3_play_status)
{
case MP3_IDEL:
if(allow_mp3_play)
{
mp3_play_status = MP3_INIT;
}
break;
case MP3_INIT:
FileData.dwCurSecLba = 0;
MP3_PrevInit();
ReadSector(FileData.dwCurSecLba++,0x05);
ReadSector(FileData.dwCurSecLba++,0x06);
MP3_ActiveFAT();
FileData.dwMovedDataToBuffSizeCNT += CFatData.wBytesPerSec;
mp3_play_status = MP3_PLAY;
break;
case MP3_PLAY:
if(varAl.SystemFlag & END_FILEADDR_FLAG)
{
mp3_play_status = MP3_NEXT;
}
break;
case MP3_PREVIOUS:
MP3_PrevInit();
if(!Backward())
{
FileData.wCurFDBNo = 0;
mp3_play_status = MP3_NEXT;
}
mp3_play_status = MP3_IDEL;
break;
case MP3_NEXT:
MP3_PrevInit();
if(CFatData.fFAT32)
{
if(++FileData.wCurFDBNo >= (U16)CFatData.bSectorsPerClu * CFatData.wBytesPerSec / DIREntrySize)
{
FileData.wCurFDBNo = 0;
if(++FileData.dwCurCluNo >= FileData.RootDirNum)
FileData.dwCurCluNo = 0;
}
}
else
{
if(++FileData.wCurFDBNo >= (U16)FileData.RootDirNum)
FileData.wCurFDBNo = 0;
}
if(Forward())
mp3_play_status = MP3_IDEL;
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -