打印
[技术问答]

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

[复制链接]
1429|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
492072866|  楼主 | 2015-1-8 13:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码如下,那位大神帮看看问题在哪?目测是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);
}
沙发
tihty| | 2015-1-8 14:22 | 只看该作者
哇塞 自己做的MP3 好牛

使用特权

评论回复
板凳
492072866|  楼主 | 2015-1-8 15:20 | 只看该作者
那位大神懂。求救啊

使用特权

评论回复
地板
gaoyang9992006| | 2015-1-8 21:41 | 只看该作者
你的代码到底肿么了?

使用特权

评论回复
5
gaoyang9992006| | 2015-1-8 21:41 | 只看该作者
你要给我们说明你的电路,以及你的目的,过程,然后遇到了什么问题,你觉得问题出在哪儿?

使用特权

评论回复
6
gaoyang9992006| | 2015-1-8 21:45 | 只看该作者
如果是单独的SPI问题,建议楼主直接从官方的库函数里,复制过来库函数使用。这样不会出错的。

使用特权

评论回复
7
gaoyang9992006| | 2015-1-8 21:46 | 只看该作者
官方的库函数有两个版本,好像是,一个IO模拟的,这个你可以修改为任意引脚,但是看好了里面定义的变量要跟你的对应好,另外一个采用SPI外设的专有接口。

使用特权

评论回复
8
lovecat2015| | 2015-1-29 12:58 | 只看该作者
代码的问题最好自己看吧,大家谁有这么多时间啊

使用特权

评论回复
9
lovecat2015| | 2015-1-29 12:59 | 只看该作者
有问题,最好把具体问题说出来,这样别人也好帮你,自己也能进步

使用特权

评论回复
10
quray1985| | 2015-1-29 19:51 | 只看该作者
楼主还是自己要求进步啊,自己把遇到的具体问题说清楚,只列出一堆代码,大家都没时间看啊

使用特权

评论回复
11
ccw1986| | 2015-1-29 22:11 | 只看该作者
代码有些长啊,看着好费劲

使用特权

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

本版积分规则

2

主题

5

帖子

0

粉丝