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