你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

i2s 和DMA问题

[复制链接]
klffnj 提问时间:2015-3-6 11:42 /
F4系列的官方例程有播放wave文件的例程,wave文件使用的是16bit双声道格式,dma传输时可以先左后右自动传输, 但是如果wave文件是单声道8bit的文件,怎么配置DMA呢?


收藏 评论14 发布时间:2015-3-6 11:42

举报

14个回答
arm8686 回答时间:2015-3-6 12:42:15
DMA 并没有先左后右吧?只是一种乒乓操作。
数据流里头是 左声道+右声道。

如果只有一个声道,DMA 还是一样的乒乓操作,不然码流就会断掉了,毕竟没有无限的 RAM 存储空间。
klffnj 回答时间:2015-3-6 12:55:38
arm8686 发表于 2015-3-6 12:42
DMA 并没有先左后右吧?只是一种乒乓操作。
数据流里头是 左声道+右声道。

你的意思是单声道wave文件播放时会丢失一半的数据。 或者说是本来只有一个通道的数据分配到两个通道里面去了。
arm8686 回答时间:2015-3-6 13:00:14
klffnj 发表于 2015-3-6 12:55
你的意思是单声道wave文件播放时会丢失一半的数据。 或者说是本来只有一个通道的数据分配到两个通道里面 ...

不是。
如果 DAC 是单通道的,那就连续地发给它一个声道的数据就可以。不会丢失数据。
如果 DAC 是双通道的,那其中空余的声道,随意填充个数据即可。
klffnj 回答时间:2015-3-6 13:24:45
arm8686 发表于 2015-3-6 13:00
不是。
如果 DAC 是单通道的,那就连续地发给它一个声道的数据就可以。不会丢失数据。
如果 DAC 是双通道 ...

哦, 可能是我没有说清楚,播放音频用的i2s总线, 我理解双通道的数据时分别发到WS为高和低的时候,但是在dma配置中并没有这些说明,所以碰到单声道数据会丢。
arm8686 回答时间:2015-3-6 13:34:02
klffnj 发表于 2015-3-6 13:24
哦, 可能是我没有说清楚,播放音频用的i2s总线, 我理解双通道的数据时分别发到WS为高和低的时候,但是 ...

跟 DMA 没有关系的。

I2S 播放音频,一般就是使用 DMA 的乒乓方式。

按照你的系统,8bit 单声道,就需要给 DAC 16bit 的数据,其中有 8bit 是填充的。
如果将 8bit 的数据连续存放在 RAM 里头,当然会丢失一半。因为被传送到一个不使用的声道里头去了。
klffnj 回答时间:2015-3-6 14:57:08
arm8686 发表于 2015-3-6 13:34
跟 DMA 没有关系的。

I2S 播放音频,一般就是使用 DMA 的乒乓方式。

标准的pcm文件 8bit数据,就是连续存放的,读到ram的时候也应该是连续的。用DMA可以把RAM和DAC的位数全部配置为8Bit,着样就不存在填充问题了, 只是i2s每一个ws的周期需要两个数据,如果WS为高时,取RAM【0】中的数据,那么WS为低时回去取RAM【1】中的数据,显然这是不对的。

除非有一种模式可以这样,RAM1 中存真实数据,RAM2为空,WS为高时取RAM1中数据,WS为低时取RAM2中数据对应索引值中的数据,  难道你说的乒乓模式就是这样的吗
arm8686 回答时间:2015-3-6 15:25:44
本帖最后由 arm8686 于 2015-3-6 15:29 编辑
klffnj 发表于 2015-3-6 14:57
标准的pcm文件 8bit数据,就是连续存放的,读到ram的时候也应该是连续的。用DMA可以把RAM和DAC的位数全部 ...

PCM 8 bit数据连续存放,这没有关系。
转换一下,例如左移 8 位。这样在 RAM 就会是 16 bit 的数据。
再通过 I2S 传输出去。这时候,就只有一个通道有声音了。

不要想着左取一个字节,右取一个字节。

/*---------------------------------------------------------------------------*/

RAM1:左右 左右 左右 …… (例如共 4k 字节)RAM2:左右 左右 左右 …… (例如共 4k 字节)

先准备好 RAM1 的数据,启动 DMA 往 I2S 传数据(就是所谓的播放)。
接着该准备好 RAM2 里面的数据了,不然播放完 RAM1 的数据,就断了码流。

当 RAM1 播放完之后,触发 DMA 的中断。此时切换 DMA 通道,指向 RAM2 的首地址。
在播放 RAM2 数据的时候,准备 RAM1 的数据。

这就是所谓的 DMA 乒乓方式。

arm8686 回答时间:2015-3-6 15:31:08
不要钻到 原始数据的格式 这个牛角尖里头去。
要想着 DAC 需要什么数据。
MouseCat 回答时间:2015-3-6 16:29:51
还没涉及到I2S,MARK一下
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版