查看: 1960|回复: 3

[其他] 每天解决一个问题14天 :KL26Z实现ADC的DMA采集(KSDK1.2库)

[复制链接]
  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16701
    最后登录
    1970-1-1
    发表于 2015-9-7 20:56:11 | 显示全部楼层 |阅读模式
    本帖最后由 lkl0305 于 2015-9-7 21:03 编辑

    今天社区兑的OLED一个不小心摔烂了,心情极差,但还是要解决咱今天的问题
    今天解决了什么问题呢,还是在之前的基础上,实现了ADC16的DMA数据读取,给大家分享一下吧,环境还是KDS3.0+KSDK1.2实现。

    =========================================

    一、问题描述:
    在ADC数据比较多时,但又不想占用CPU的时间,可以采用DMA来实现。
    那KSDK库中都有哪些关于DMA的函数呢?又是如何使用呢?
    今天就以一个简单的任务来完成这个模块的学习吧。
    具体功能:                           
    1、LPTMR每1ms硬件触发ADC16一次                           YL-KL26Z中使用LPTMR周期触发ADC
    2、转换完成后ADC触发DMA接收一次数据
    3、DMA采集够1000个数据,即1秒,中断一次
    4、DMA切换一个数据缓冲区,进行下轮数据采集
    5、主函数检测到DMA完成后,从缓冲区将1000个数据求一次平均,通过串口输出

    二、解决办法:
    今天主要是解决DMA的问题,其它的问题之前都解决了。
    当然要用库来实现,就要学习了解库的相关函数了:
    1、首先是DMA的初始化函数,提供一个结构体变量,存储DMA的state数据
    3769.jpg
    2、DMA中断发生时,我们需要完成什么功能,要自己写DMA的处理函数,当然,这里要注册一个DMA中断的回调函数
    3770.jpg
    3、这个函数比较重要,是使用那个DMA通道,DMA的源等。
    3771.jpg
    4、下面的是DMA的释放函数
    3772.jpg
    5、当DMA配置好了,下面就是启动DMA,让其工作
    3773.jpg
    6、这里是停止DMA,与启动对应
    3774.jpg
    7、这个函数也比较重要的,对DMA的具体配置,比如使用的DMA源、DMA的目的、DMA的工作模式、DMA的传输数据量等等
    3775.jpg
    8、最后这个是DMA的中断处理函数,需要在中断中调用,在这个函数的结尾调用我们定义的回调函数函数。
    3776.jpg
    9、了解了相关的函数,就要根据参考手册去配置了
    DMA的ADC0的源是
    3766.jpg
    10、ADC的转换数据在ADC0RA,默认小端模式
    3767.jpg
    3768.jpg
    11、给出主要程序来看看吧:
    先是使用的变量定义,包括ADC的转换缓冲区,供DMA存储使用
    DMA工作中定义的一些状态标志:
    bool adcDmaFlag是DMA是否中断完成,即1000个数据采集完成
    bool adcBufferFlagDMA使用的数据缓冲区标志,0用地一个缓冲区,1用第2个缓冲区
    3778.jpg
    3780.jpg
    12、这是初始化DMA通道的程序,其实看起来也挺简单的
    3781.jpg
    下面是LPTMR1ms触发ADC的设置
    3782.jpg
    13、这是在主程序中根据DMA是否完成,来对1000个数据进行处理输出的程序
    3783.jpg
    14、最后是DMA的回调函数,实现对ADC的数据缓冲区切换
    3779.jpg

    三、感想与收获:
    1、KL26Z挺好的,感觉大部分工作都可以用硬件触发,再配合上DMA,可以节省CPU的很多时间。



    我知道答案 目前已有3人回答
    回复

    使用道具 举报

    该用户从未签到

    33

    主题

    292

    帖子

    0

    高级会员

    Rank: 4

    积分
    600
    最后登录
    2016-4-19
    发表于 2015-9-7 22:44:47 | 显示全部楼层
    占个沙发,为你点赞
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
    发表于 2015-9-7 23:51:14 | 显示全部楼层
    谢谢分享
    freescaleic.org.png
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16701
    最后登录
    1970-1-1
     楼主| 发表于 2015-9-8 10:07:15 | 显示全部楼层
    拉肚肚 发表于 2015-9-7 22:44
    占个沙发,为你点赞

    多谢支持哈
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-20 22:30 , Processed in 0.100455 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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