tianqing324 发表于 2010-5-24 13:32:59

VS1003的DREQ为什么一直是低的,正弦测试正常,MP3测试时DREQ一直是低的,附程序

VS1003的DREQ为什么一直是低的,正弦测试正常,MP3测试时DREQ一直是低的,初始化通过,播放测试数据时DREQ一直低

uchar buffer ;
void VS1003B_PortInit(void)
{
    VS1003B_RST_PORT   |= BIT(VS1003B_RST);   
    VS1003B_DREQ_PORT|= BIT(VS1003B_DREQ);
        VS1003B_XDCS_PORT|= BIT(VS1003B_XDCS);
        VS1003B_XCS_PORT   |= BIT(VS1003B_XCS);
       
    VS1003B_DREQ_DDR   &= ~BIT(VS1003B_DREQ);
        DDRD               |= BIT(VS1003B_XCS);
        DDRD               |= BIT(VS1003B_XDCS);
        DDRE               |= BIT(VS1003B_RST);                                                        
}
/****************************************************************************
* 名称:void VS1003B_WriteCMD(uint8 addr, uint16 data)
* 功能:向VS1003写16位命令
* 入口参数:无
* 出口参数:无
****************************************************************************/
void VS1003B_WriteCMD(uchar addr,uint dat)
{
        SPI_LOW();
        VS1003B_XDCS_H();
        VS1003B_XCS_L();
       
        Write_Byte_SPI(0x02);
        Write_Byte_SPI(addr);
        Write_Byte_SPI(dat>>8);
        Write_Byte_SPI(dat);
       
        VS1003B_XCS_H();
        SPI_HIGH();
}
/****************************************************************************
* 名称:void VS1003B_ReadCMD(uint8 addr)
* 功能:读寄存器,参数 地址 返回内容
* 入口参数:无
* 出口参数:无
****************************************************************************/
uint VS1003B_ReadCMD(uchar addr)
{
        uinttemp;
       
        SPI_LOW();       
        VS1003B_XDCS_H();
        VS1003B_XCS_L();
       
        Write_Byte_SPI(0x03);
        Write_Byte_SPI(addr);
        temp = Read_Byte_SPI();
        temp <<= 8;
        temp += Read_Byte_SPI();
       
        VS1003B_XCS_H();
        SPI_HIGH();
        return temp;
}

/****************************************************************************
* 名称:void VS1003B_WriteDat(uhar dat)
* 功能:写数据
* 入口参数:无
* 出口参数:无
****************************************************************************/

void VS1003B_WriteDat(uchar dat)
{
        SPI_HIGH();
       
        VS1003B_XDCS_L();
        VS1003B_XCS_L();

        Write_Byte_SPI(dat);

        VS1003B_XCS_H();
}
/****************************************************************************
* 名称:void VS1003B_SoftReset(void)
* 功能:软件初始化
* 入口参数:无
* 出口参数:无
****************************************************************************/
void VS1003B_SoftReset(void)
{
        SPI_HIGH();
        VS1003B_WriteCMD(0x00,0x0804);                /* reset */
        delayms(200);
}
/****************************************************************************
* 名称:ucharVS1003B_Init(void)
* 功能:功能初始化
* 入口参数:无
* 出口参数:成功否
****************************************************************************/
ucharVS1003B_Init(void)
{
        VS1003B_PortInit();
        SPI_LOW();
       
        VS1003B_XCS_L();
        VS1003B_XDCS_H();
        VS1003B_RST_L();
        delayms(100);
        VS1003B_RST_H();                          //使能芯片
        delayms(100);


        while( (PINE & BIT(VS1003B_DREQ) ) == 0);
        VS1003B_WriteCMD(0x0,0x0804);
        while( (PINE & BIT(VS1003B_DREQ) ) == 0);
        VS1003B_WriteCMD(0x2,0x7a00);       //内置低音/高音增强
        while( (PINE & BIT(VS1003B_DREQ) ) == 0);
        VS1003B_WriteCMD(0x3,0x9800);    //4.5倍频率
        while( (PINE & BIT(VS1003B_DREQ) ) == 0);
        VS1003B_WriteCMD(0x5,0xbb81);
        while( (PINE & BIT(VS1003B_DREQ) ) == 0);
        VS1003B_WriteCMD(0xb,0x0000);    //音量最大
       
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
        SPI_HIGH();//提高速度,全速运行

        return 1;
}       
/**************************************************************************************************
**Name: VS1003B_Test(void)
**Function:test       
**Input:       
**Output:       
**************************************************************************************************/       
void VS1003B_Test()
{
        VS1003B_RST_L();       
        delayms(1);
        VS1003B_RST_H();          //硬件复位               
        VS1003B_SoftReset();//软件复位                                                               
        Write_Byte_SPI(0xff);                                                        //发送一个字节的无效数据,启动SPI传输
       
        VS1003B_XCS_L();
        VS1003B_XDCS_H();
        VS1003B_RST_H();
                                                                          
        VS1003B_WriteCMD(0x00,0x0820);                                //enter vs1003 test model
       
        while( (PINE & BIT(VS1003B_DREQ) ) == 0);                                   //wait for DREQ Highlevel
       //向vs1003发送正弦测试命令:0x53 0xef 0x6e n 0x00 0x00 0x00 0x00
       //其中n = 0x24, 设定vs1003所产生的正弦波的频率值,具体计算方法见vs1003的datasheet

        VS1003B_WriteDat(0x53);          
        VS1003B_WriteDat(0xef);          
        VS1003B_WriteDat(0x6e);          
        VS1003B_WriteDat(0X24);          
        VS1003B_WriteDat(0x00);          
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
    VS1003B_WriteDat(0x00);
        delayms(2000);//程序执行到这里后应该能从耳机听到一个单一频率的声音

       
               //退出正弦测试
        VS1003B_WriteDat(0x45);
    VS1003B_WriteDat(0x78);
        VS1003B_WriteDat(0x69);
        VS1003B_WriteDat(0x74);
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
       
                VS1003B_WriteCMD(0x00,0x0820);                                //enter vs1003 test model
        while( (PINE & BIT(VS1003B_DREQ) ) == 0);       
        VS1003B_WriteDat(0x53);          
        VS1003B_WriteDat(0xef);          
        VS1003B_WriteDat(0x6e);          
        VS1003B_WriteDat(0X74);          
        VS1003B_WriteDat(0x00);          
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
    VS1003B_WriteDat(0x00);
        delayms(2000);//程序执行到这里后应该能从耳机听到一个单一频率的声音

       
       //退出正弦测试
        VS1003B_WriteDat(0x45);
    VS1003B_WriteDat(0x78);
        VS1003B_WriteDat(0x69);
        VS1003B_WriteDat(0x74);
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
       
                VS1003B_WriteCMD(0x00,0x0820);                                //enter vs1003 test model
        while( (PINE & BIT(VS1003B_DREQ) ) == 0);       
        VS1003B_WriteDat(0x53);          
        VS1003B_WriteDat(0xef);          
        VS1003B_WriteDat(0x6e);          
        VS1003B_WriteDat(0X44);          
        VS1003B_WriteDat(0x00);          
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
    VS1003B_WriteDat(0x00);
        delayms(2000);//程序执行到这里后应该能从耳机听到一个单一频率的声音
       
       //退出正弦测试
        VS1003B_WriteDat(0x45);
    VS1003B_WriteDat(0x78);
        VS1003B_WriteDat(0x69);
        VS1003B_WriteDat(0x74);
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
       
                VS1003B_WriteCMD(0x00,0x0820);                                //enter vs1003 test model
        while( (PINE & BIT(VS1003B_DREQ) ) == 0);       
        VS1003B_WriteDat(0x53);          
        VS1003B_WriteDat(0xef);          
        VS1003B_WriteDat(0x6e);          
        VS1003B_WriteDat(0X74);          
        VS1003B_WriteDat(0x00);          
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
    VS1003B_WriteDat(0x00);
        delayms(2000);//程序执行到这里后应该能从耳机听到一个单一频率的声音
       //退出正弦测试
        VS1003B_WriteDat(0x45);
    VS1003B_WriteDat(0x78);
        VS1003B_WriteDat(0x69);
        VS1003B_WriteDat(0x74);
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
        VS1003B_WriteDat(0x00);
        VS1003B_XDCS_H();
}   
void MP3_TEST()
{
      ulong   i = 0;
          uchar    n = 0;
          uint count = 0;
          VS1003B_Init();
          //VS1003B_Test();
          //FAT32_ReadSector(7673+i,buffer);
       //SD_write_sector(15714+i,buffer);
                               while(count < 4800)
                                   {
                                     
                                          while( (PINE & BIT(VS1003B_DREQ) ) == 0);
                                           // {
                                                       for(n=0;n<32;n++)
                              {   
                                 VS1003B_WriteDat(vsBeepMP3);
                                                                   count++;
                              }
                                                // }
                                        }
}

tianqing324 发表于 2010-5-24 18:01:49

自己顶

cartkinger 发表于 2010-12-3 11:49:06

回复【1楼】tianqing324天庆
-----------------------------------------------------------------------

楼主,你的问题解决了吗?我也碰到了同样的问题,搞不清为什么DREQ老为低。。。。不会是芯片烧坏了吧。。。。

zuoan 发表于 2011-11-20 12:44:55

我的也是同样地情况求解?

ST_ATMEL_NXP 发表于 2013-4-26 13:05:57

我也遇到这种问题了。是不是芯片是假的呀!我的板子以前焊过VS1003B的芯片,这次买的新芯片,焊上去都,DREQ就一直为低。也上拉了。

ubuntu1110 发表于 2013-5-2 00:59:21

ST_ATMEL_NXP 发表于 2013-4-26 13:05 static/image/common/back.gif
我也遇到这种问题了。是不是芯片是假的呀!我的板子以前焊过VS1003B的芯片,这次买的新芯片,焊上去都,DRE ...

我的也是,换了芯片也不行,我的主控芯片是msp430

ST_ATMEL_NXP 发表于 2013-5-2 08:41:40

ubuntu1110 发表于 2013-5-2 00:59 static/image/common/back.gif
我的也是,换了芯片也不行,我的主控芯片是msp430

我昨天测试了新买的3片,其中有一片DREQ是可以拉高的,一片晶振不起振,一片DREQ一直是低电平。我估计是买到假芯片了。

ubuntu1110 发表于 2013-5-2 13:22:12

ST_ATMEL_NXP 发表于 2013-5-2 08:41 static/image/common/back.gif
我昨天测试了新买的3片,其中有一片DREQ是可以拉高的,一片晶振不起振,一片DREQ一直是低电平。我估计是 ...

额,买了三片都是假的?我也换了两片都不行。
页: [1]
查看完整版本: VS1003的DREQ为什么一直是低的,正弦测试正常,MP3测试时DREQ一直是低的,附程序