野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 26524|回复: 2

大家来讨论下DMA单次发送吧

[复制链接]
发表于 2015-10-22 20:44:55 | 显示全部楼层 |阅读模式
在火哥的例程里DMA的传输方式都是设置成循环传输而不是单次传输,参看官方3.5库里面DMA单次传输都用在串口,IIC,SPI,FSMC总线上,循环模式用在DAC,ADC,TIM上。循环模式下个人理解是不管你愿不愿意只要使能了DMA他就按你的设定一直传输,直到你关闭了DMA。在循环模式下尝试过检测DMA完成标志然后替换BUFF数据或关闭DMA,OK。但是单次模式下只发送一个数据就终止了,现在想把DMA用在IIC和串口传输单次数据上,参看官网例程,附图在下。也是检测DMA完成标志位,但没清除标志位。这样好处是把数据传输交给DMA不受中断影响(特别是IIC这个挨千刀的玩意,数据传输过程中来一个中断就容易BUS,火哥的硬件IIC写的6050读原始数据调的我是泪流满面啊),不过没感觉到节省了时间(CPU在while等待DMA传输完成)。
现打算把DMA加在IIC读取数据上,个人表示看完了DMA库文件也没脑懂怎么玩。单次传输在串口上试过,配置单次传输,传输完成后清除完成标志后重新配置BUFF,请求DMA,无效!循环传输,有效,就跟吃了炫迈一样,呵呵。现在的思路是DMA上有个DMA传输完成中断,在检测到传输完成中断后清除完成标志位并关闭DMA,等到再次发送数据的时候再打开,这里有个疑问,我配置了DMA完成中断后是否需要配置抢占式优先级呢?之前失败过,配置DMA全局中断后进行上述操作,挂了。DMA单次传输已经不知道怎么下手了,循环传输的ADC,DAC完全没有任何疑问。
希望大家能交流交流,解决下DMA单次传输。
360反馈意见截图163509116793106.jpg
回复

使用道具 举报

发表于 2015-10-24 10:04:33 | 显示全部楼层
这个我没有搞过,我学习下先
回复 支持 反对

使用道具 举报

发表于 2015-10-29 22:37:30 | 显示全部楼层
单次传输无解,我当时也找过很多资料,好像找到了答案,但是忘记了,单次传输确实有问题,我是单次传输ADC,
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-7 04:01 , Processed in 0.037773 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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