关于对语言模块VS1053B内部寄存器的配置
在VS1053B的内部共有16个16位的可编程寄存器,这些寄存器的基本参数如下表所示:
1) 对于寄存器0:这里采用系统复位后的默认设置—0x4800,这其中有一个软复位功能位,当其被置位时,可使内部固件进行复位,具体的实现函数如下所示:
void softRest()
{
unsigned long SRreg=SPI.transfer(50331648);
SRreg=SRreg | 0x0004;
SRreg=(0x02<<24) + SRreg;
SRreg=SPI.transfer(SRreg);
}
2) 对于寄存器1:采用默认设置即可,这里还具有设置耳机音量增高的功能,具体的实现函数如下所示:
Void volumeAmp(char ampdb)
{
unsigned long VAreg= SPI.transfer(50397184);
switch (ampdb)
{
case 0: break;
case 1: VAreg=VAreg | 0x1000;
VAreg=(0x02<<24) + (0x01<<16) + VAreg;
VAreg=SPI.transfer(VAreg);
break;
case 2: VAreg=VAreg | 0x2000;
VAreg=(0x02<<24) + (0x01<<16) + VAreg;
VAreg=SPI.transfer(VAreg);
break;
default: break;
}
}
3) 寄存器:2:用于高低音音效的设置,这里关闭即可。
4) 寄存器3:改变时钟的频率,当解码器固件在解码WMA或AAC时,需要临时提高时钟频率的时候,就能用到该寄存器了,这里暂且不用,就不多介绍了。
5) 寄存器4:记录解码时间(单位是S)。
6) 寄存器5:采样频率的设置,这一点很重要,直接决定着解码器再解码数据时所采用的采样率和通道数,具体的设置是这样的:
SCI_AUDATA的15:1位决定着解码的采样率,0位决定着解码采用的通道数;
首先,判断SCI_AUDATA.0是否为0,若为0则解码输出为单声道,且采样率=SCI_AUDATA;
若为1则解码输出为双声道,且采样率=SCI_AUDATA-1;
默认的情况下,SCI_AUDATA的值=1 1111 0100 0000(0x1F40)=8000(Hz)。及默认的采 频率为8K Hz的经典语言采样速率。该部分的函数为设置采样率和通道数的函数,具体
采样率的设定在参照各种音频文件对采样速率的要求后再作设定。
7) 寄存器6和7:这是一对对VS1053B内置的RAM进行读写的寄存器,寄存器6:SCI_WRAM负责16位数据或32位指令的存储,寄存器7:SCI_WRAMADDR负责引导对SCI_WRAM进行读写的基地址,并且其具有自动增加的功能。具体的RAM的使用如下表所示:
这里提供给用户使用的区域在上面列表中的X,Y和指令存储器,其它区域可以访问,但是不应该对它们写入,除非采用其它特殊的方法。
8)寄存器8和寄存器9:这也是一对寄存器,其中,SCI_HDAT0用来标识声音文件的类型,如下表所示:
声音文件的类型 |
SCI_HDAT0 |
SCI_HDAT1 |
WAV |
0x7665(“ve”) |
RIFF WAVE格式的数据速率(字节/秒); 单声道或双声道8位或16位PCM 单声道或双声道IMA ADPCM |
AAC ADTS |
0x4154(“AT”) |
平均数据速率(字节/秒) |
AAC ADIF |
0x4144(“AD”) |
|
AAC .mp4/.m4a |
0x4D34(“M4”) |
|
WMA |
0x574D(“WM”) |
测量的数据速率(字节/秒) |
MIDI |
0x4D54(“MT”) |
平均数据速率(字节/秒) |
Ogg Vorbis |
0x4F67(“Og”) |
平均数据速率(字节/秒) |
MP3 |
0XFFE0和0xFFFF之间 |
平均数据速率(字节/秒) |
对于MP3文件,SCI_HDAT1会在0Xffe0和0xFFFF之间,SCI_HDAT1/0包含了下列信息:
“采样率”区域在SCI_HDAT0里的解释如下表所示:
“比特率”区域在SCI_HDAT0里面的解释如下:(不过对于可变比特率流,其值是在不断变化的)
注意:比特率的计算在歌曲之间是不会自动复位的,但它除了软件和硬件复位外,还可以通过对SCI_DECODE_TIME的写操作来复位,因此,要想修改此寄存器的值就应该写两次,否则会被认为是进行重置ByteRate的操作。
9) 寄存器10:SCI_AIADDR寄存器,其表示应用程序代码的起始地址,它应该和早先的SCI_WRAMADDR和SCI_WRAM寄存器一起写入,如果不使用应用程序代码,则此寄存器就不应该初始化,或者应该初始化为0,详情参考:“VS10XX应用注意事项”(Application Notes for VS10XX)。
10) 寄存器11:SCI_VOL寄存器,其用于播放器的硬件音量的控制,高字节是控制左通道音量的,低字节是控制右通道音量的,最大的音量是0,无声是0xFEFE,为0xFFFF时将使模拟单元进入掉电模式,具体的函数如下所示:
VOLChange(unsigned char volleft, unsigned char volright)
{
unsigned long VOLreg=(0x02<<24) + (0x0b<<16) + (volleft<<8) + volright;
VOLreg=SPI.transfer(VOLreg);
}
11) 寄存器12:SCI_AICTRL[x]寄存器(x=[0..3]),这些寄存器组可以用来访问用户的应用程序,同时,它们也可以被IMA ADPCM录音模式所使用。
至此,VS1053B mp3模块的内部寄存器功能介绍完毕。。。
有关系统架构更详细的介绍详见:
andery88的【Sakura进程】帖--基于SAKURA开发板的语音播放平台的设计
http://forum.eepw.com.cn/thread/222742/1
继续学习中。。。同时希望EEPW友们提出宝贵意见和建议。。。