株洲网站关键词优化,淘宝客合伙人网站建设,未来中森网站建设咨询,上海联通 网站备案转自#xff1a;http://blog.sina.com.cn/s/blog_48fc29af0100ncdu.html DAT模块函数在DM642的EDMA操作中用于搬运数据。DAT_busy()函数用于检测EDMA数据传输过程是否已经结束#xff0c;定义如下#xff1a;Uint32 DAT_busy(Uint32 ID); DAT_busy()函数如果返回一个非零值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);//打开数据传输通道 … TransferidDAT_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的设置。