查看: 2700|回复: 5

[STM32]双bufferDMA切换调试

[复制链接]

该用户从未签到

发表于 2014-5-26 21:59:47 | 显示全部楼层 |阅读模式
分享到:
本帖最后由 YoHo. 于 2014-5-26 22:01 编辑

双BUFFER DMA缓冲是经常用的数据缓冲方式
楼主在WAV播放器和ADC虚拟示波器中都使用过
但是WAV的效果一直有一点小瑕疵 猜测是在双buffer切换的时候开关DMA导致WAV播放出来有杂音
buffer设定比较小的 像只能播放10ms的时候 100hz的杂音听起来比较明显 当buffer比较大的时候 能连续播放0.1ms 10hz的杂音基本听不到 但是占用的内存十分大 单声道16位采样率 44100hz的WAV 双buffer要16K的内存 这十分的浪费

今天在调试的ADC虚拟示波器的时候 因为要加入新的功能差分采样 和原来单通道采样用的同一个buffer 但是数据由16位上升到32位 DMA数据长度变成了原来的1/2 楼主又不想多一个全局变量 就想试试其他的方法
然后看数据手册的时候发现了这个
QQ图片20140526214959.jpg
数据长度有明确的表明在DMA使能的时候不能进行配置
而下面的地址都没有提及
所以就产生了一种想法 DMA配置为循环模式 在DMA完成中断中不进行DMA开关 直接修改数据目的地址到下一个buffer
经过试验之后发现这个想法可行 但是有一点要注意 要保证在完成中断开始后立刻修改
让下个DMA循环的第一次触发正确的传到另一个buffer(当然你也可以尝试一下 我没有尝试过 但是想一下结果应该是会把数据又重写到第一个buffer的开头)

其他的双bufferDMA已经都改为这种模式 WAV播放器的缓存也缩小了 但是还没经过实验
实验结果和源码明天放上来
回复

使用道具 举报

  • TA的每日心情
    开心
    2021-7-16 10:04
  • 签到天数: 530 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-5-26 22:40:53 | 显示全部楼层
    顶一下,顺便学习   
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-8 15:51
  • 签到天数: 22 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2014-5-26 23:07:39 | 显示全部楼层
    顶,很给力的研究!
    一点小的建议:DAM在半满的时候也可以中断,这样不存在切换缓冲区,且中断时如果发信号量给任务去处理是不是会好。
    期待代码!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-9-23 05:09
  • 签到天数: 113 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2014-5-27 05:56:05 | 显示全部楼层
    谢谢楼主分享!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-12 10:32
  • 签到天数: 295 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2014-5-27 08:25:48 | 显示全部楼层
    顶一个~~~~~~~~~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-11-5 20:26
  • 签到天数: 262 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2014-5-27 13:00:44 | 显示全部楼层
    说的有理  赞一个
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-24 06:23 , Processed in 0.171638 second(s), 26 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.