请选择 进入手机版 | 继续访问电脑版
查看: 1259|回复: 0

[原创] 【经验分享】frdm-k64 adc多路采集四连之第四连--一个问题分析

[复制链接]

该用户从未签到

648

主题

6301

帖子

0

超级版主

Rank: 8Rank: 8

积分
19546
最后登录
2024-3-28
发表于 2020-6-12 10:29:14 | 显示全部楼层 |阅读模式
在理解adc灵活dma扫描以后,再看这一连。
上一连中,如果我将EDMA_SetChannelLink中仅设置为minor link,major link不用,理论上应该获得相同结果

Minor link在每次minorloop结束产生一次链接
minor_loop.PNG
Major link在major loop结束产生一次链接
major_loop.PNG
如果我不用major link,只用minor link链接,应当是可以实现相同效果。所以注释掉EDMA_SetChannelLink(DMA0, DMAChannel_1, kEDMA_MajorLink, DMAChannel_0);
事实上这是运行结果图,最后一组数据没有打印出来。为什么呢?
abnormal.PNG
首先查看接受数据的buffer里面数据情况,发现里面12个数据都有
abnormal1.png
那么为什么没有打印出来。根据while里面判断语句if (g_Transfer_Done_ch0)可以知道,每次dma通道0传输完成,g_Transfer_Done_ch0为true就打印数据,既然最后一次没打印,那就说明dma通道0并没有传输完成,g_Transfer_Done_ch0为false。可是确实是12个数据都有了啊,按照通道0传输3个参数配置,然后dma通道1传输12个adc通道值。12/3能整除,应该刚好都传输完啊?问题就出现在这里。
需要注意的是第一次dma通道1传输的adc值,其中adc的配置不是由dma通道0传输过来的,而是直接配置的12通道。而dma通道0传输的配置是从通道30开始,通道次序是30,29,12。
我们的buffer接收的12个数据,通道顺序是
12 30 29 12 30 29  12 30 29  12 30 29
12通道不是dma传过来的,dma通道0顺序又是30,29,12,所以在dma通道1传完最后一个数据时,其实dma通道0才传了一个通道29配置,最后的12通道并没有传过去,所以dma通道0并没有完成传输,也就不会调用回调函数将dma通道0的g_Transfer_Done_ch0置1。所以靠major link再触发一次dma通道0,让dma通道0传完数据,触发回调,将g_Transfer_Done_ch0置1。


回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2024-3-29 05:14 , Processed in 0.100686 second(s), 20 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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