单片机实现MP3播放的方式Word文件下载.docx
- 文档编号:19878527
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:14
- 大小:278.89KB
单片机实现MP3播放的方式Word文件下载.docx
《单片机实现MP3播放的方式Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机实现MP3播放的方式Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
管脚类型
管脚功能
MICP
1
AI
同相差分话筒输入,自偏压
MICN
2
反相差分话筒输入,自偏压
XRESET
3
DI
低电平有效,异步复位端
DGND0
4
DGND
处理器核与I/O地
CVDD0
5
CPWR
处理器核电源
IOVDD0
6
IOPWR
I/O电源
CVDD1
7
CPEW
DREQ
8
DO
数据请求,输入总线
GPIO/DCLK
9
DIO
通用I/O2/串行数据总线时钟
GPIO3/SDATA
10
通用I/O3/串行数据总线数据
XDCS/BSYNC
13
数据片选端/字节同步
IOVDD1
14
I/O电源
VCO
15
时钟压控振荡器VCO输出
DGND1
16
处理器核与I/O的地
XTALO
17
AO
晶振输出
XTALI
18
晶振输入
IOVDD2
19
DGND2
20
处理器核与I/O地
DGND3
21
DGND4
22
XCS
23
片选输入,低电平有效
CVDD2
24
RX
26
UART接收口,不用时接IOVDD
TX
27
UART发送口
SCLK
28
串行总线的时钟
SI
29
串行输入
SO
30
DO3
串行输出
CVDD3
31
TEST
32
保留做测试,连接至IOVDD
GPIO0/SPIBOOT
33
通用I/O0/SPIBOOT,使用100K下拉电阻
GPIO1
34
通用I/O1
AGND0
37
APWR
模拟地,低噪声参考地
AVDD0
38
模拟电源
RIGHT
39
右声道输出
AGND1
40
模拟地
AGND2
41
GBUF
42
公共地缓冲器
AVDD1
43
RCAP
44
AIO
基准滤波电容
AVDD2
45
LEFT
46
左声道输出
AGND3
47
LINEIN
48
线路输入
6)VS1003的功能寄放器
VS1003共有16个16位的寄放器,地址别离为0X0~0XF;
除模式寄放器(MODE,0X0)和状态寄放器(STATUS,0X1)在复位后的初始值别离为0X800和OX3C外,其余的寄放器在VS1003初始化后的值均为0。
下面将VS1003各寄放器一一进行介绍。
(地址:
0X0可读写)
bit0:
SM_DIFF
SM_DIFF=0正常音频相位
SM_DIFF=1左声道反转
当SM_DIFF置位时,VS1003将左声道反相输出,立体声输入将产生围绕成效,关于单声道输入将产生差分(反相)左/右声道信号。
bit1:
SM_SETTOZERO
置零。
bit2:
SM_RESET
SM_RESET=1,VS1003软复位。
软复位以后该位会自动清零。
bit3:
SM_OUTOFWAV
SM_OUTOFWAV=1,停止WAV解码。
当你要半途停止WAV、WMA或MIDI文件的解码时,置位SM_OUTOFWAV,并向VS1003持续发送数据(关于WAV文件发送0)直到将SM_OUTOFWAV清零;
同时SCI_HIDAT1也将被清零。
bit4:
SM_PDOWN
SM_PDOWN=1,软件省电模式,该模式不及硬件省电模式(可由VS1003的XRESET来激活)。
bit5:
SM_TESTS
SM_TESTS=1,进入SDI测试模式。
bit6:
SM_STREAM
SM_STREAM=1,使能VS1003的流模式。
bit7:
SM_PLUSV
SM_PLUSV=1,MP3+V解码使能。
bit8:
SM_DACT
SM_DACT=0,SCLK上升沿有效;
SM_DACT=1,SCLK下降沿有效。
bit9:
SM_SDIORD
SM_SDIORD=0,SDI总线字节数据MSB在前,即须先发送MSB;
SM_SDIORD=1,SDI总线字节数据LSB在前,即须先发送LSB;
该位的设置可不能阻碍SCI总线。
bit10:
SM_SDISHARE
SM_SDISHARE=1,SDI与SCI将共用一个片选信号(同时SM_SDINEW=1),即将XDCS与XCS这两根信号线合为一条,能省去一个IO口。
bit11:
SM_SDINEW
SM_SDINEW=1,VS1002本地模式(新模式)。
VS1003在启动后默许进入该模式。
(那个地址所说的模式指的是总线模式。
)
bit12:
SM_ADPCM
SM_ADPCM=1,ADPCM录音使能。
同时置位SM_ADPCM和SM_RESET将使能VS1003的IMAADPCM录音功能。
bit13:
SM_ADPCM_HP
SM_ADPCOM_HP=1,使能ADPCM高通滤波器。
同时置位SM_ADPCM_HP、SM_ADPCM和SM_RESET将开启ADPCM录音用高通滤波器,对录音时的背景噪音有必然的抑制作用。
bit14:
SM_LINE_IN
录音输入选择,SMLINE_IN=1,选择线入(linein);
SM_LINE_IN=0,选择麦克风输入(默许)。
0X1可读写)
SCI_STATUS为VS1003的状态寄放器,提供VS1003当前状态信息。
0X2可读写)
重音/高音设置寄放器。
VS1003的内置的重音增强器VSBE是种高质量的重音增强DSP算法,能够最大限度的幸免音频削波。
当SB_AMPLITUDE(bit:
7~4)不为零时,重音增强器将使能。
能够依照个人需要来设置SB_AMPLITUDE。
例如,SCI_BASS=0x00f6,即对60Hz以下的音频信号进行15dB的增强。
当ST_AMPLITUDE(bit:
15~12)不为零时,高音增强将使能。
例如,SCI_BASS=0x7a00,即10kHz以上的音频信号进行的增强。
0X3可读写)
bit15~bit13:
SC_MULT
时钟输入XTALI的倍频设置,设置之后将启动VS1003内置的倍频器。
bit12~bit11:
SC_ADD
用于在WMA流解码时给倍频器增加的额外的倍频值。
bit10~bit0:
SC_FREQ
当XTALI输入的时钟不是时才需要设置该位段,其默许值为0,即VS1003默许利用的是的输入时钟。
0X4可读写)
解码时刻寄放器。
当进行正确的解码时,读取该寄放器能够获适当前的解码时长(单位为秒)。
能够更改该寄放器的值,可是新值须要对该寄放器进行两次写操作。
在每次软件复位或是WAV(PCM、IMAADPCM、WMA、MIDI)解码开始与终止时SCI_DECODE_TIME的值将清零。
0X5可读写)
当进行正确的解码时,该寄放器的值为当前的采样率(bit:
15~bit1)和所利用的声道(bit0)。
采样率须为2的倍数;
bit0=0,单声道数据,bit0=1,立体声数据。
写该寄放器半直接改变采样率。
0X6可读写)
读寄放器用来加载用户应用程序和数据到VS1003的指令的数据RAM中。
起始地址在SCI_WRAMADDR中进行设置,且必需先于读写SCI_WRAM。
关于16位的数据能够在进行一次SCI_WRAM的读写中完成;
而对32位的指令字来讲那么需要两次持续读写。
字节顺序是大端模式,即高字节在前,低字节在后。
在每一次完成全字读写后,内部指针将自动增加。
8.SCI_WRAMADDR(地址:
0X7可读写)
用于设置RAM读写的首地址。
SPI_HDAT1(地址:
0X8只读)
这两个寄放器用来寄存所解码的音频文件的相关信息,为只读寄放器。
当为WAV文件时,SPI_HDAT0=0X7761,SPI_HDAT1=0X7665;
当为WMA文件时,SPI_HDAT0的值为解码速度(字节/秒),要转换为位率的话那么将SPI_HDAT0的值乘8即可,SPI_HDAT1=0X574D;
当为MIDI文件时,SPI_HDAT0的值能够参考VLSI的技术文档第33页,SPI_HDAT1=0X4D54;
当为MP3文件时,SPI_HDAT0和SPI_HDAT1包括较为复杂的信息(来自于解压以后的MP3文件头),包括当前正在解码的MP3文件的采样率、位率等,具体请参考数据手册的第33页到第34页。
复位后SPI_HDAT0和SPI_HDAT1将清零。
0XA可读写)
用户应用程序的起始地址,初始化先于SCI_WRAMADDR和SCI_WRAM。
若是没有利用任何用户应用程序,那么该寄放器不该进行初始化,或是将其初始化为零。
0XB可读写)
音量操纵寄放器。
高八位用于设置左声道,低八位用于设置右声道。
设置值为最大竟是的衰减倍数,步进值为,范围为0到255.最大竟是的设置值为0x0000,而静音为0xffff。
例如,左声道:
,右声道:
,那么SCI_VOL=(4X256)+7=0x0407。
硬件复位将使SCI_VOL清零(最大音量),而软件复位将不改变音量设置值。
(设置静音(SCI_COL=0XFFFF)将关闭模拟部份的供电。
[X](地址:
0XC~0XF可读写)
用于访问用户应用程序。
7)VS1003有应用电路
二、VS1003的驱动方式
那个地址就来介绍单片片对VS1003的操纵方式,最终实现MP3播放。
1)预备工作
在对VS1003进行驱动之前,咱们需要确保以下几点已经没问题,不然后面的工作都将是没成心义的。
各部份的供电电压与输出电压值是不同的。
供电部分
最小电压
推荐电压
最大电压
AVDD(模拟部分)
CVDD(数字部分,内核)
IOVDD(I/O电压)
与单片机正确靠得住连接。
VS1003与单片机连接的引脚要紧有7个,别离为SO、SI、SCLK、/XCS、/XRESET、DREQ、/XDCS。
只有保证它们与单片机正确靠得住的连接,才能对VS1003进行有效的操作与操纵。
2)写命令操作
要操纵VS1003第一要实现的确实是写命令,这是操纵是不是成功的前提。
关于通信接口部份,是一种同步串行接口方式(SPI从机模式),它要求SCLK信号必需由外部电路产生,数据(SDATA)在SCLK的上升沿或下降沿时被写入。
在笔者的实验中,采纳的是软件模拟SPI,读者也能够选用带有硬件SPI的单片机(如STC12系列、AVR系列等),驱动成效会更好。
写命令的进程如下:
1.等待DREQ为高(当DREQ为低时,说明芯片尚未就绪)
(命令片选)拉低
3.写入0x02
4.写入寄放器地址
5.别离写入数据的高字节与低字节
6.将XCS置高
实现代码如下:
voidwr_commad(unsignedcharaddr,unsignedcharhdat,unsignedcharldat)
{
DREQ=1;
while(!
DREQ);
XCS=0;
spi_write(0x02);
spi_write(addr);
spi_write(hdat);
spi_write(ldat);
XCS=1;
}
3)VS1003的初始化
如其它芯片一样,初始化关于VS1003来讲一样是极为重要的。
初始化的进程大致是如此的:
1.硬件复位:
接XRESET拉低
2.延时,将XDCS、XCS、XRESET置高
3.向MODE中写入0X0804
4.等待DREQ为高
5.设置VS1003的时钟:
SCI_CLOCKF=0x9800,3倍频
6.设置VS1003的采样率:
SPI_AUDATA=0xbb81,采样率48k,立体声
7.设置重音:
SPI_BASS=0x0055
8.设置音量:
SCI_VOL=0x2020
9.这一步被很多人轻忽,向VS1003发送4个字节的无效数据,用以启动SPI发送
voidMp3Reset(void)
{
XRESET=0;
delay(100);
XDCS=XCS=XRESET=1;
wr_commad(0x00,0x08,0x04);
delay(10);
wr_commad(0x03,0x98,0x00);
wr_commad(0x05,0xbb,0x81);
wr_commad(0x02,0x00,0x55);
wr_commad(0x0b,VOL_VALUE,VOL_VALUE);
入VS1003的测试模式:
SPI_MODE=0X0820
2.等待DREQ为高
3.将XDCS接低,而XCS要置高,选择VS1003的数据接口
4.向VS1003发送正弦测试命令:
0X530XEF0X6E0X300X000X000X000X00
其中0X30为频率,用户能够修改成其它值
5.延时一段时刻
6.退出正弦测试,发送死令:
0X450X780X690X740X000X000X000X00
7.延时一段时刻
8.循环以上流程
voidSintest(unsignedcharx)
wr_commad(0x00,0x08,0x20);
XDCS=0;
XCS=1;
spi_write(0x53);
spi_write(0xef);
spi_write(0x6e);
spi_write(x);
spi_write(0);
delay(5000);
spi_write(0x45);
spi_write(0x78);
spi_write(0x69);
spi_write(0x74);
XDCS=1;
若是能够通过这一步,就说明你的VS1003已经做好了为你播放MP3的预备了。
下面的工作确实是将MP3文件的数据有条不紊地发给VS003,让它来为你完成MP3的解码和播放任务。
5)MP3文件数据写入
以上的对VS1003的初始化与测试都通事后,此刻就能够够给它发送MP3文件了。
可是这时就又显现一个新的问题。
MP3文件一般是比较大的,小的也要1M~2M,若是使单片机内部的FlashRom的话,容量是远远不够的。
需要有一种大容量的存储器来作为MP3文件的载体。
在笔者的调试系统中采纳了SD卡(256M)、U盘(1G)与移动硬盘(40G)来存储MP3文件。
关于SD卡与U盘的读写方式能够参看相关章节。
这些大容量的存储设备通常也是依照扇区来进行读写的,但在实际的应用中更多的是结合FAT32等文件系统来进行文件读写。
文件系统部份能够参照《FAT32的存储机制及其在单片机中的实现》。
那个地址抛开存储介质不谈,只谈数据的写入方式。
其实写入数据的方式十分简单。
要紧确实是看DREQ信号,在VS1003的FIFO能够同意数据的时候输出高电平。
每次能够写入32个字节的数据。
而DREQ变低时,单片机就要停止数据的发送。
具体的写数据的方式如下:
1.将XDCS拉低
3.通过SPI写入数据
5.在所有的数据都发送完毕后,最后发送2048个无效字节,用以清除VS1003的数据缓冲区
以下是笔者的程序中的写数据部份:
XDCS=0;
for(j=621;
j<
2783;
j++)
{
for(k=0;
k<
8;
k++)
MMC_get_data_LBA(j,64,get);
for(i=0;
i<
64;
i++)
spi_write(get[i]);
//delay(60000);
}
for(temp=0;
temp<
2048;
temp++)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实现 MP3 播放 方式