📄 qdmatest.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 + -