zoukankan      html  css  js  c++  java
  • DAT模块简介

    转自:http://blog.sina.com.cn/s/blog_48fc29af0100ncdu.html

    DAT模块函数在DM642的EDMA操作中用于搬运数据。DAT_busy()函数用于检测EDMA数据传输过程是否已经结束,定义如下:Uint32 DAT_busy(Uint32 ID);

    DAT_busy()函数如果返回一个非零值,则表明数据传输过程(DAT_copy()操作或DAT_fill()操作)正在进行,其他操作需要等待,如果该函数返回零,则表明数据传输过程已经完成,可以执行其他操作了。DAT_busy()函数的使用方法如下:

    DAT_open(DAT_CHAANY,DAT_PRI_LOW,0);//打开数据传输通道

    Transferid=DAT_copy(src,dst,len);//数据copy,返回通道值

    while(DAT_busy(transferid));//等待数据copy过程完成

     

    DAT_copy()函数把源数据区中的数据转移到目标数据区中,它的定义如下:

    Uint32 DAT_copy(void *src , void *dst , Uint16 byteCnt);

    src表示源数据区起始地址指针,

    dst表示目标数据区起始指针,

    byteCnt为被搬运数据的长度,单位为字节,

    该函数返回数据搬运通道的ID值,供DAT_busy()等函数调用。

    DM642的L2的EDMA数据总线为64位,要求数据以8字节为单位进行对其,所以bateCnt应为8的倍数,byteCnt为0时,数据搬运的结果是随机的。函数的使用方法是:

     

     

    DAT_open()函数用于打开一个DAT通道,该函数具有如下的定义:

    Uint32 DAT_open(int chaNum, int priority, Uint32 flags);

    chaNum是为EDMA操作分配的数据通道,取DAT_CHAANY、DAT_CHA0、DAT_CHA1、DAT_CHA2、DAT_CHA3中的一个,priority变量规定了该通道的优先级,priority取DAT_PRI_LOW(低优先级)、DAT_PRI_HIGH(高优先级)中的一个,

    flags为标志位,明确数据操作的方式,如一维数据操作、二维数据操作等,对于二维数据操作flags应为DAT_OPEN_2D。

    与DAT_open()函数想对应的是DAT_close()函数,DAT_close()函数用于关闭已打开的DAT通道。

     

     

     

     


    CSLAPI int DAT_open(int chaNum, int priority, Uint32 flags);
    CSLAPI void DAT_close();

    CSLAPI Uint32 DAT_copy(void *src , void *dst , Uint16 byteCnt);
    CSLAPI Uint32 DAT_fill(void *dst , Uint16 byteCnt, Uint32 *value);
    CSLAPI void   DAT_wait(Uint32 id);
    CSLAPI int    DAT_busy(Uint32 id);

    CSLAPI Uint32 DAT_copy2d(Uint32 type, void *src, void *dst, Uint16 lineLen, Uint16 lineCnt, Uint16 linePitch);


    IDECL void DAT_setPriority(int priority);



    DAT_open         Opens the DAT module

    ●函数    Uint32   DAT_open(

                                int chaNum,

                               int priority, 优先级

                                       Uint32 flags

                            );

    ●参数        chaNum  指定分配那个DMA通道,必须是下面其中之一:

    DAT_CHAANY

    DAT_CHA0

    DAT_CHA1

    DAT_CHA2

    DAT_CHA3

    priority 指定DMA通道的优先级必须是下面其中之一

    DAT_PRI_LOW

    DAT_PRI_HIGH

    flags   各种各样的打开标志

    DAT_OPEN_2D

    ●返回值      success   如果失败返回0,如果成功返回非零值,失败的原因如下:

     DAT模块已经打开,

    需要的资源没有被分派。

    ●描述             

    这个函数打开DAT模块,而且必须在调用其它DAT API 函数之前被调用,

    ChaNum 参数指定了哪个DMA通道被DAT模块单独的打开,对于带有EDMA的设备,ChaNum 参数被忽略,原因是快速使用的DMA并不具有一个和它匹配的通道,对具有DMA的设备,ChaNum指定了将要使用哪个DMA通道,

     DAT_PRI_LOW设置DMA通道的CPU优先级 DAT_PRI_HIGH 设置DMA通道的DMA优先级,DAT_PRI_LOW设置 LOW priority ,DAT_PRI_HIGH 设置HIGH priority,一旦 DAT 模块被打开,任何被分配的资源,例如一个DMA通道,仍然被分配,你可以调用 DAT_close() 来释放这些资源,如果,准备通过DAT_copy2d 来进行2Dde传输, DAT_OPEN_2D 标志必须被指定,对具有DMA接口的设备指定这个标志, 将要导致一个全局重载计数寄存器和一个全局索引寄存器的分配这些全局寄存器在调用DAT_close()时将被释放,

    注意:对具有EDMA的设备,DAT模块使用EDMA寄存器来提交传输请求,而且将使用通道中断挂起寄存器(CIPR),中断并不被使能 ,但是CIPR中的中断标志要用到, DAT模块使用完成码的1到4来计算一个在CIPR 寄存器中的掩码0x00000001E ,在具有EDMA的设备上使用DAT模块的用户必须避免使用完成码1到4。

    使用任何有效的DMA通道来打开DAT模块的例子,

    DAT_open(DAT_CHAANY,DAT_PRI_LOW,0);

    用高优先级模式使用DMA通道2打开DAT模块,使用:

    DAT_open(DAT_CHA2,DAT_PRI_HIGH,0);

    使用2D拷贝打开DAT模块,使用:

    DAT_open (DAT_CHAANY, DAT_PRI_HIGH, DAT_OPEN_2D);

    DAT_copy                   Copies a linear block of data from Src to Dst using DMA or

                                        EDMA hardware

                              Uint32 DAT_copy(
                                                                    void *src,
                                                                     void *dst,
                                                                    Uint16 byteCnt
                                                                                   );

    Arguments

                         void *src                 是一个源地址指针,

                         void *dst                  是目的地址指针,

                         Uint16 byteCnt     是一个无符号16位数,用来计算你要copy的byte数,这个值是以字节计算的。Return Value       xfrId    Transfer ID 

     函数的返回值是一个传输通道的标号(xfrId    Transfer ID),一般用作句柄

      描述:

    用CSL的DAT之前好像也得先设置好DMA或EDMA的参数,DAT可以自动选择DMA或EDMA的方式和通道,但是具体传输时还是要用到DMA和EDMA的参数,所以即使是用DAT来传输数据,也不能回避掉DMA/EDMA的设置。



  • 相关阅读:
    Node.js、vue.js的使用
    windows配置环境变量
    http常见状态码及其解析
    AWS使用教程
    免费服务器集锦 免费服务器大全 免费使用服务器
    免费服务器AWS免费使用一年详细教程
    PHP实现RSA2加密
    dcoker安装redis
    ES,kibana通过nginx添加访问权限
    docker快速安装kibana
  • 原文地址:https://www.cnblogs.com/youngforever/p/3104719.html
Copyright © 2011-2022 走看看