我用的是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数据?”
是的。
我现在在做这个,也不太懂,可以交流下啊
那下面的那个程序是不是直接从SD卡读取,然后通过WM8731播放?
还是先从SD卡读取到FLASH,再从FLASH读取,通过WM8731播放?
[此贴子已经被作者于2008-5-18 18:35:08编辑过]
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中的吗?
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |