首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

『急问』falsh播放wav音频和SD卡播放的区别

『急问』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编辑过]

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数据?”

是的。

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

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

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

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

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

怎么读取随便楼主,只要解码速度能跟得上,从哪儿读取都没有什么问题。
在交流中前进,共同实现nios的应用。
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中的吗?

楼主,这个数组肯定是在ram中的,这个是数据空间。
在交流中前进,共同实现nios的应用。
返回列表