华芯微特开发论坛

 找回密码
 立即注册
搜索
热搜: SWM341 资料
查看: 70|回复: 3

SWM341 DMA scatter gather 模式 长度配置错误位错误,无法消除

[复制链接]

4

主题

13

帖子

50

积分

注册会员

Rank: 2

积分
50
发表于 2024-4-28 14:59:33 | 显示全部楼层 |阅读模式
本帖最后由 thtfcccj 于 2024-4-28 15:00 编辑

正在做的项目, 涉及到MP3解码播放, 使用DA+TIMR+DMA模式输出音频信号,
使用乒乓机制,即DA输出DMA缓冲这一半时,MP3解码填充另一半信息,具体为:
   使用一个固定的缓存区存放DA要输出的数据流,在DA开始传输另一半时产生中断,中断里把MP3数据解码至这一半,循环往复直至MP3解码播放完成。

但在只要配置成 scatter gather 模式,这一位就一直为1即错误,无论怎么更改都不行,而且一直进中断退不出来:

请问此问题怎么解决?
20240428145826.png
回复

使用道具 举报

13

主题

47

帖子

394

积分

超级版主

Rank: 8Rank: 8

积分
394
发表于 2024-4-30 13:37:54 | 显示全部楼层

可以参考下 SWM341_Lib\I2S\MasterTX_SlaveRX 例程,,这个例程用到了 DMA ping-pong 功能。。
回复

使用道具 举报

4

主题

13

帖子

50

积分

注册会员

Rank: 2

积分
50
 楼主| 发表于 2024-5-6 09:52:50 | 显示全部楼层
没往下纠,半中断改使用一个定时器解决!
回复

使用道具 举报

4

主题

13

帖子

50

积分

注册会员

Rank: 2

积分
50
 楼主| 发表于 2024-5-6 10:05:24 | 显示全部楼层
避免踩坑:
  看了一下 SWM341_Lib\I2S\MasterTX_SlaveRX 例程中的main.c:  我的这个问题可能出在这个位置的这个配置上:
        DMA_initStruct.SrcAddrInc = 0;     ----》我在这里= 2了,直观地认为源地址是分段的,所以配置了源是 Scatter-Gather 模式。
        DMA_initStruct.DstAddr = (uint32_t)RX_Buffer;
        DMA_initStruct.DstAddrInc = 2;                // Scatter-Gather 模式  ----》我在这里= 0了,直观地认为目的地址是固定不变的的,所以配置成0。

上述待验证!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|华芯微特开发论坛

GMT+8, 2024-5-20 18:17 , Processed in 0.037038 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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