📄 vs1003._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 + -