打印
[Cortex-M0技术交流]

新唐nuc140接vs1053做mp3播放器。谁能帮帮看代码

[复制链接]
1641|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
492072866|  楼主 | 2015-1-7 20:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 492072866 于 2015-1-8 13:51 编辑

代码如下,那位大神帮看看问题在哪?目测是spi的问题

void SPI_send(uint8_t data)  //spi发送函数
{        
        SPI1->TX[0] = data;
        SPI1->CNTRL.GO_BUSY = 1;
        while ( SPI1->CNTRL.GO_BUSY == 1 );         //check data out?        
}

void SPI_read(uint8_t data)   //spi接受函数
{        
         data=SPI1->RX[0];
        SPI1->CNTRL.GO_BUSY = 1;
        while ( SPI1->CNTRL.GO_BUSY == 1 );         //check data out?        
}



int DREQ()    //获取DREQ引脚
{
int sssp;
sssp=DrvGPIO_GetBit(E_GPA, 1);
return sssp;
}

void SPI_init(void)  //spi初始化
{         
        DrvGPIO_InitFunction(E_FUNC_SPI1);
        DrvSPI_Open(eDRVSPI_PORT1,eDRVSPI_MASTER,eDRVSPI_TYPE1,8);
        DrvSPI_SetBitLength(eDRVSPI_PORT1,8);
        DrvSPI_SetEndian(eDRVSPI_PORT1, eDRVSPI_MSB_FIRST);
        DrvSPI_DisableAutoSS(eDRVSPI_PORT1);
        DrvSPI_SetSlaveSelectActiveLevel(eDRVSPI_PORT1, eDRVSPI_ACTIVE_LOW_FALLING);
        DrvSPI_SetClockFreq(eDRVSPI_PORT1, 9000000, 0);
        DrvGPIO_Open(E_GPE, VS_CS,E_IO_OUTPUT);
        SPI_send(0xFF);
}

void VS1053_Reset()  //vs1053硬复位
{
DrvGPIO_SetBit(E_GPE, VS_XCS);
DrvGPIO_SetBit(E_GPE, VS_CS);
  DrvGPIO_ClrBit(E_GPE, 4);
  DrvSYS_Delay(1000);
  DrvGPIO_SetBit(E_GPE, 4);
  while(DREQ()==0)
        {;}
}


void VS1053_writeReg(uint8_t addr,uint16_t dat)    //vs1053写指令
{DrvSPI_SetClockFreq(eDRVSPI_PORT1, 1125000, 0);
DrvGPIO_SetBit(E_GPE, VS_XCS);
DrvGPIO_ClrBit(E_GPE, VS_CS);
SPI_send(VS_WRITE_COM);
SPI_send(addr);
SPI_send((uint8_t)(dat>>8));
SPI_send((uint8_t)(dat));
DrvGPIO_SetBit(E_GPE, VS_CS);
DrvSPI_SetClockFreq(eDRVSPI_PORT1, 9000000, 0);
}

void VS1053_writeData(uint8_t dat)         //向vs1053写数据
{
DrvGPIO_ClrBit(E_GPE, VS_XCS);
//DrvGPIO_SetBit(E_GPE, 3);
//DrvGPIO_ClrBit(E_GPC, 8);
//SPI_send(VS_WRITE_COM);
//SPI_send(VS_SCI_AUDATA);
SPI_send((uint8_t)(dat));
DrvGPIO_SetBit(E_GPE, VS_XCS);
}

void VS1053_SoltReset()                                                //软件复位vs1053
{DrvSPI_SetClockFreq(eDRVSPI_PORT1, 281000, 0);
VS1053_writeReg(VS_SCI_MODE,0x0807);
while(DREQ()==0)
        {;}
          VS1053_writeReg(VS_SCI_CLOCKF,0x9800);
  DrvSPI_SetClockFreq(eDRVSPI_PORT1, 9000000, 0);
DrvGPIO_ClrBit(E_GPE, VS_XCS);
  SPI_send(0x0);
  SPI_send(0x0);
  SPI_send(0x0);
  SPI_send(0x0);
DrvGPIO_SetBit(E_GPE, VS_XCS);
while(DREQ()==0)
        {;}
}

void VS1053Init()                                  //初始化vs1053
{
VS1053_Reset();
         VS1053_SoltReset();
VS1053_writeReg(VS_SCI_MODE,0x0803);
  VS1053_writeReg(VS_SCI_BASS,0x0055);
   VS1053_writeReg(VS_SCI_CLOCKF,0x9800);
   VS1053_Vol=0xCA;
    VS1053_writeReg(VS_SCI_VOL,(VS1053_Vol<<8)|VS1053_Vol);
        while(DREQ()==0)
        {;}
}

uint16_t VS1053read(uint8_t addr)       //读取vs1053寄存器
{
uint16_t tem;
while(DREQ()==0)
        {;}
DrvSPI_SetClockFreq(eDRVSPI_PORT1, 1125000, 0);
DrvGPIO_SetBit(E_GPE, VS_XCS);
DrvGPIO_ClrBit(E_GPE, VS_CS);
SPI_send(VS_READ_COM);
SPI_send(addr);
SPI_read(tem);
tem=tem<<8;
SPI_read(tem);
DrvGPIO_SetBit(E_GPE, VS_CS);
DrvSPI_SetClockFreq(eDRVSPI_PORT1, 9000000, 0);
return tem;
}


void playmusic(uint8_t *mp3File)   //播放音乐
{
uint16_t k;
int t;
FATFS fs;
BYTE MMcbuf[512];
FIL file;
UINT br;
FRESULT res;
f_mount(0,&fs);           // 加载文件系统

        res = f_open(&file,(const TCHAR *)mp3File, FA_OPEN_EXISTING|FA_READ); // 打开文件
        
    if(res == FR_OK)  // 如果没有正确打开文件
    {
          while(1)
           {
            res=f_read(&file,MMcbuf,512,&br);
                k=0;
                do
                {
                 if(DREQ()==1&&res == FR_OK)
                  {
                   for(t=0;t<32;t++)
                   {VS1053_writeData(MMcbuf[k++]);}
                  }
                  if (ScanKey()!=0) keyhave();
                }while(k<512);
           if((res!= FR_OK)||(br<512)) break;
           }
        }
        f_close(&file);
        f_mount(0,0);
}

相关帖子

沙发
lvyunhua| | 2015-1-8 13:30 | 只看该作者
:lol,请详细描述下问题现象!

使用特权

评论回复
板凳
492072866|  楼主 | 2015-1-8 14:10 | 只看该作者
lvyunhua 发表于 2015-1-8 13:30
,请详细描述下问题现象!

vs1053没反应,正弦波测试也没有效果。怀疑是spi通信问题

使用特权

评论回复
地板
lvyunhua| | 2015-1-8 14:21 | 只看该作者
有没有用示波器看下SPI引脚波形?
符合通信要求吗?

使用特权

评论回复
5
492072866|  楼主 | 2015-1-8 14:36 | 只看该作者
lvyunhua 发表于 2015-1-8 14:21
有没有用示波器看下SPI引脚波形?
符合通信要求吗?

没有示波器,用例程初始化。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝