⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qdmatest.c

📁 QDMA演示程序
💻 C
字号:
#include <std.h>
#include <stdio.h>

#include <csl_edma.h>
#include <csl_irq.h>

#include "qdmatestcfg.h"

Uint32 BuffA[256];
Uint32 BuffB[256];

Void QDMA_work(Void);
Void QDMA_open(Void);
Bool QDMA_check(Uint32 *s, Uint32 *d, Uint32 sidx, Uint32 didx, Uint32 cnt);

/*
 *  ======== main ========
 */
Void main()
{
 
	printf("This project is used to test QDMA!\n");
	
    QDMA_open();   
}

///////////////////////////////////////////////////////////////
Bool QDMA_check(Uint32 *s, Uint32 *d, Uint32 sidx, Uint32 didx, Uint32 cnt)
{
	Uint32 i;
	
	for(i=0; i<cnt; i++){
		if(*(s+i*sidx) != *(d+i*didx)){
			return(FALSE);
		}
	}
		
	return(TRUE);
}

///////////////////////////////////////////////////////////////
Void IsrForEDMA(Void)
{
	Uint32 ciprh, ciprl;
	
	ciprl = EDMA_RGET(CIPRL);
	ciprh = EDMA_RGET(CIPRH);

	EDMA_RSET(CIPRL, 0xFFFFFFFF);
	EDMA_RSET(CIPRH, 0xFFFFFFFF);

	if(ciprl & 1){
		//do what you want to do.
	}
}

///////////////////////////////////////////////////////////////
Void QDMA_open(Void)
{
	IRQ_map(IRQ_EVT_EDMAINT, 8);
	IRQ_configArgs(IRQ_EVT_EDMAINT, IsrForEDMA, IRQ_IEMASK_DEFAULT, IRQ_CCMASK_DEFAULT, 0);
	IRQ_enable(IRQ_EVT_EDMAINT);	
}

///////////////////////////////////////////////////////////////
Void QDMA_work(Void)
{
	Uint32	i, j;
	Uint32	flg;
	EDMA_Config	config;
	
	//初始化中断;
	EDMA_intEnable(0);


	for(i=0;i<16;i++){
		//初始化BuffA;
		for(j=0; j<256; j++)
		{
			BuffA[j] = j+i;
			BuffB[j] = 0;
		
		}
		
		//配置QDMA;
		config.opt	= EDMA_OPT_RMK(EDMA_OPT_PRI_HIGH,
								   EDMA_OPT_ESIZE_32BIT,
								   EDMA_OPT_2DS_NO,
								   EDMA_OPT_SUM_IDX,
								   EDMA_OPT_2DD_NO,
								   EDMA_OPT_DUM_INC,
								   EDMA_OPT_TCINT_YES,
								   EDMA_OPT_TCC_OF(0),
								   EDMA_OPT_TCCM_OF(0),
								   EDMA_OPT_ATCINT_NO,
								   EDMA_OPT_ATCC_OF(0),
								   EDMA_OPT_PDTS_DISABLE,
								   EDMA_OPT_PDTD_DISABLE,
								   EDMA_OPT_LINK_NO,
								   EDMA_OPT_FS_YES);
		config.src	= (Uint32)BuffA;
		config.cnt	= (Uint32)0x00000080;
		config.dst	= (Uint32)BuffB;
		config.idx	= (Uint32)0x00000008;
		EDMA_qdmaConfig(&config);
		
     	//等待QDMA结束;    
     	printf("QDMA transfering...");
     	do{
     		flg = EDMA_getPriQStatus();
     		flg = flg & (1 << EDMA_OPT_PRI_HIGH);
     		printf("...");
     	}while(!flg);
     	
     	//QDMA结束;
     	printf("\nQDMA finished!\n");
     	
     	//QDMA传输结果检测;
     	if(QDMA_check(BuffA, BuffB, 2, 1, 256/2)){
     		printf("QDMA transfer OK!\n");
     	}else{
     		printf("QDMA transfer FAILED!\n");
     	}
     }     
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -