打印
[Kinetis]

KL26的ADC+DMA问题

[复制链接]
1056|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lhaven|  楼主 | 2015-7-3 12:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      请问版主,用KL26的DMA来转移ADC采样的值,所有参数都设置好,使能DMA后,为什么只能传输一次,而不能像STM32那样,使能后,DMA就一直都在传输新的数据到buff呢,一定要在主函数或者中断什么的,再次触发DMA传输吗,有没有什么办法可以让DMA一直循环呢

相关帖子

沙发
FSL_TICS_ZJJ| | 2015-7-3 13:03 | 只看该作者
楼主你好!
KL系列的DAM正如这个帖子所说:https://bbs.21ic.com/icview-869687-2-1.html
需要重载BCR的,但是K系列的就有一只循环的功能,KL需要中断重载。

使用特权

评论回复
板凳
lhaven|  楼主 | 2015-7-3 14:19 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-7-3 13:03
楼主你好!
KL系列的DAM正如这个帖子所说:https://bbs.21ic.com/icview-869687-2-1.html
需要重载BCR的,但 ...

感谢回复,那我要用ADC的新的数据之前,是不是需要 在下面那个函数中 重新查询一次COCO的标志,或者更新一下  目标地址,然后再从目标地址取出数据,这样就是新的数据了,是吗?
if((DMA_DSR_BCR(n) & DMA_DSR_BCR_DONE_MASK)== DMA_DSR_BCR_DONE_MASK)
          {
               DMA_DSR_BCR(n) |= DMA_DSR_BCR_DONE_MASK;                  
               
               DMA_DAR(n) = D_ADDR;   //这里更新一下目标地址
               DMA_DSR_BCR(n) = DMA_DSR_BCR_BCR(SIZE);  //重载BCR
          }


因为我采集ADC的新数据是在定时中断里完成的,刚好就可以重新加载BCR,但是对时间要求比较高,采集32个数据,最好能在200us左右完成,上面程序这样加载可以吗,会不会花费很多时间 呢

使用特权

评论回复
地板
FSL_TICS_ZJJ| | 2015-7-3 15:20 | 只看该作者
lhaven 发表于 2015-7-3 14:19
感谢回复,那我要用ADC的新的数据之前,是不是需要 在下面那个函数中 重新查询一次COCO的标志,或者更新 ...

是的,只要转换完成之后,你就可以重新装载了。

使用特权

评论回复
5
598330983| | 2015-7-3 17:15 | 只看该作者
转换需要时间的,判断一下,

使用特权

评论回复
6
lhaven|  楼主 | 2015-7-3 17:17 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-7-3 15:20
是的,只要转换完成之后,你就可以重新装载了。

弄了一个下午,我发现只是重载BCR好像不行,还要在
if((DMA_DSR_BCR(n) & DMA_DSR_BCR_DONE_MASK) == DMA_DSR_BCR_DONE_MASK)这个判断之前,重新使能DMA,
DMAMUX0_CHCFG(n) |= DMAMUX_CHCFG_ENBL_MASK ;
不知道是不是这样,感觉不是很对劲

使用特权

评论回复
7
309030106| | 2015-7-3 20:02 | 只看该作者
需要重载BCR的

使用特权

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

本版积分规则

4

主题

56

帖子

1

粉丝