VS1003调试例程

1 篇文章 0 订阅
1 篇文章 0 订阅

开发工具 IAR

芯片:MSP430F5438

音频模块:VS1003B/VS1053

首先拿到之后,就像这到网上找一个别人做好的驱动直接用,(拿来主义)

找了一天无果,能找到的只是片段,或者芯片型号不对,中间也看了n多的文章介绍VS1003调试例程的,也看了几个驱动.

大概了解.代码不多.不是很复杂.

既然网上没有可以,那就拿别人的开始移植.一顿查VS手册,看别人项目的注释,开发完了,测试完全没声音,什么正玄波,什么MP3 ,毛都没一根....

我勒个乖乖.

开始分析 

首先 VS1003的几个引脚,是否接错,前后查了几遍,甚至怀疑是不是DREQ 需要上拉电阻.

  中间还找了STM的一个开发板,使用ST的工程验证了一下,STM板子上是可以工作的,和 DREQ 有没有上拉电阻无关

然后开始怀疑 波特率的问题,把MPS430的手册拿出来USCI从头到尾查了一遍,VS1003上说明 

vs上电默认倍频是1.0x    vs的板子上接晶振是 12.88Mhz的,那么算完应该是不大于3M.  好了

开始调SPI的速率,调整到3M,没声音.

不再怀疑代码问题了,开始怀疑人生了

代码再次从头到尾看一遍,没问题,然后对照 stm32的驱动,发现 st的SPI速率调的很低.开始慢慢的降低速率,实际情况是SPI在操作 SCI的时候不能超过 400K.很关键,因为超过了400K,主机发送的数据,从机是无法接收的.此乃问题所在

奇迹出现了,可以正常播放 正玄波了.开心啊.但是开心的没5分钟.发现可以播放正玄波,但是播放MP3文件,兹的一下 DERQ就不在拉高了.

难道速度太快没办法播放完.

调整不论是 频率调高调低,始终只能sin测试,而不能播放MP3文件.然后尝试读取寄存器数据,发现竟然读取不到.

然后找了示波器,对 CS  DSC  SCLK MISO SIMO 进行测量,发现 SOMI的确数据不对,好先不管了,既然我能写进去,那么应该是正常的,再次翻阅VS的手册.一个细节之前忽略了.:

 

SDI工作的时候 CS其实是为高的  也就是说 在发送MP3数据的时候应该是把DSC拉低  CS拉高,(其实有点违背SPI cs片选的)

这点把自己坑惨了,期间怀疑是SMCLK和MCLK问题,修改把DCS和CS控制好,

再次测试,MP3可以正常播放了.此前仍然使用的是 400K以下的速率,发现声音不流畅,尝试将spi的速率调高,前提是需要使用SCI 将vs1003的03寄存器倍频到3倍.到此mp3播放流程.

 

 

整个的使用流程:

 

  VS10XX_HardwareReset();//通过RES脚 重启vs1003

    Mp3DeselectControl(); //拉高 CS脚
    Mp3DeselectData();//拉高DCS脚
    
    Mp3SelectData();       //打开数据片选,即开启SDI传  xDCS = 1,选择VS10XX的数据接口
    SPI_Write_Byte(0xFF);
    SPI_Write_Byte(0xFF);
    SPI_Write_Byte(0xFF);
    SPI_Write_Byte(0xFF);
    Mp3DeselectData();        //关闭数据片选


    VS_Write_Reg(0,0x08,0x04);  //软件复位,向0号寄存器写入0x0804   SM_SDINEW为1   SM_RESET为1
    VS_Write_Reg(3,0x98,0x00);  //时钟设置,向3号寄存器写入0x9800   SC_MULT  为4   SC_ADD  为3   SC_FREQ为0
    VS_Write_Reg(SPI_VOL   ,0x30,0x30);  //音量设置,向0B号寄存器 写入  左声道30 右声道30  ---0x00,0x00左右声道均最大音量
   
    Mp3SelectData();         //打开数据片选,注意此时XCS(命令片选)为高电平,SDI有效
    SPI_Write_Byte(0);    //写入数据,这里写入4个0,是无关数据,用来启动数据传输
    SPI_Write_Byte(0);
    SPI_Write_Byte(0);
    SPI_Write_Byte(0);
    Mp3DeselectData();        //关闭数据片选,SDI无效
    
    set_SPI_bps(5);//设置 高频速率

 

然后就可以测试 正玄波和 mp3播放了


/***********************************************************************
**********
28
** 函数名称 : void VS_SinTest(INT8U x).
** 功能描述 : 正弦测试函数 ,检查 vs1003是否正常 .
** 输入参数 : INT8U x 正弦波频率 .
** 输出参数 : None.
** 返回参数 : None.
***********************************************************************
***********/

void VS_SinTest(int x)
{
    VS_Write_Reg(0x00,0x08,0x20);/* 启动测试,向 0 号寄存器写入 0x0820 SM_SDINEW 为 1  SM_TEST 为 1 */

   while(!(P2IN&MP3_DREQ));  //VS1003的DREQ为高才能写入数据
    Mp3SelectData();       //打开数据片选,即开启SDI传输
    SPI_Write_Byte(0x53);  /* 写入以下 8 个字节 ,进入正弦测试 */
    SPI_Write_Byte(0xef);
    SPI_Write_Byte(0x6e);
    SPI_Write_Byte(x);  /* 参数 x 用来调整正弦测试中正弦波的频率*/
    SPI_Write_Byte(0);
    SPI_Write_Byte(0);
    SPI_Write_Byte(0);
    SPI_Write_Byte(0);
    VS_delay(60000);  /* 这里延时一段时间 ,可以听到“正弦音”*/
    VS_delay(60000);
    VS_delay(60000);
    VS_delay(60000);
    VS_delay(60000);
    VS_delay(60000);
    SPI_Write_Byte(0x45);  /* 写入以下 8 个字节 ,退出正弦测试 */
    SPI_Write_Byte(0x78);
    SPI_Write_Byte(0x69);
    SPI_Write_Byte(0x74);
    SPI_Write_Byte(0);
    SPI_Write_Byte(0);
    SPI_Write_Byte(0);
    SPI_Write_Byte(0);                                                                                              
    Mp3DeselectData();        //关闭数据片选
    
}

 

 


 unsigned char VS10XX_SendMusicData( unsigned char *dat)
{
    unsigned char i;
    while(!(P2IN&MP3_DREQ));
           set_SPI_bps(15);   
        Mp3SelectData();       //打开数据片选,即开启SDI传输
        for(i=0; i<8; i++)
        {
            SPI_Write_Byte(dat[i]);
        }
         Mp3DeselectData();        //关闭数据片选
        return 0;

}

end 

https://wenku.baidu.com/view/fa1efcc990c69ec3d4bb756a.html

这个文章写的很好,调试思路比较清晰

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
LPC1113是一款由恩智浦(NXP)公司推出的低功耗微控制器。调试例程是用来验证LPC1113芯片功能和性能的代码模板。通常,调试例程会包含简单的硬件控制和软件算法,以及与外部设备的通信。 首先,我们需要准备好调试所需的硬件和软件工具。硬件方面,我们需要一个LPC1113开发板和一台计算机。至于软件工具,我们需要下载并安装Keil或者IAR Embedded Workbench等集成开发环境(IDE)。这些IDE通常集成了编译器、调试器和仿真器等工具,可以用来编写、编译和调试我们的代码。 接下来,我们可以通过IDE创建一个新项目,并选择LPC1113作为目标芯片。然后,我们可以从示例代码中选择一个合适的调试例程,或者根据我们的需求自己编写一个。调试例程通常包含初始化硬件和外设、设置时钟和中断、配置输入输出引脚等基本操作。我们可以根据调试例程注释中的说明来了解每一步的具体作用和原理。 一旦完成了代码的编写,我们可以将代码编译成机器语言,并将生成的可执行文件下载到LPC1113开发板中。接着,我们可以使用IDE中集成的调试器和仿真器来连接开发板,并开始进行调试调试器可以提供调试信息的实时显示和操作,如内存和寄存器的查看、断点和单步执行等。使用这些工具,我们可以逐步调试代码,找出潜在的问题和错误,并进行修复和优化。 总结来说,LPC1113调试例程是用来验证和测试LPC1113芯片功能和性能的代码模板。通过编写、编译和调试调试例程,我们可以更好地了解LPC1113的特性和功能,并根据需要进行定制化开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值