在DMA中断中关闭DMA,程序中在启动DMA, DMA不工作的问题(转)

[复制链接]
5684|20
 楼主| 以马内利3005 发表于 2014-9-30 17:17 | 显示全部楼层 |阅读模式
McBSP接收的数据通过DMA搬运到内存中, 为什么在DMA中断中关闭DMA,程序中在启动DMA, DMA不工作?

     DMA完成搬运后就自动关闭了, 此时McBSP仍然处于RRDY=1, 因此,即使重新启动DMA也不会产生DMA中断.解决办法:在DMA中断中先关闭McBSP的接收器, 程序中先启动DMA,然后在启动McBSP的接收器;

评分

参与人数 1威望 +4 收起 理由
zhangmangui + 4 很给力!

查看全部评分

 楼主| 以马内利3005 发表于 2014-9-30 17:19 | 显示全部楼层
主要是注意一下,先启动DMA再启动MCBSP,这样DMA可以及时收到MCBSP的产生的中断,DMA才开工作。
sishangcine 发表于 2014-9-30 17:38 | 显示全部楼层
消灭零回复 赞一个
heibaiyinjiag 发表于 2014-9-30 17:39 | 显示全部楼层
很实用 支持一下
heibaiyinjiag 发表于 2014-9-30 17:44 | 显示全部楼层
友情帮顶
 楼主| 以马内利3005 发表于 2014-9-30 22:26 | 显示全部楼层
sishangcine 发表于 2014-9-30 17:38
消灭零回复 赞一个

谢谢!!
 楼主| 以马内利3005 发表于 2014-9-30 22:26 | 显示全部楼层
heibaiyinjiag 发表于 2014-9-30 17:39
很实用 支持一下

谢谢捧场!
 楼主| 以马内利3005 发表于 2014-9-30 22:27 | 显示全部楼层
heibaiyinjiag 发表于 2014-9-30 17:44
友情帮顶

zhangmangui 发表于 2014-10-7 19:27 | 显示全部楼层
感谢楼主的分享   
tianli1980 发表于 2014-10-10 13:07 | 显示全部楼层
不错,值得学习的方法,根据来配置,实现了USART+DMA的接收,串口助手调试通过,感谢分享。
 楼主| 以马内利3005 发表于 2014-10-12 22:58 | 显示全部楼层
zhangmangui 发表于 2014-10-7 19:27
感谢楼主的分享

嘿嘿,共同进步!
 楼主| 以马内利3005 发表于 2014-10-12 22:58 | 显示全部楼层
tianli1980 发表于 2014-10-10 13:07
不错,值得学习的方法,根据来配置,实现了USART+DMA的接收,串口助手调试通过,感谢分享。 ...

zhaironghui 发表于 2015-1-5 15:28 | 显示全部楼层
本帖最后由 zhaironghui 于 2015-1-5 15:30 编辑

遇到了同样的问题,卡了好长时间了。。。。求交流,非常感谢
QQ:761475745
 楼主| 以马内利3005 发表于 2015-1-10 10:10 | 显示全部楼层
zhaironghui 发表于 2015-1-5 15:28
遇到了同样的问题,卡了好长时间了。。。。求交流,非常感谢
QQ:761475745

这个帖子解决了你的问题了吗?
zhaironghui 发表于 2015-1-13 20:52 | 显示全部楼层
本帖最后由 zhaironghui 于 2015-1-13 20:55 编辑
以马内利3005 发表于 2015-1-10 10:10
这个帖子解决了你的问题了吗?


不好意思,这么晚才回复,暂时还没有解决,所遇到的问题类似,我们是用DSP 以DMA方式读取异步 FIFO(定义在CE1空间)中的数据,每读完一帧,触发一次DMA通道中断,进行数据处理;处理完后,再搬移下一帧数据并处理。但问题是采用了自动初始化方式后,只能进一次DMA中断,然后就停在了main函数的 while(1);处。
jiajs 发表于 2015-1-13 22:41 | 显示全部楼层
简单来说,关闭McBSP,启动DMA,启动McBSP
 楼主| 以马内利3005 发表于 2015-1-13 23:49 | 显示全部楼层
zhaironghui 发表于 2015-1-13 20:52
不好意思,这么晚才回复,暂时还没有解决,所遇到的问题类似,我们是用DSP 以DMA方式读取异步 FIFO(定义 ...

看看我这个帖子,是不是你的问题 https://bbs.21ic.com/icview-820022-1-1.html
zhaironghui 发表于 2015-1-14 09:57 | 显示全部楼层
以马内利3005 发表于 2015-1-13 23:49
看看我这个帖子,是不是你的问题 https://bbs.21ic.com/icview-820022-1-1.html


问题很像,但是我已经在DMA通道中断函数中加了DMA_RGETH(hDma,DMACSR);这句,并能在第一次进通道中断后观察到清除DMACSR的内容。DMA配置时设置了ENDPROG=1,REPEAT=0,AUTOINIT=1。但现象是,出了DMA通道中断后,就停在了while(1)处。没有再进第二次中断
 楼主| 以马内利3005 发表于 2015-1-15 10:28 | 显示全部楼层
zhaironghui 发表于 2015-1-14 09:57
问题很像,但是我已经在DMA通道中断函数中加了DMA_RGETH(hDma,DMACSR);这句,并能在第一次进通道中断 ...

设置REPEAT=1,或者每次再中断里设置一次ENDPROG=1
zhaironghui 发表于 2015-1-15 11:47 | 显示全部楼层
我模拟了从DARAM 到 DARAM 的DMA方式的数据搬移(为便于观察,在通道中断中用正弦波做的数据源,正余弦交替),中断中加了DMA_RGETH(hDma,DMACSR);和 DMA_FSETH(myhDma,DMACCR,ENDPROG,1);这两句,结果可以,实现正余弦的交替 传输。但接到了实际电路上就只能进一次中断了,不明白什么原因
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:十字架十字架,永是我的荣耀。

18

主题

271

帖子

14

粉丝
快速回复 在线客服 返回列表 返回顶部