zoukankan      html  css  js  c++  java
  • DMA单元学习

    解决:

      dma应该只有一个硬件设备(固定映射),然后一个dma顺序完成不同的写任务。

      bram ctrl的映射地址是edit addr的那个,但是不能直接使,要用宏定义的那个数(后面多了一个U,我也不知道为啥)。找自己的bram ctrl的base宏定义是什么名字要去xparameters.h找,看名字找,好像没有表格。。。

      路径:bsp的include里面

    重要!记得类型转换成(int *)!!!!!!!!!!!!!!!!!!!!!!

    static int * Src = (int*)XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR;

      看源码有点乱,dma怎么实现的内外存?内存就是用数组表示就行,外存的地址怎么找的?

    1.好像是用DmaCmd的bd结构体先赋值?

      问题是dma怎么获得的外存地址?

        DmaCmd.ChanCtrl.SrcBurstSize = 4;//设置cmd参数
        DmaCmd.ChanCtrl.SrcBurstLen = 4;
        DmaCmd.ChanCtrl.SrcInc = 1;
        DmaCmd.ChanCtrl.DstBurstSize = 4;
        DmaCmd.ChanCtrl.DstBurstLen = 4;
        DmaCmd.ChanCtrl.DstInc = 1;
        DmaCmd.BD.SrcAddr = (u32) Src;//
        DmaCmd.BD.DstAddr = (u32) Dst;
        DmaCmd.BD.Length = DMA_LENGTH * sizeof(int);

      写dma的时候只初始化了src的值,dst清零了,两个空间都是在内存里:

                /* Initialize source 给源数据赋值*/
                for (Index = 0; Index < DMA_LENGTH; Index++)
                    Src[Index] = DMA_LENGTH - Index;
    
                /* Clear destination 清空结果数组*/
                for (Index = 0; Index < DMA_LENGTH; Index++)
                    Dst[Index] = 0;         

      dma回读的代码如下:

       int *Src;//局部变量
        int *Dst;
    
        Src = (int *)DmaCmd->BD.SrcAddr;//重新赋值?src不是全局变量吗?为什么不直接使?
        Dst = (int *)DmaCmd->BD.DstAddr;

    /* compare the src and dst buffer */ for (Index = 0; Index < DMA_LENGTH; Index++) { if ((Src[Index] != Dst[Index]) || (Dst[Index] != DMA_LENGTH - Index)) { Status = -XST_FAILURE; } }

     2.助教的示例中,将src的值变为板上地址?

    在示例工程的源代码中,修改第 121行代码 为
    static int * Src = (int*)XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR;
    即可实现内存与 PL缓存之间的数据传输。

      板上地址获得:看platform文件,直接抄就可以吗?是不是已经做了虚拟存储mma了?

    3.不用dma,直接往bram的地址写也可以,用自带的out函数

      https://blog.csdn.net/NarutoInspire/article/details/79401559?utm_source=blogxgwz7

  • 相关阅读:
    【js】实现输入框不允许输入某些特殊字符
    springboot集成druid实现数据源监控
    SpringBoot整合Druid并配置数据源监控
    SpringBoot集成Druid实现数据源管理和监控
    同一个catch字句中捕获多个java异常
    【JWT】JSON Web Token原理与实现
    行级锁实验:sql语句条件中的索引对锁的影响
    什么是乐观锁,什么是悲观锁,如何实现
    Linux命令与文件的查找which、wheris、locate、find
    vi编辑器永久设置行号、缩进
  • 原文地址:https://www.cnblogs.com/iwanna/p/10011717.html
Copyright © 2011-2022 走看看