VS1053简介:
VS1053 是目前 VLSI 公司VS10xx 系列最强悍的芯片了,除了能播放各种音乐格式,还支持 OGG 实时编码录音。
http://www.vlsi.fi/en/products/vs1053.html
VS1053 特性:
n Ogg Vorbis
n MP3 = MPEG 1 & 2 audio layer III (CBR+VBR+ABR)
n MP1 & MP2 = MPEG 1 & 2 audio layers I & II optional
n MPEG4 / 2 AAC-LC(+PNS), HE-AAC v2 (Level 3) (SBR + PS)
n WMA4.0/4.1/7/8/9 all profiles (5-384 kbps)
n FLAC lossless audio with software plugin (upto 24 bits, 48 kHz)
n WAV (PCM + IMA ADPCM)
n General MIDI 1 / SP-MIDI format 0
结构框图:
VS1053模块:
n SPI接口,控制信号线均引出
n 1个耳机和音响输出接口
n 1个麦克风,用于录音
n 1个line_in输入接口
n 电源指示灯
n 板载3.3V和2.5V LDO 1117,最大提供800mA电流
n 单电源供电: +5VDC,电容滤波
n 12.288 Mhz晶振
n PCB尺寸: 50x40.5 mm
这应该是ICDEV的东西,更详细的资料可以去他们论坛看看。
连接方式:
VS1053通过配置SM_SDINEW的值有两种控制方式
设置SM_SDINEW为1
设置SM_SDINEW为0
在本次的实验中设置SM_SDINEW为1,并且使用LM3S8962的SSI接口。
VS1053 |
LM3S8962 |
XCS |
PC4 |
SCK |
PA2 |
SI |
PA4 |
SO |
PA5 |
VS1053驱动设计,主要API如下所示:
vs1053_io_init()初始化:
-
void vs1053_io_init()
{
/* init pin */
SysCtlPeripheralEnable(VS_CTRL_PERI);
_gpio_set_input(VS_CTRL_PORT, VS_DREQ);
_gpio_set_output(VS_CTRL_PORT, VS_CSn | VS_RSTn | VS_DCn);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
_gpio_set_input(GPIO_PORTA_BASE, GPIO_PIN_4); /* ssi rx */
_gpio_set_output(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_5); /* ssi clk | tx */
GPIOPinWrite(VS_CTRL_PORT, VS_CSn | VS_RSTn | VS_DCn,
VS_CSn | VS_DCn);
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_5, 0x00);
GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5);
/* init peri */
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);
// SysCtlPeripheralReset(SYSCTL_PERIPH_SSI0);
vs1053_enable(VS_LOSPEED);
SSIDataPut(SSI0_BASE, 0xff);
SSIDataPut(SSI0_BASE, 0xff);
SSIDataPut(SSI0_BASE, 0xff);
}
[/code]
void vs1053_softreset() 配置vs1053相关寄存器,并复位vs1053
[code]
void vs1053_softreset()
{
_ssi_wait();
VS_CSn_HIGH();
VS_DCn_HIGH();
VS_RSTn_LOW();
SysCtlDelay(1 << 22);
VS_RSTn_HIGH();
SysCtlDelay(1 << 22);
vs1053_sci_write_reg(SCI_MODE, 0x0804);//0x0804 );//| (1<<9));
vs1053_sci_write_reg(SCI_CLOCKF, 0x9800); //3倍频
vs1053_sci_write_reg(SCI_AUDATA, 0x00);
vs1053_sci_write_reg(SCI_VOL, 0x0b0b);}
复制代码
void vs1053_sci_write_reg(char addr, unsigned long data) 写vs1053的相关寄存器
-
void vs1053_sci_write_reg(char addr, unsigned long data)
{
unsigned int timeout;
_ssi_wait();
VS_DCn_HIGH();
VS_CSn_LOW();
_ssi_readwrite(VS_WRITE_COMMAND | addr);
_ssi_readwrite(data);
VS_CSn_HIGH();
switch(addr)
{
case SCI_MODE: timeout = 30000; break;
case SCI_STATUS: timeout = 150; break;
case SCI_BASS: timeout = 1500; break;
case SCI_CLOCKF: timeout = 30000; break;
case SCI_WRAM: timeout = 150; break;
case SCI_WRAMADDR: timeout = 150; break;
case SCI_VOL: timeout = 1500; break;
default:
timeout = 3000; break;
}
for(; timeout!=0; timeout--)
{
// SysCtlDelay(1<<10);
if(VS_DREQ_READ())
{
break;
}
}
}
复制代码
unsigned long vs1053_sci_read_reg(char addr) 读vs1053的相关寄存器
-
unsigned long vs1053_sci_read_reg(char addr)
{
unsigned int rev, timeout;
_ssi_wait();
VS_DCn_HIGH();
VS_CSn_LOW();
_ssi_readwrite(VS_READ_COMMAND | addr);
rev = _ssi_readwrite(0xffff); /* gives before gets */
VS_CSn_HIGH();
switch(addr)
{
case SCI_MODE: timeout = 30000; break;
case SCI_STATUS: timeout = 150; break;
case SCI_BASS: timeout = 1500; break;
case SCI_CLOCKF: timeout = 30000; break;
case SCI_WRAM: timeout = 150; break;
case SCI_WRAMADDR: timeout = 150; break;
case SCI_VOL: timeout = 1500; break;
default:
timeout = 3000; break;
}
for(; timeout!=0; timeout--)
{
// SysCtlDelay(1);
if(VS_DREQ_READ())
{
break;
}
}
return rev;
}
复制代码
void vs1053_enable(char speed) 设置LM3S8962的SSI接口速率,并使能SSI接口
-
void vs1053_enable(char speed)
{
unsigned long tmp;
SSIDisable(SSI0_BASE);
if (speed == VS_HISPEED)
{
SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,
SSI_MODE_MASTER, 3000000, 16);
}
else
{
SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,
SSI_MODE_MASTER, SysCtlClockGet()/50, 16);
}
SSIEnable(SSI0_BASE);
while(SSIDataGetNonBlocking(SSI0_BASE, &tmp) != 0);
vs1053_in_use = 1;
}
复制代码
void vs1053_disable() 禁止LM3S8962的SSI接口
-
void vs1053_disable()
{
unsigned long tmp;
VS_CSn_HIGH();
VS_DCn_HIGH();
while(SSIDataGetNonBlocking(SSI0_BASE, &tmp) != 0);
SSIDisable(SSI0_BASE);
vs1053_in_use = 0;
}
复制代码
具体驱动代码见附件:
VS1053.rar
(2.38 KB, 下载次数: 84)