查看: 2429|回复: 18

[求助] MKV30的ADC DMA模式能否不使用回调函数进行数据采集

[复制链接]
  • TA的每日心情
    无聊
    2021-1-15 10:56
  • 签到天数: 39 天

    [LV.5]常住居民I

    21

    主题

    116

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    436
    最后登录
    2021-10-9
    发表于 2020-11-30 16:42:27 | 显示全部楼层 |阅读模式
    现在采集ADC的电压都完成了,但是存在一个问题,即使采用了DMA,因为每次采集都要进入回调函数,很浪费时间,我的项目对时间要求油很高,不知有没有什么办法不进入回调就可以实现连续采样,以节省CPU
    我知道答案 目前已有18人回答
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    20017
    最后登录
    2024-4-25
    发表于 2020-11-30 17:03:43 | 显示全部楼层
    回调函数其实就是edma中断调的,你找到中断函数,自己在里面改
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-1-15 10:56
  • 签到天数: 39 天

    [LV.5]常住居民I

    21

    主题

    116

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    436
    最后登录
    2021-10-9
     楼主| 发表于 2020-12-1 10:49:03 | 显示全部楼层
    小恩GG 发表于 2020-11-30 17:03
    回调函数其实就是edma中断调的,你找到中断函数,自己在里面改

    edma的中断函数很容易就找到了,但是如果屏蔽中断对回调的处理,ADC采样就无法实现了。
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    20017
    最后登录
    2024-4-25
    发表于 2020-12-1 14:04:25 | 显示全部楼层
    鹰宫璞爱惟 发表于 2020-12-1 10:49
    edma的中断函数很容易就找到了,但是如果屏蔽中断对回调的处理,ADC采样就无法实现了。 ...

    把回调里的代码,放中断里,但这玩意儿能提高多少速度?回调函数能浪费多少时间?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-1-15 10:56
  • 签到天数: 39 天

    [LV.5]常住居民I

    21

    主题

    116

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    436
    最后登录
    2021-10-9
     楼主| 发表于 2020-12-1 14:58:43 | 显示全部楼层
    我是100us来一个串口中断,然后就要把ADC的值送出去,我就用DMA来一直获取ADC的值,但是好几个中断数据都不更新,如果把串口的中断时间间隔改为1MS。就不会有问题。一个回调函数的跳转不费时间,但是进入回调函数后做的事情很耽误时间,可能是您理解错我的意思了,我的意思不是调用回调函数这个事情浪费时间,是回调函数里面一些关于DMA的操作很浪费时间,不知能否优化,回调函数里面要清除中断,配置EDMA ,再使能传输,这个过程很浪费时间,有没有什么办法在系统启动之后就一直读ADC。
    微信图片_20201201145507.png
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    20017
    最后登录
    2024-4-25
    发表于 2020-12-1 15:46:47 | 显示全部楼层
    本帖最后由 小恩GG 于 2020-12-1 16:31 编辑
    鹰宫璞爱惟 发表于 2020-12-1 14:58
    我是100us来一个串口中断,然后就要把ADC的值送出去,我就用DMA来一直获取ADC的值,但是好几个中断数据都不 ...

    你可以串口中断来了再开启edma传输,获取结果,现在你这么快去读,edma可能确实没法及时更新数据。你还可以看看这个例程,有dma传输完修正。https://www.nxpic.org.cn/module/forum/thread-620274-1-1.html
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-1-15 10:56
  • 签到天数: 39 天

    [LV.5]常住居民I

    21

    主题

    116

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    436
    最后登录
    2021-10-9
     楼主| 发表于 2020-12-1 16:44:12 | 显示全部楼层
    小恩GG 发表于 2020-12-1 15:46
    你可以串口中断来了再开启edma传输,获取结果,现在你这么快去读,edma可能确实没法及时更新数据。你还可 ...

    我把EDMA_SetCallback()屏蔽了,然后在每一次中断的到来开启EDMA,会造成程序卡死在EDMA_StartTransfer_For_ADC(&g_EDMA_Handle);里面。 微信图片_20201201164113.png
    如果不用DMA,直接获取ADC的值,同样会造成数据无法及时读取,4个中断才能相应一个。

    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    20017
    最后登录
    2024-4-25
    发表于 2020-12-2 09:41:47 | 显示全部楼层
    鹰宫璞爱惟 发表于 2020-12-1 16:44
    我把EDMA_SetCallback()屏蔽了,然后在每一次中断的到来开启EDMA,会造成程序卡死在EDMA_StartTransfer ...

    开始传时候,dma的标志位请了吗
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-1-15 10:56
  • 签到天数: 39 天

    [LV.5]常住居民I

    21

    主题

    116

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    436
    最后登录
    2021-10-9
     楼主| 发表于 2020-12-2 11:48:44 | 显示全部楼层
    微信图片_20201202114811.png
    清楚了还是不行。
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    20017
    最后登录
    2024-4-25
    发表于 2020-12-2 14:46:03 | 显示全部楼层

    改成,接收串口发的指令以后,检查dma完成标志,完成发adc数据给串口,不完成就等待。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-26 06:09 , Processed in 0.156625 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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