单片机实现MP3播放的方法.docx
《单片机实现MP3播放的方法.docx》由会员分享,可在线阅读,更多相关《单片机实现MP3播放的方法.docx(14页珍藏版)》请在冰豆网上搜索。
![单片机实现MP3播放的方法.docx](https://file1.bdocx.com/fileroot1/2022-10/16/f6d57c20-ad2d-487c-8f17-c5808e315aec/f6d57c20-ad2d-487c-8f17-c5808e315aec1.gif)
单片机实现MP3播放的方法
单片机实现MP3播放的方法
有一个东西你一定听说过或用过,那就MP3播放器。
MP3播放器以其小巧的体积、强大的功能、优异的音质倍受人们的青睐。
如果把它嵌入到我们的单片机系统中,实现音频输出,那么对系统的增色是不言而喻的。
单独拿单片机来说,要解码MP3文件,是不可能的,因为从处理速度和资源各个方面都是不能满足要求的。
所以要依赖于专用MP3解码芯片,而单片机要作的就是对其进行控制。
这里我们围绕芬兰VLSI公司出品的VS1003来进行解MP3的实现方法。
1、VS1003芯片
1)芯片简介
VS1003是由荷兰VLSI公司出品的一款单芯片的MP3/WMA/MIDI音频解码和ADPCM编码芯片,其拥有一个高性能低功耗的DSP处理器核VS_DSP,5K的指令RAM,0.5K的数据RAM,串行的控制和数据输入接口,4个通用IO口,一个UART口;同时片内带有一个可变采样率的ADC、一个立体声DAC以及音频耳机放大器。
VS1003通过一个串行接口来接收输入的比特流,它可以作为一个系统的从机。
输入的比特流被解码,然后通过一个数字竟是控制器到达一个18位过采样多位ε-ΔDAC。
通过串行总线控制解码器。
除了基本的解码,在用户RAM中它还可以做其他特殊应用,例如DSP音效处理。
2)芯片实物与SiriuS板上的VS1003
3)芯片封装
以下的讲述都是针对于LQFP-48封装的。
4)VS1003特性
1.能解码MPEG1与MPEG2音频层III(CBR+VBR+ABR);WMA4.0/4.1/7/8/95~384kbps所有流文件;WAV(PCM+IMAAD-PCM);产生MIDI/SP-MIDI文件。
2.对话筒输入或线路输入的音频信号进行IMAADPCMM编码
3.支持MP3和WAVV流
4.高低音控制
5.单时钟12~13MHz
6.内部PLLL锁相环时钟倍频器
7.低功耗
8.内含高性能片上立体声数模转换器,两声道间无相位差
9.内含能驱动30欧负载的耳机驱动器
10.模拟,数字,I/O单独供电
11.为用户代码和数据准备的5.5KB片上RAM
12.串行的控制/数据接口
13.可被用作微处理器的从机
14.特殊应用的SPIFlash引导
15.借高度用途的UART接口
16.新功能可以通过软件和4GPIO添加
5)VS1003的引脚定义
管脚名称
LQFP-48
管脚类型
管脚功能
MICP
1
AI
同相差分话筒输入,自偏压
MICN
2
AI
反相差分话筒输入,自偏压
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
DIO
通用I/O3/串行数据总线数据
XDCS/BSYNC
13
DI
数据片选端/字节同步
IOVDD1
14
IOPWR
I/O电源
VCO
15
DO
时钟压控振荡器VCO输出
DGND1
16
DGND
处理器核与I/O的地
XTALO
17
AO
晶振输出
XTALI
18
AI
晶振输入
IOVDD2
19
IOPWR
I/O电源
DGND2
20
DGND
处理器核与I/O地
DGND3
21
DGND
处理器核与I/O地
DGND4
22
DGND
处理器核与I/O地
XCS
23
DI
片选输入,低电平有效
CVDD2
24
CPWR
处理器核电源
RX
26
DI
UART接收口,不用时接IOVDD
TX
27
DO
UART发送口
SCLK
28
DI
串行总线的时钟
SI
29
DI
串行输入
SO
30
DO3
串行输出
CVDD3
31
CPWR
处理器核电源
TEST
32
DI
保留做测试,连接至IOVDD
GPIO0/SPIBOOT
33
DIO
通用I/O0/SPIBOOT,使用100K下拉电阻
GPIO1
34
DIO
通用I/O1
AGND0
37
APWR
模拟地,低噪声参考地
AVDD0
38
APWR
模拟电源
RIGHT
39
AO
右声道输出
AGND1
40
APWR
模拟地
AGND2
41
APWR
模拟地
GBUF
42
AO
公共地缓冲器
AVDD1
43
APWR
模拟电源
RCAP
44
AIO
基准滤波电容
AVDD2
45
APWR
模拟电源
LEFT
46
AO
左声道输出
AGND3
47
APWR
模拟地
LINEIN
48
AI
线路输入
6)VS1003的功能寄存器
VS1003共有16个16位的寄存器,地址分别为0X0~0XF;除了模式寄存器(MODE,0X0)和状态寄存器(STATUS,0X1)在复位后的初始值分别为0X800和OX3C外,其余的寄存器在VS1003初始化后的值均为0。
下面将VS1003各寄存器逐一进行介绍。
1.MODE(地址:
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,选择麦克风输入(默认)。
2.SCI_STATUS(地址:
0X1可读写)
SCI_STATUS为VS1003的状态寄存器,提供VS1003当前状态信息。
3.SCI_BASS(地址:
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以上的音频信号进行10.5dB的增强。
4.SCI_CLOCKF(地址:
0X3可读写)
bit15~bit13:
SC_MULT
时钟输入XTALI的倍频设置,设置之后将启动VS1003内置的倍频器。
bit12~bit11:
SC_ADD
用于在WMA流解码时给倍频器增加的额外的倍频值。
bit10~bit0:
SC_FREQ
当XTALI输入的时钟不是12.288M时才需要设置该位段,其默认值为0,即VS1003默认使用的是12.228M的输入时钟。
5.SCI_DECODE_TIME(地址:
0X4可读写)
解码时间寄存器。
当进行正确的解码时,读取该寄存器可以获得当前的解码时长(单位为秒)。
可以更改该寄存器的值,但是新值须要对该寄存器进行两次写操作。
在每次软件复位或是WAV(PCM、IMAADPCM、WMA、MIDI)解码开始与结束时SCI_DECODE_TIME的值将清零。
6.SCI_AUDATA(地址:
0X5可读写)
当进行正确的解码时,该寄存器的值为当前的采样率(bit:
15~bit1)和所使用的声道(bit0)。
采样率须为2的倍数;bit0=0,单声道数据,bit0=1,立体声数据。
写该寄存器半直接改变采样率。
7.SCI_WRAM(地址:
0X6可读写)
读寄存器用来加载用户应用程序和数据到VS1003的指令的数据RAM中。
起始地址在SCI_WRAMADDR中进行设置,且必须先于读写SCI_WRAM。
对于16位的数据可以在进行一次SCI_WRAM的读写中完成;而对32位的指令字来说则需要两次连续读写。
字节顺序是大端模式,即高字节在前,低字节在后。
在每一次完成全字读写后,内部指针将自动增加。
8.SCI_WRAMADDR(地址:
0X7可读写)
用于设置RAM读写的首地址。
9.SPI_HDAT0gngSPI_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包含较为