Board logo

标题: 『急问』falsh播放wav音频和SD卡播放的区别 [打印本页]

作者: zengxuan    时间: 2007-3-23 08:54     标题: 『急问』falsh播放wav音频和SD卡播放的区别

我用的是8bit  CFI Flash,地址是0x00800000开始,DAC是16~32位都支持的音频DAC

下面是从Flash播wav文件的主程序:

for(i=0x00800000;i<0x008FE1C4;i+=2)
     {      
       if(!IORD(AUD_FULL_BASE,0))
        {      Tmp1=IORD(i,0);   //从Flash地址直接读数据
               IOWR(AUDIO_0_BASE,0,Tmp1);//将数据送到DA
         } 

}

 我不明白的是为什么每次从flash取数后,地址的偏移量i是加2,请大侠解释一下吧!          

下面是SD卡播放wav音频的主要程序:

    BYTE Buffer[512]={0};

   SD_read_lba(Buffer,j,1);  //从SD卡取数据放到buffer数组中
    while(i<512)
    {
      if(!IORD(AUD_FULL_BASE,0))
      {
        Tmp1=(Buffer[i+1]<<8)|Buffer; //请问这步是不是组成16bit数据?
        IOWR(AUDIO_0_BASE,0,Tmp1);
        i+=2;
      }
    }

[此贴子已经被作者于2007-3-23 10:09:48编辑过]


作者: caopengly    时间: 2007-3-24 16:08

1。“ 我不明白的是为什么每次从flash取数后,地址的偏移量i是加2,请大侠解释一下吧!  ”

因为你说+1和+2读出来的值相同,我觉得有可能是你的flash的硬件的最低位有问题,二进制的最低位为0或1 都指向一个地址或存放的相同的数。

还有就是你可以使用

IORD_16DIRECT(BASE, OFFSET) 

IORD_8DIRECT(BASE, OFFSET)

函数,来代替IORD,因为可以说明读入的是多少位。

2。“Tmp1=(Buffer[i+1]<<8)|Buffer; //请问这步是不是组成16bit数据?”

是的。


作者: avery095    时间: 2008-5-18 18:32

我现在在做这个,也不太懂,可以交流下啊

那下面的那个程序是不是直接从SD卡读取,然后通过WM8731播放?

还是先从SD卡读取到FLASH,再从FLASH读取,通过WM8731播放?

[此贴子已经被作者于2008-5-18 18:35:08编辑过]


作者: kzw    时间: 2008-5-19 10:19

怎么读取随便楼主,只要解码速度能跟得上,从哪儿读取都没有什么问题。
作者: avery095    时间: 2008-5-21 09:54

BYTE Buffer[512]={0};

SD_read_lba(Buffer,j,1); //从SD卡取数据放到buffer数组中
while(i<512)
{
if(!IORD(AUD_FULL_BASE,0))
{
Tmp1=(Buffer[i+1]<<8)|Buffer; //请问这步是不是组成16bit数据?
IOWR(AUDIO_0_BASE,0,Tmp1);
i+=2;
}
}

请问这Buffer数组是在flash中的吗?


作者: kzw    时间: 2008-5-21 20:43

楼主,这个数组肯定是在ram中的,这个是数据空间。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0