打印

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

[复制链接]
5026|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 | 只看该作者
很实用 支持一下

使用特权

评论回复
5
heibaiyinjiag| | 2014-9-30 17:44 | 只看该作者
友情帮顶

使用特权

评论回复
6
以马内利3005|  楼主 | 2014-9-30 22:26 | 只看该作者
sishangcine 发表于 2014-9-30 17:38
消灭零回复 赞一个

谢谢!!

使用特权

评论回复
7
以马内利3005|  楼主 | 2014-9-30 22:26 | 只看该作者
heibaiyinjiag 发表于 2014-9-30 17:39
很实用 支持一下

谢谢捧场!

使用特权

评论回复
8
以马内利3005|  楼主 | 2014-9-30 22:27 | 只看该作者
heibaiyinjiag 发表于 2014-9-30 17:44
友情帮顶

使用特权

评论回复
9
zhangmangui| | 2014-10-7 19:27 | 只看该作者
感谢楼主的分享   

使用特权

评论回复
10
tianli1980| | 2014-10-10 13:07 | 只看该作者
不错,值得学习的方法,根据来配置,实现了USART+DMA的接收,串口助手调试通过,感谢分享。

使用特权

评论回复
11
以马内利3005|  楼主 | 2014-10-12 22:58 | 只看该作者
zhangmangui 发表于 2014-10-7 19:27
感谢楼主的分享

嘿嘿,共同进步!

使用特权

评论回复
12
以马内利3005|  楼主 | 2014-10-12 22:58 | 只看该作者
tianli1980 发表于 2014-10-10 13:07
不错,值得学习的方法,根据来配置,实现了USART+DMA的接收,串口助手调试通过,感谢分享。 ...

使用特权

评论回复
13
zhaironghui| | 2015-1-5 15:28 | 只看该作者
本帖最后由 zhaironghui 于 2015-1-5 15:30 编辑

遇到了同样的问题,卡了好长时间了。。。。求交流,非常感谢
QQ:761475745

使用特权

评论回复
14
以马内利3005|  楼主 | 2015-1-10 10:10 | 只看该作者
zhaironghui 发表于 2015-1-5 15:28
遇到了同样的问题,卡了好长时间了。。。。求交流,非常感谢
QQ:761475745

这个帖子解决了你的问题了吗?

使用特权

评论回复
15
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);处。

使用特权

评论回复
16
jiajs| | 2015-1-13 22:41 | 只看该作者
简单来说,关闭McBSP,启动DMA,启动McBSP

使用特权

评论回复
17
以马内利3005|  楼主 | 2015-1-13 23:49 | 只看该作者
zhaironghui 发表于 2015-1-13 20:52
不好意思,这么晚才回复,暂时还没有解决,所遇到的问题类似,我们是用DSP 以DMA方式读取异步 FIFO(定义 ...

看看我这个帖子,是不是你的问题 https://bbs.21ic.com/icview-820022-1-1.html

使用特权

评论回复
18
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)处。没有再进第二次中断

使用特权

评论回复
19
以马内利3005|  楼主 | 2015-1-15 10:28 | 只看该作者
zhaironghui 发表于 2015-1-14 09:57
问题很像,但是我已经在DMA通道中断函数中加了DMA_RGETH(hDma,DMACSR);这句,并能在第一次进通道中断 ...

设置REPEAT=1,或者每次再中断里设置一次ENDPROG=1

使用特权

评论回复
20
zhaironghui| | 2015-1-15 11:47 | 只看该作者
我模拟了从DARAM 到 DARAM 的DMA方式的数据搬移(为便于观察,在通道中断中用正弦波做的数据源,正余弦交替),中断中加了DMA_RGETH(hDma,DMACSR);和 DMA_FSETH(myhDma,DMACCR,ENDPROG,1);这两句,结果可以,实现正余弦的交替 传输。但接到了实际电路上就只能进一次中断了,不明白什么原因

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

18

主题

272

帖子

14

粉丝