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

📄 edma_main.c

📁 DSP C64x EDMA 基于BIOS程序: 1.EDMA以TIMER1触发 2.BIOS配置EDMA中断
💻 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 + -