MP3音乐播放器芯片VS1053B芯片使用教程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/* 返回值 : 无
*/
/*--------------------------------------------------------*/
void MSPI_Init(void)
{
/*
PINSEL0 = (PINSEL0 & 0xFFFF00FF) | 0x00005500; //选择 SPI
*************************************
** 函数名称: INT8U SPI_RecByte()
Name: INT8U SPI_RecByte()
** 功能描述: 从 SPI 接口接收一个字节
Function: receive a byte from SPI
interface
通过学习 VS1053B,对电路分析能力也有提高。如果看不懂电路图,即便 c 语言代码分 析的多么透彻也无济于事。 通过学习类似 VS1053B 芯片的驱动,能真正提高手艺人的编程 能力。通过数据手册,写出相应芯片的驱动程序实现一些简单功能是一个程序员的核心竞争 力!这里涉及到许多 c 语言编程技巧。一句话,目前我是没有这个能力。也就只能好好学习 别人源码的份了。有所收获就记录下来。
uchar ucTempCount; uchar uci;
for(ucTempCount=0; ucTempCount<ucDelayCount; ucTempCount++)
{
//
uci = 200; //Err
//
uci = 250; //OK
uci = 230;
while(uci--)
{
_nop_();
//针对 SD 卡读写板调整引脚 #define uint8 unsigned char
sbit MP3_XRESET = P3^2;
#define Mp3PutInReset() { MP3_XRESET = 0; }
#define Mp3ReleaseFromReset() { MP3_XRESET =1; }
#if 1
/**********************************************************/
/* 函数名称 : SPIPutChar
*/
/* 函数功能 : 通过 SPI 发送一个字节的数据
*/
/* 参数 : 待发送的字节数据
*/
/* 返回值 : 无
*/
/*--------------------------------------------------------*/
Macro_Set_CLK_Low();
if(c_SPI_SO) {
ucReadData |= 0x01; } Macro_Set_CLK_High();
S0SPCCR = 0x08;
// SPI 时钟设置
S0SPCR = (0 << 3) |
// CPHA = 0,
(0 << 4) |
// CPOL = 0,
(1 << 5) |
// MSTR = 1,
(0 << 6) |
// LSBF = 0,
(0 << 7);
// SPIE = 0,
*/
c_SPI_SO = 1;
Macro_Set_CLK_Low();
if(ucMaskCode & ucSendData) {
Macro_Set_SI_High(); } else {
Macro_Set_SI_Low(); }
Macro_Set_CLK_High(); ucMaskCode >>= 1;
} }
/******************************************************************************
* 用途:MP3 模块测试程序
*
vs1003 的硬件测试程序,主控芯片为 STC12LE5A60S2
*
其他的微处理器(带 SPI 接口的)只需稍加修改即可适用
*
对于不带硬 SPI 接口的微处理器可以用 IO 进行 SPI 的时序模拟
*
* 作者
日期
备注
* Huafeng Lin
20010/09/10
}
}
}
//#define wait(x) Delay(x)
/**********************************************************/
/* 函数名称 : MSPI_Init
*/
/* 函数功能 : 初始化 SPI 接口,设置为主机。
*/
/* 参数 : 无
*/
MP3 音乐播放器芯片 VS1053B 芯片使用教程
MP3,MP4,数码相机曾经是奢侈品。科技发展了,这些东西也就成了普通手 机的附属品了。但是作为手艺人学习这些芯片了解这些高性能芯片是很有必要的。 学习了解它既拓展了自己的眼界,也可以提升自己对嵌入式系统的认识。原子战 舰板上就板载了一颗高性能 MP3 音乐播放器芯片 VS1053B 芯片。通过原子源码对 一些参数的修改,也能欣赏美妙的音乐。这是一款真正的数字产品。还可以作为 录音机使用。
static uchar SPI_RecByte(void)
{
uchar ucReadData; uchar ucCount;
ucReadData = 0; Macro_Set_SI_High();
for(ucCount=0; ucCount<8; ucCount++) {
ucReadData <<= 1; //降低时钟频率
MP3_XRESET = 1; MP3_XCS = 1; MP3_XDCS = 1; }
//uint8 SD_SPI_ReadByte(void); //void SD_SPI_WriteByte(uint8 ucSendData);
//#define SPI_RecByte() SD_SPI_ReadByte() //#define SPIPutChar(x) SD_SPI_WriteByte(x)
sbit MP3_XCS = P3^3;
#define Mp3SelectControl() { MP3_XCS = 0; }
#define Mp3DeselectControl() { MP3_XCS = 1; }
sbit MP3_XDCS = P3^4;
#define Mp3SelectData()
{ MP3_XDCS = 0; }
#define Mp3DeselectData() { MP3_XDCS = 1; }
sbit MP3_DREQ = P3^5;
sbit c_SPI_SI = P1^5; sbit c_SPI_SO = P1^6; sbit c_SPI_CLK = P1^7;
#define Macro_Set_SI_High() #define Macro_Set_SI_Low() #define Macro_Set_CLK_High() #define Macro_Set_CLK_Low()
//#define SPI_RESULT_BYTE S0SPDR
//extern long volatile timeval; //用于延时的全局变量 //1ms Delayfunction //void Delay(uchar ucDelayCount) void wait(uchar ucDelayCount) {
void SPIPutChar(unsigned char ucSendData)
{
// S0SPDR = c;
// while((S0SPSR & 0x80) == 0); //等待 SPI 将数据发送完毕
uchar ucCount;
uchar ucMaskCode;
ucMaskCode = 0x80; for(ucCoFra Baidu biblioteknt=0; ucCount<8; ucCount++) {
** 输 入: 无
Input: NULL
** 输 出: 收到的字节
Output: the byte that be received
*******************************************************************************
*************************************/
VS1053 是继 VS1003 后荷兰 VLSI 公司出品的又一款高性能解码芯片。 该芯片可以实现对 MP3/OGG/WMA/FLAC/WAV/AAC/MIDI 等音频格式的解码,同时还 可以支持 ADPCM/OGG 等格式的编码,性能相对以往的 VS1003 提升不少。VS1053 拥有一个高性能的 DSP 处理器核 VS_DSP,16K 的指令 RAM,0.5K 的数据 RAM,通 过 SPI 控制,具有 8 个可用的通用 IO 口和一个串口,芯片内部还带了一个可变 采样率的立体声 ADC(支持咪头/咪头+线路/2 线路)、一个高性能立体声 DAC 及 音频耳机放大器。
MP3_DREQ = 1;
}
/**********************************************************/
/* 函数名称 : InitPortVS1003
*/
/* 函数功能 : MCU 与 vs1003 接口的初始化
*/
/* 参数 : 无
*/
/* 返回值 : 无
*/
/*--------------------------------------------------------*/
void InitPortVS1003(void)
{
MSPI_Init();//SPI 口的初始化
// IODIR &= 0xfffeffff; //其他接口线的设置,其中 dreq 为输入口
VS1053B,LCD,RDA5802 收音机芯片,ADXL345 重力加速度传感器芯片等等这些芯片, 它们有一个共同点:寄存器,寄存器地址,数据帧,命令字,I2C, SPI 协议等等。学会这些 外设芯片的驱动程序编写方法,才能真正发挥 ARM 处理器的强大功能。 下面是单片机程序的主要部分预览: /* * MP3 模块测试程序 *
下面是电路图:
下面是音频驱动电路图:即耳机驱动电路。
这两张电路图是战舰板原理图,电路图设计是核心技术。本人对原子的电路设计只有学 习和佩服的份。其中 74HC4052 和 TDA1308 分别是用作音频选择和耳机驱动,74HC4052 芯 片将板载的 MP3,FM 收音机和 STM32 发出的方波信号通过程序控制做出选择;也就是说将 众多音频信号集于一身可以分别单独送到耳机驱动电路输出,既节约了空间也节约了成本。 设计非常精妙!
VS1053 既然是高性能 DSP,也就是说它本身就可以作为主机象普通 MCU 一样使用。同 普通 MCU 一样 DSP 也具有一样的最小系统,所以在电路设计中自然就必须要晶振和复位电 路。通过读 datasheet 知道,VS1053B 也有中断功能,同样有 GPIO!操作寄存器可以控制时 钟频率。
新增
* Huafeng Lin
20010/09/10
修改
*
*/
#include "vs1003.h" #include "MusicDataMP3.c"
#include <intrins.h>
#define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define bool bit #define true 1 #define flase 0
// IODIR |= MP3_XRESET | MP3_XCS | MP3_XDCS;//xRESET,xCS,xDS 均为输出口
// IOSET |= MP3_XRESET | MP3_XCS | MP3_XDCS;//xRESET,xCS,xDS 默认输出高电平
MP3_DREQ = 1;
//置为输入
c_SPI_SI = 1 c_SPI_SI = 0 c_SPI_CLK = 1 c_SPI_CLK = 0
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s);
//#define SPIWait() { while((S0SPSR & 0x80) == 0); }//等待 SPI 将数据发送完毕