查看: 2096|回复: 0

【赚周年币】技术帖Week2-Day6——LPC824 Lite之13、DMA memory测试

[复制链接]
  • TA的每日心情
    开心
    20 小时前
  • 签到天数: 3750 天

    连续签到: 76 天

    [LV.Master]伴坛终老

    发表于 2017-1-13 02:34:08 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 toofree 于 2017-1-19 03:28 编辑

            【赚周年币】技术帖Week2-Day6——LPC824 Lite之13、DMA memory测试

            在单线程MCU使用中,DMA用得好,可以大大提高效率。今天就测试一下LPC824 的DMA memory传输方式。
            使用YL-LPC824光盘资料.rar中程序模板,工程“YL-LPC824光盘资料\SDK\peri_example\dma\dma_mem\project_dma_mem.uvoptx”。直接打开工程,编译程序。
             傲游截图20170113015510.jpg

            打开串口调试助手,波特率115200,全速跑程序。
             傲游截图20170113014235.jpg

             Test transfer size is 4000 blocks @ 1024 bytes each
            测试传输大小:4000块 * 1024字节        
            Total test size = 4096000 bytes
            总共大小4096000,4M字节,还是比较大的。

            三个测试过程:
            Starting memmove test        Starting memcpy test
            Starting DMA test

            所用时分别为:
            Transfer time with memmove (mS) = 2068        Transfer time with memcpy (mS) = 2068
            Transfer time with DMA (mS) = 1778
            
            可以看出DMA方式传输是最快的。我们来分析一下测试程序。
            40行到48行为设置传输大小的宏定义,及开辟缓存,因为MCU内存有限,不可能一次开辟4M字节,所以采用开辟1024小缓存,分多次传输数据。51行定义DMA传输结束标志信号。
             傲游截图20170113020348.jpg
            
            60到95行为每次传输装载数据初始化算法和完成后校验算法,知道功能就行,先不关注它。
             傲游截图20170113020724.jpg

            105到124行,DMA中断处理函数,只要知道DMA传完成后,会置一下标准变量就可以了。
             傲游截图20170113021102.jpg

            下面就来到了main()函数。
            130到148定义内部变量。SystemCoreClockUpdate();初始化系统时钟;Board_Init();板级初始化,包括串口,IO,LED等,有兴趣可以进去看看。StopWatch_Init();初始化stopwatch,实际用了MRT定时器1。
             傲游截图20170113021356.jpg

            150行到159行,为过程1 memmove 传输测试,ticks[0]记录传输用时间。
           傲游截图20170113021909.jpg

            161到170行,为过程2 memcpy 传输测试,ticks[1]记录传输用时间。
             傲游截图20170113022035.jpg

            172到196行,是今天的重点,DMA初始化,并开启DMA中断。
             傲游截图20170113022228.jpg
            
            198到121行,为过程3 DMA 传输测试,ticks[2]记录传输用时间。
             傲游截图20170113022523.jpg

            可以看到,三次测试过程中用时较长的有几条函数,modifyData()、verifyData()、memmove()、memcpy()。
            在三次传输过程中,都有modifyData()、verifyData()这两条,那么时间相抵;根据测试情况下,memmove()和memcpy()用时相同。假如modifyData()、verifyData()、memmove()这三条函数大致用时相同的话,那么我们大致可以推算出DMA传输用时长度。
            2068 / 3 = 689.3ms
            那么DMA传输用时为:1778 - 689.3*2 = 400ms
            可以看出,DMA传输效率之高,速度之快,只有软件传输的一半时间。DMA应该是省去了最底层的for循环了吧。

            好了,就扯到这吧。大家多多用DMA吧,这是个好东西。
            


    评分

    参与人数 2 +83 收起 理由
    EEboard爱板网 + 63 3周发帖养成记 奖励
    loveeeboard + 20

    查看全部评分

    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 21:25 , Processed in 0.126178 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.