[Kinetis] KL26的ADC+DMA问题

[复制链接]
1422|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的标志,或者更新 ...

是的,只要转换完成之后,你就可以重新装载了。
598330983 发表于 2015-7-3 17:15 | 显示全部楼层
转换需要时间的,判断一下,
 楼主| 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 ;
不知道是不是这样,感觉不是很对劲
309030106 发表于 2015-7-3 20:02 | 显示全部楼层
需要重载BCR的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

56

帖子

1

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