OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 21366|回复: 1

原子:DMA在连续数据发送中判断数据是否发送完成,遇到问题!

[复制链接]

3

主题

3

帖子

0

精华

新手入门

积分
35
金钱
35
注册时间
2010-12-30
在线时间
0 小时
发表于 2011-1-25 13:52:04 | 显示全部楼层 |阅读模式
方法一:
 if(DMA1->ISR&(1<<13))//等待通道4传输完成
  {DMA1->IFCR|=1<<13;} //前一组数据发送完成,进入发送程序
else
  {return ;}    //前一组数据没有发送完,退出发送程序
  DMA发送数据...........

方法二:
pro=DMA1_Channel4->CNDTR;//得到当前还剩余多少个数据
 if(pro!=0)//等待通道4传输完成 
   {return ;}    //前一组数据没有发送完,退出发送程序
  DMA发送数据...........//前一组数据发送完成,进入发送程序



请问原子: 我的程序需要连续发送数据,发送速度比较快,所以在每次DMA发送时都需判断上一次数据是否已经发送完成,根据DMA例程序,我用DMA1发送完成标志位与剩余数据的多少,两种方法来判断上一次数据是否发送完成,可是两种判断结果都表示上一次数据没有发送完成,第一次也是这样,造成任何数据都没有发送出来,如果屏蔽判断,则程序能连续发送数据,只是前一组数据还没发送完,而第二组数据就开始发送了,造成每组数据的尾部丢失。 这是为什么,如何解决,

我后来自己试了下,发现第一次这两个条件一开机就表示数据没有发送完成,所以我暂时定义了一个变量来区别是不是刚开机,如果是刚开机,则不去判断,以后就只判断ISR标志,问题暂时是解决了,不知道还有没有什么好的办法.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-1-25 18:11:13 | 显示全部楼层
回复【楼主位】kangtianhong:
-------------------------------
有个办法,一开机,你在初始化函数里面清除掉当前的标志.从而让DMA回到真正的准备状态.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 13:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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