查看: 284|回复: 0

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

[复制链接]

24

主题

0

好友

4515

积分

状元

Rank: 6Rank: 6

  • TA的每日心情
    开心
    22 小时前
  • 签到天数: 1342 天

    连续签到: 52 天

    [LV.10]以坛为家III

    爱板会员勋章 活跃会员勋章 发帖机器勋章 在线达人勋章

    发表于 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 人评分 收起 理由
    EEboard爱板网 + 63 3周发帖养成记 奖励
    loveeeboard + 20

    总评分:  + 83   查看全部评分

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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

    手机版|爱板网 |网站地图  

    GMT+8, 2017-7-28 22:47 , Processed in 0.201672 second(s), 12 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部