示例#1
0
//向VS10XX写命令
//address:命令地址
//data:命令数据
void VS_WR_Cmd(u8 address, u16 data)
{
    while (VS_DQ == 0); //等待空闲
    VS_SPI_SpeedLow();//低速
    VS_XDCS_H;
    VS_XCS_L;
    VS_SPI_ReadWriteByte(VS_WRITE_COMMAND);//发送VS10XX的写命令
    VS_SPI_ReadWriteByte(address); //地址
    VS_SPI_ReadWriteByte(data >> 8); //发送高八位
    VS_SPI_ReadWriteByte(data);  //第八位
    VS_XCS_H;
    VS_SPI_SpeedHigh();//高速
}
示例#2
0
//读VS10XX的寄存器
//address:寄存器地址
//返回值:读到的值
//注意不要用倍速读取,会出错
u16 VS_RD_Reg(u8 address)
{
    u16 temp = 0;
    while (VS_DQ == 0); //非等待空闲状态
    VS_SPI_SpeedLow();//低速
    VS_XDCS_H;
    VS_XCS_L;
    VS_SPI_ReadWriteByte(VS_READ_COMMAND);  //发送VS10XX的读命令
    VS_SPI_ReadWriteByte(address);          //地址
    temp = VS_SPI_ReadWriteByte(0xff);      //读取高字节
    temp = temp << 8;
    temp += VS_SPI_ReadWriteByte(0xff);     //读取低字节
    VS_XCS_H;
    VS_SPI_SpeedHigh();//高速
    return temp;
}
示例#3
0
//向VS10XX写数据
//data:要写入的数据
void VS_WR_Data(u8 data)
{
    VS_SPI_SpeedHigh();//高速,对VS1003B,最大值不能超过36.864/4Mhz,这里设置为9M
    VS_XDCS_L;
    VS_SPI_ReadWriteByte(data);
    VS_XDCS_H;
}
示例#4
0
文件: audio.c 项目: chalot/BWRecorder
//发送一次音频数据
//固定为32字节
//返回值:0,发送成功
//		 1,VS10xx不缺数据,本次数据未成功发送    
u8 VS_Send_MusicData(u8* buf) {
	u8 n;
	if (VS_DREQ_STATE != 0)  //送数据给VS10XX
			{
		VS_XDCS_LOW;
		for (n = 0; n < 32; n++) {
			VS_SPI_ReadWriteByte(buf[n]);
		}
		VS_XDCS_HIGH;
	}
	else
		return 1;
	return 0;  //成功发送了
}
示例#5
0
//发送一次音频数据
//固定为32字节
//返回值:0,发送成功
//       1,VS10xx不缺数据,本次数据未成功发送
u8 VS_Send_MusicData(u8* buf)
{
    u8 n;
    if (VS_DQ != 0) //送数据给VS10XX
    {
        //PBout(0)_H;
        VS_XDCS_L;
        for (n = 0; n < 32; n++)
        {
            VS_SPI_ReadWriteByte(buf[n]);
        }
        VS_XDCS_H;
    }
    else return 1;
    return 0;//成功发送了
}
//发送一次音频数据
//固定为32字节
//返回值:0,发送成功
//		 1,VS10xx不缺数据,本次数据未成功发送    
u8 VS_Send_MusicData(u8* buf)
{
	u8 n;
	if(VS_DQ!=0)  //送数据给VS10XX
	{	
        mico_rtos_suspend_all_thread();
		VS_XDCS_Clr();  
        for(n=0;n<32;n++)
		{
			VS_SPI_ReadWriteByte(buf[n]);	 			
		}
		VS_XDCS_Set();   
        mico_rtos_resume_all_thread(); 
	}else return 1;
	return 0;//成功发送了
}
示例#7
0
//ram 测试
//返回值:RAM测试结果
// VS1003如果得到的值为0x807F,则表明完好;VS1053为0X83FF.
u16 VS_Ram_Test(void)
{
    VS_HD_Reset();
    VS_WR_Cmd(SPI_MODE, 0x0820); // 进入VS10XX的测试模式
    while (VS_DQ == 0); // 等待DREQ为高
    VS_SPI_SpeedLow();//低速
    VS_XDCS_L;                // xDCS_H,选择VS10XX的数据接口
    VS_SPI_ReadWriteByte(0x4d);
    VS_SPI_ReadWriteByte(0xea);
    VS_SPI_ReadWriteByte(0x6d);
    VS_SPI_ReadWriteByte(0x54);
    VS_SPI_ReadWriteByte(0x00);
    VS_SPI_ReadWriteByte(0x00);
    VS_SPI_ReadWriteByte(0x00);
    VS_SPI_ReadWriteByte(0x00);
    delay_ms(150);
    VS_XDCS_H;
    return VS_RD_Reg(SPI_HDAT0);// VS1003如果得到的值为0x807F,则表明完好;VS1053为0X83FF.;
}
示例#8
0
////////////////////////////////////////////////////////////////////////////////
//软复位VS10XX
void VS_Soft_Reset(void)
{
    u8 retry = 0;
    while (VS_DQ == 0); //等待软件复位结束
    VS_SPI_ReadWriteByte(0Xff);//启动传输
    retry = 0;
    while (VS_RD_Reg(SPI_MODE) != 0x0800) // 软件复位,新模式
    {
        VS_WR_Cmd(SPI_MODE, 0x0804); // 软件复位,新模式
        delay_ms(2);//等待至少1.35ms
        if (retry++ > 100)break;
    }
    while (VS_DQ == 0); //等待软件复位结束
    retry = 0;
    while (VS_RD_Reg(SPI_CLOCKF) != 0X9800) //设置VS10XX的时钟,3倍频 ,1.5xADD
    {
        VS_WR_Cmd(SPI_CLOCKF, 0X9800); //设置VS10XX的时钟,3倍频 ,1.5xADD
        if (retry++ > 100)break;
    }
    delay_ms(20);
}
示例#9
0
//正弦测试
void VS_Sine_Test(void)
{
    VS_HD_Reset();
    VS_WR_Cmd(0x0b, 0X2020);  //设置音量
    VS_WR_Cmd(SPI_MODE, 0x0820); //进入VS10XX的测试模式
    while (VS_DQ == 0);  //等待DREQ为高
    //printf("mode sin:%x\n",VS_RD_Reg(SPI_MODE));
    //向VS10XX发送正弦测试命令:0x53 0xef 0x6e n 0x00 0x00 0x00 0x00
    //其中n = 0x24, 设定VS10XX所产生的正弦波的频率值,具体计算方法见VS10XX的datasheet
    VS_SPI_SpeedLow();//低速
    VS_XDCS_L; //选中数据传输
    VS_SPI_ReadWriteByte(0x53);
    VS_SPI_ReadWriteByte(0xef);
    VS_SPI_ReadWriteByte(0x6e);
    VS_SPI_ReadWriteByte(0x24);
    VS_SPI_ReadWriteByte(0x00);
    VS_SPI_ReadWriteByte(0x00);
    VS_SPI_ReadWriteByte(0x00);
    VS_SPI_ReadWriteByte(0x00);
    delay_ms(100);
    VS_XDCS_H;
    //退出正弦测试
    VS_XDCS_L; //选中数据传输
    VS_SPI_ReadWriteByte(0x45);
    VS_SPI_ReadWriteByte(0x78);
    VS_SPI_ReadWriteByte(0x69);
    VS_SPI_ReadWriteByte(0x74);
    VS_SPI_ReadWriteByte(0x00);
    VS_SPI_ReadWriteByte(0x00);
    VS_SPI_ReadWriteByte(0x00);
    VS_SPI_ReadWriteByte(0x00);
    delay_ms(100);
    VS_XDCS_H;

    //再次进入正弦测试并设置n值为0x44,即将正弦波的频率设置为另外的值
    VS_XDCS_L; //选中数据传输
    VS_SPI_ReadWriteByte(0x53);
    VS_SPI_ReadWriteByte(0xef);
    VS_SPI_ReadWriteByte(0x6e);
    VS_SPI_ReadWriteByte(0x44);
    VS_SPI_ReadWriteByte(0x00);
    VS_SPI_ReadWriteByte(0x00);
    VS_SPI_ReadWriteByte(0x00);
    VS_SPI_ReadWriteByte(0x00);
    delay_ms(100);
    VS_XDCS_H;
    //退出正弦测试
    VS_XDCS_L; //选中数据传输
    VS_SPI_ReadWriteByte(0x45);
    VS_SPI_ReadWriteByte(0x78);
    VS_SPI_ReadWriteByte(0x69);
    VS_SPI_ReadWriteByte(0x74);
    VS_SPI_ReadWriteByte(0x00);
    VS_SPI_ReadWriteByte(0x00);
    VS_SPI_ReadWriteByte(0x00);
    VS_SPI_ReadWriteByte(0x00);
    delay_ms(100);
    VS_XDCS_H;
}