搜索
bottom↓
回复: 19

关于VS1003的时序问题的调试

[复制链接]

出0入0汤圆

发表于 2008-7-12 09:34:12 | 显示全部楼层 |阅读模式
各位大哥,各位高手们:

    你们好,小弟正将以前单片机的VS1003模块代码移植到DSP上面,寄存器的读写成功了,但正弦测试的时候,单步调试可以清晰的听到两种声音,但全速运行的 时候,只是非常快的“嗟”一声,我怀疑是某个时序的延时出问题了,请问有哪位高手调过1003或者知道这个问题是哪个时序出问题了,请帮帮小弟一忙,先谢了!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2008-7-12 09:51:22 | 显示全部楼层
DSP的速度太快了,VS1003接受得了吗?

出0入0汤圆

 楼主| 发表于 2008-7-12 09:53:54 | 显示全部楼层
延时长一点应该可以吧,我也是在学DSP,玩一下。。。。。

出0入0汤圆

发表于 2008-7-12 09:55:55 | 显示全部楼层
主要是要调整好控制VS1003的速度,太快了VS1003接受不了。

出0入0汤圆

 楼主| 发表于 2008-7-12 09:56:12 | 显示全部楼层
请问有出现过这种情况么?

出0入0汤圆

 楼主| 发表于 2008-7-12 09:57:23 | 显示全部楼层
嗯,现在我就是不知道哪个时序出问题了,读写寄存器正常了,就是全速运行的时候,正弦测试的声音不对劲,这种现象的话,看看谁有经验,能知道是哪个控制信号出问题了?谢谢

出0入0汤圆

 楼主| 发表于 2008-7-12 09:58:23 | 显示全部楼层
还有就是我以前的那个12.288的晶振拆掉了,现换了一个12M的上去,应该不会影响通讯功能吧?

出0入0汤圆

发表于 2008-7-12 10:03:49 | 显示全部楼层
没玩过DSP。有一点不变的条件:不管用什么来控制VS1003,控制时序都要在VS1003的接受范围内。12.288晶振如果在手边不妨再焊回去,看是不是晶振的问题。

出0入0汤圆

 楼主| 发表于 2008-7-12 10:08:46 | 显示全部楼层
嗯,为了排除问题,我得去买一个回来才行。对了,请问hn_ny_dxs 夏风有没有VS1003详细的时序图,我感觉那个DATASHEET的时序图很粗糙,说得不详细,其他功能也是很简单的说说,不够详细

出0入0汤圆

发表于 2008-7-12 10:15:40 | 显示全部楼层
我也没有时序图。但是我看懂了VS1003的控制时序,我的VS1003程序也是自已写出来的。

出0入0汤圆

 楼主| 发表于 2008-7-12 10:17:36 | 显示全部楼层
哦,那你当时有没有用那个正弦测试功能呢?

出0入0汤圆

发表于 2008-7-12 11:28:36 | 显示全部楼层
用过正弦测试

出0入0汤圆

发表于 2008-7-12 11:30:22 | 显示全部楼层
这是我的VS1003底层驱动程序,给你参考下:


//---------------------------------------------------------
//        VS1003b 底层驱动函数库
//        编译环境:Keil C
//        编写日期:2008-04-07
//        最后更新:2008-06-21
//---------------------------------------------------------
#include "main.h"


/*---------------------------------------------------
//        函数名:VS1003b_sine
//        功  能:VS1003B 正弦测试
//        参  数:
//        返回值:
//---------------------------------------------------

void VS1003b_sine()
{
        xCS_En();
        while(!DREQ);
        SPI_SendByte(VS_Write);
        SPI_SendByte(VS_Mode);
        SPI_SendByte(0x08);
        SPI_SendByte(0x20);                // 设置VS1003b 进入音频测试状态
        while(!DREQ);
        xCS_Dis();
        xDCS_En();
        while(!DREQ);
        SPI_SendByte(0x53);                // 开始
        SPI_SendByte(0xEF);
        SPI_SendByte(0x6E);
        SPI_SendByte(0x24);                // 改变发送数值可改变声音频率
        SPI_SendByte(0x00);
        SPI_SendByte(0x00);
        SPI_SendByte(0x00);
        SPI_SendByte(0x00);
        delayms(350);
        while(!DREQ);
        SPI_SendByte(0x45);                // 退出
        SPI_SendByte(0x78);
        SPI_SendByte(0x69);
        SPI_SendByte(0x74);
        SPI_SendByte(0x00);
        SPI_SendByte(0x00);
        SPI_SendByte(0x00);
        SPI_SendByte(0x00);
        delayms(350);
        xDCS_Dis();
}
*/
//---------------------------------------------------
//        函数名:VS1003b_Read
//        功  能:读VS1003b状态
//        参  数:
//        返回值:
//---------------------------------------------------

uint VS1003b_Read(uchar Regadd)
{
        uint temp;
        xCS_En();
        while(!DREQ);
        SPI_SendByte(VS_Read);
        SPI_SendByte(Regadd);
        temp =((uint16)SPI_SendByte(0xFF))<<8;
        temp|= (uint16)SPI_SendByte(0xFF);
        xCS_Dis();
        return temp;
}

//---------------------------------------------------
//        函数名:VS_VOL_up
//        功  能:VS1003B 音量加
//        参  数:
//        返回值:
//---------------------------------------------------
void VS_VOL_up()
{
        uint temp;
        temp =VS1003b_Read(VS_Vol);
        temp =(temp+8)<<8;
        temp+=8;
        xCS_En();
        while(!DREQ);
        SPI_SendByte(VS_Write);
        SPI_SendByte(VS_Vol);
        SPI_SendByte(temp>>8);
        SPI_SendByte(temp);
        xCS_Dis();
}

//---------------------------------------------------
//        函数名:VS_VOL_down
//        功  能:VS1003B 音量减
//        参  数:
//        返回值:
//---------------------------------------------------
void VS_VOL_down()
{
        uint temp;
        temp =VS1003b_Read(VS_Vol);
        temp =(temp-8)<<8;
        temp-=8;
        xCS_Dis();
        while(!DREQ);
        SPI_SendByte(VS_Write);
        SPI_SendByte(VS_Vol);
        SPI_SendByte(temp>>8);
        SPI_SendByte(temp);
        xCS_Dis();
}

//---------------------------------------------------
//        函数名:VS1003b_Reset
//        功  能:VS1003B 软复位
//        参  数:
//        返回值:
//---------------------------------------------------
void VS1003b_Reset()
{
        xDCS_Dis();
        xCS_En();
        while(!DREQ);                        // 等待VS1003 就绪
        SPI_SendByte(VS_Write);
        SPI_SendByte(VS_Mode);
        SPI_SendByte(0x08);
        SPI_SendByte(0x04);
        xCS_Dis();
        delayms(5);                                // 延时需大于1.35ms
}

//---------------------------------------------------
//        函数名:VS1003b_init
//        功  能:VS1003B 初始化
//        参  数:
//        返回值:
//---------------------------------------------------

void VS1003b_init()
{
        xRST_En();                        // 硬件复位
        xCS_Dis();
        xDCS_Dis();
        delayms(5);
        xRST_Dis();
        delayms(20);                //** 延时不可少于1ms **//

        xCS_En();
        while(!DREQ);                                //等待VS1003 就绪
        SPI_SendByte(VS_Write);
        SPI_SendByte(VS_Clk);
        SPI_SendByte(0xE0);                        //0x9800
        SPI_SendByte(0x00);
        SPI_speed=0x05;                                // MCU VS1003b_SPI CLK
        delayms(2);
        while(!DREQ);
        SPI_SendByte(VS_Write);
        SPI_SendByte(VS_Audata);
        SPI_SendByte(0xBB);                        //采样率48k,立体声
        SPI_SendByte(0x81);
        while(!DREQ);
        SPI_SendByte(VS_Write);
        SPI_SendByte(VS_Bass);
        SPI_SendByte(0x00);                        //设置重低音
        SPI_SendByte(0xF6);
        while(!DREQ);
        SPI_SendByte(VS_Write);
        SPI_SendByte(VS_Vol);                //设置音量
        SPI_SendByte(0x80);                        // L-CH
        SPI_SendByte(0x80);                        // R-CH
        xCS_Dis();
//        VS1003b_Reset();

/*        while(!DREQ);
        SPI_SendByte(0x00);                        // send 4 bytes , Enabled SPI Bus
        SPI_SendByte(0x00);
        SPI_SendByte(0x00);
        SPI_SendByte(0x00);*/
}



//-----------------------------------------------------------
//        End of File
//-----------------------------------------------------------

出0入0汤圆

 楼主| 发表于 2008-7-12 11:32:12 | 显示全部楼层
非常感谢hn_ny_dxs 夏风大哥的代码,我先测试一下。。。

出0入0汤圆

 楼主| 发表于 2008-7-12 11:36:40 | 显示全部楼层
有点不同,我是用GPIO来模拟SPI接口的

出0入0汤圆

 楼主| 发表于 2008-7-12 16:47:35 | 显示全部楼层
终于可以啦,原因是我写的us延时函数当成ms延时函数用了。由于我的控制时序里面没有用到ms的延时,所以读写寄存器正常,就是正弦测试函数才用到ms延时函数。所以就出问题了。。。。晕啊!

#define CLOCK_CYCLE                5

void delay_ns(Uint16 count)       
{
        count=count/CLOCK_CYCLE;
        do
        {
                _nop();
        }while(count--);
}

void delay_ms(Uint16 count)        //这个应该是delay_us(Uint16 count)函数才对的,
                                //我晕,当时脑袋肯定想美女去了。。。。。
{
        Uint32 temp_cnt=count*1000/CLOCK_CYCLE;
        do
        {
                _nop();
        }while(temp_cnt--);       
}


这样,我使用delay_ms的时候其实是delay_us,时间缩了一千倍,所以在正弦测试的时候,输入测试系列后,等待了100us就退出了,声音当然是很急促的“嗟”一声了。

唉---------------------------------这个东西又搞了一天。

出0入0汤圆

发表于 2008-7-12 17:57:00 | 显示全部楼层
程序移植过程中的正常现象:)

出0入0汤圆

 楼主| 发表于 2008-7-12 18:13:52 | 显示全部楼层
谢谢hn_ny_dxs 夏风大哥的热心帮忙啦,哈哈!!

出0入0汤圆

发表于 2008-7-12 18:26:34 | 显示全部楼层
DSP好玩吗?以后有机会了向你请教:)

出0入0汤圆

 楼主| 发表于 2008-7-12 18:41:39 | 显示全部楼层
哈哈,请教不敢当,只要小弟有能力帮忙的,定尽力。我也是因工作原因,接触一段时间,自己慢慢学。DSP相对单片机来说,是好玩点,快啊,哈哈。不过又难一些。多了一些memory配置,还要bootload程序,万事开头难啊!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-14 04:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表