📄 edma_main.c
字号:
#include "edma_bioscfg.h"
#include <stdio.h>
#include <csl_edma.h>
#include <csl_timer.h>
#include <csl.h>
#define TIMECOUNT 20
#define BUFFCOUNT 256
#define TCCINTNUM 7
#define FILL_PATTERN 0x01010101
#pragma DATA_SECTION(ping,".buffers");
#pragma DATA_SECTION(pong, ".buffers");
int ping[BUFFCOUNT], pong[BUFFCOUNT];
/*
#pragma DATA_SECTION(ping_data,".buffers");
#pragma DATA_SECTION(pong_data, ".buffers");
static int ping_data, pong_data;
*/
TIMER_Handle hTimer1;
EDMA_Handle hEdma;
EDMA_Handle hPing;
EDMA_Handle hPong;
EDMA_Config edmacfg ={
EDMA_OPT_RMK(
EDMA_OPT_PRI_LOW,
EDMA_OPT_ESIZE_32BIT,
EDMA_OPT_2DS_NO,
EDMA_OPT_SUM_NONE,
EDMA_OPT_2DD_NO,
EDMA_OPT_DUM_INC,
EDMA_OPT_TCINT_YES,
EDMA_OPT_TCC_OF(TCCINTNUM),
EDMA_OPT_TCCM_OF(TCCINTNUM >> 4),
EDMA_OPT_ATCINT_NO,
EDMA_OPT_ATCC_OF(0),
EDMA_OPT_PDTS_DISABLE,
EDMA_OPT_PDTD_DISABLE,
EDMA_OPT_LINK_YES,
EDMA_OPT_FS_NO),
EDMA_SRC_OF(ping),
EDMA_CNT_OF(BUFFCOUNT), //Transfer count parameter
EDMA_DST_OF(pong), //Destination address parameter
EDMA_IDX_OF(0x00000004),//Index parameter
EDMA_RLD_OF(0x00000000) //Count reload/link parameter
};
main()
{
//ping_data=;
//pong_data=0x3c00;
int i;
CSL_init();
IRQ_globalEnable();
IRQ_nmiEnable();
for (i=0; i<BUFFCOUNT; i++)
{
ping[i] += 0x01010101;
pong[i] = 0xffffffff;
}
hEdma= EDMA_open(EDMA_CHA_TINT1, EDMA_OPEN_RESET);
EDMA_config(hEdma, &edmacfg);
IRQ_enable(IRQ_EVT_EDMAINT); //打开EDMA中断
EDMA_intDisable(TCCINTNUM);
EDMA_intClear(TCCINTNUM);
EDMA_intEnable(TCCINTNUM);
//Enable the EDMA channel
EDMA_enableChannel(hEdma); //TIME1对应的EDMA使能
hTimer1=TIMER_open(TIMER_DEV1, TIMER_OPEN_RESET);
TIMER_configArgs(hTimer1,
TIMER_CTL_OF(0x00000200),
TIMER_PRD_OF(0x1000), //Timer period
TIMER_CNT_OF(0)
);
TIMER_start(hTimer1);
while(1);
}
void HWI_Edma_isr(void)
{
EDMA_intClear(TCCINTNUM);
if(!memcmp(ping, pong, 256 * 4 /*in bytes*/))
printf("\nTEST PASSED\n");
else
printf("\nTEST FAILED\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -