⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vs1003._c

📁 M16-Mp3.rar
💻 _C
字号:

//---------------------------- VS1003驱动程序 ------------------------------//

#include "vs1003.h"

uint32 num; 

uint16  VOL;  // 音量

// 音量数据表
const uint16 VOL_BUFFER[30] =
{ 
	0x9191,0x8c8c,0x8787,0x8282,0x7d7d,0x7878,0x7373,0x6e6e,0x6969,0x6464,
	0x5f5f,0x5a5a,0x5555,0x5050,0x4b4b,0x4646,0x4141,0x3c3c,0x3737,0x3232,
	0x2d2d,0x2828,0x2323,0x1e1e,0x1919,0x1414,0x0f0f,0x0a0a,0x0505,0x0000
};


//---------------------------------
//
// VS1003接口初始化函数 
//
//---------------------------------
void VS1003_Port_Init()
{ 
	VS1003_XRESET_OUT();
	VS1003_XDCS_OUT();
	VS1003_CS_OUT();
	VS1003_DREQ_IN();	
}


//---------------------------------
//
// VS1003写寄存器函数 
// addr:VS1003内部寄存器地址
// dat:要写入的数据
//
//---------------------------------
void VS1003_WriteReg(uint8 addr,uint16 dat)
{
	VS1003_XDCS_SET();								
	VS1003_CS_CLR();									// 片选VS1003
	
	SPI_SrByte(VS1003_WRITE_COM);								
	
	SPI_SrByte(addr);
	
	SPI_SrByte((uint8)(dat>>8));
	SPI_SrByte((uint8)(dat));
	
	VS1003_CS_SET();								  // 取消片选VS1003
	VS1003_XDCS_SET();
}



//---------------------------------
//
// VS1003读寄存器函数 
// addr:VS1003内部寄存器地址
// dat:返回的数据
//
//---------------------------------
uint16 VS1003_ReadReg(uint8 addr)
{
	uint16 dat = 0x0000;
	uint16 datL = 0x0000;
		
	VS1003_XDCS_SET();
	VS1003_CS_CLR();								

	SPI_SrByte(VS1003_READ_COM);
	SPI_SrByte(addr);

	dat	= SPI_SrByte(0xff);
	dat	= dat<<8;
	datL = SPI_SrByte(0xff);
	dat	=dat|datL;
	
	VS1003_CS_SET();
	VS1003_XDCS_SET();
	
	return dat;
}


//---------------------------------
//
// VS1003写数据函数 
// dat:要写入的数据
//
//---------------------------------
void VS1003_WriteDat(uint8 dat)
{
	VS1003_XDCS_CLR();
	
	VS1003_CS_CLR();

	SPI_SrByte(dat);
	VS1003_CS_SET();
	VS1003_XDCS_SET();
}


//---------------------------------
//
//      VS1003写硬复位函数 
//
//---------------------------------
void VS1003_HwRst(void)
{
	VS1003_XRESET_CLR();  						
										
	VS1003_XRESET_SET();  								
}


//---------------------------------
//
//      VS1003软复位函数 
//
//---------------------------------
void VS1003_SfRst(void)
{
	VS1003_WriteReg(0x00,0x0804);								//写复位

	while(VS1003_DREQ_STATE() != VS1003_DREQ);					//等待软件复位结束

	VS1003_WriteReg(VS1003_SPI_CLOCKF,0x9800);					//设置时钟3倍频
	VS1003_WriteReg(VS1003_SPI_AUDATA,0xB199);					//采样率48k,立体声
	VS1003_WriteReg(VS1003_SPI_BASS,0x0055);					//设置重音
	
	VS1003_WriteDat(0);											//向vs1003发送四个字节
	VS1003_WriteDat(0);											//无效数据,启动spi
	VS1003_WriteDat(0);
	VS1003_WriteDat(0);
}


//---------------------------------
//
//      VS1003初始化函数 
//
//---------------------------------
uint8 VS1003_Init(void)
{
	VOL=26;	
	
	VS1003_Port_Init();
	
	VS1003_CS_SET();

	VS1003_XDCS_SET();
	VS1003_XRESET_CLR();
	delay_ms(500);
	VS1003_XRESET_SET();											  //使能芯片
    delay_ms(500);
	
    while(VS1003_DREQ_STATE() != VS1003_DREQ);
	
	VS1003_WriteReg(0x00,0x0804);
	
	while(VS1003_DREQ_STATE() != VS1003_DREQ);	

	VS1003_WriteReg(0x03,0x9800);
	
	while(VS1003_DREQ_STATE() != VS1003_DREQ);	

	VS1003_WriteReg(0x05,0xB199);
	
	while(VS1003_DREQ_STATE() != VS1003_DREQ);	

	VS1003_WriteReg(0x02,0x0055);
	
	while(VS1003_DREQ_STATE() != VS1003_DREQ);	

	VS1003_WriteReg(VS1003_SPI_VOL ,VOL_BUFFER[VOL]);
	
	while(VS1003_DREQ_STATE() != VS1003_DREQ);	
		VS1003_WriteReg(0x05,0xB199);
	
	while(VS1003_DREQ_STATE() != VS1003_DREQ);	
		VS1003_WriteReg(0x05,0xB199);
	
	while(VS1003_DREQ_STATE() != VS1003_DREQ);	
	
	return 1;

}


//---------------------------------
//
//     VS1003空数据发送函数 
//
//---------------------------------
void VS1003_SendNull(void)
{
	uint32 i=0;
	do
	{
		if(VS1003_DREQ_STATE()== VS1003_DREQ) 
		{	
			VS1003_WriteDat(0x00);
			i++;
		}
	}while(i<1024);
}








⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -