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

📄 dsp6713_edma.c

📁 于博士cadence视频配套工程文件
💻 C
字号:
/* ---------------------------------------------------------------- */
/* Copyright declaration                                            */
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* FileName  :    DSP6713_EDMA.c                               		*/
/* Writen by :    Yu zheng                                     		*/ 
/* ---------------------------------------------------------------- */
#define CHIP_6713


#include <csl.h>
#include <csl_edma.h>
#include <csl_mcbsp.h>

#include "DSP6713_EDMA.h"
#include "DSP6713_const.h"

/*********************************************************/
extern int inputbuffer_ping[];
extern int inputbuffer_pong[];
extern int outputbuffer_ping[];
extern int outputbuffer_pong[];

/* handle of PaRAM */
extern EDMA_Handle hEdma_mcbsp_rcv;
extern EDMA_Handle hEdma_ping_rcv;
extern EDMA_Handle hEdma_pong_rcv;
extern EDMA_Handle hEdma_mcbsp_xmit;
extern EDMA_Handle hEdma_ping_xmit;
extern EDMA_Handle hEdma_pong_xmit;

/*********************************************************/
/* EDMA channel and pingpong config structure */

// input
EDMA_Config MyEDMAConfigRecv;

EDMA_Config MyEDMAConfig_inputping =
{
	EDMA_OPT_RMK(
				EDMA_OPT_PRI_HIGH,
				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(13),
				EDMA_OPT_LINK_YES,
				EDMA_OPT_FS_NO
				),
	EDMA_SRC_OF(MCBSP_ADDR(DRR0)),
	EDMA_CNT_RMK(0,DATA_LEN),
	EDMA_DST_OF(inputbuffer_ping),
	EDMA_IDX_RMK(0,0),
	EDMA_RLD_RMK(0,0)
};

EDMA_Config MyEDMAConfig_inputpong =
{
	EDMA_OPT_RMK(
				EDMA_OPT_PRI_HIGH,
				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(13),
				EDMA_OPT_LINK_YES,
				EDMA_OPT_FS_NO
				),
	EDMA_SRC_OF(MCBSP_ADDR(DRR0)),
	EDMA_CNT_RMK(0,DATA_LEN),
	EDMA_DST_OF(inputbuffer_pong),
	EDMA_IDX_RMK(0,0),
	EDMA_RLD_RMK(0,0)
};

// output
EDMA_Config MyEDMAConfigXmit;

EDMA_Config MyEDMAConfig_outping =
{
	EDMA_OPT_RMK(
				EDMA_OPT_PRI_HIGH,
				EDMA_OPT_ESIZE_32BIT,
				EDMA_OPT_2DS_NO,
				EDMA_OPT_SUM_INC,
				EDMA_OPT_2DD_NO,
				EDMA_OPT_DUM_NONE,
				EDMA_OPT_TCINT_YES,
				EDMA_OPT_TCC_OF(12),
				EDMA_OPT_LINK_YES,
				EDMA_OPT_FS_NO
				),
	EDMA_SRC_OF(outputbuffer_ping),
	EDMA_CNT_RMK(0,DATA_LEN),
	EDMA_DST_OF(MCBSP_ADDR(DXR0)),
	EDMA_IDX_RMK(0,0),
	EDMA_RLD_RMK(0,0)
};

EDMA_Config MyEDMAConfig_outpong =
{
	EDMA_OPT_RMK(
				EDMA_OPT_PRI_HIGH,
				EDMA_OPT_ESIZE_32BIT,
				EDMA_OPT_2DS_NO,
				EDMA_OPT_SUM_INC,
				EDMA_OPT_2DD_NO,
				EDMA_OPT_DUM_NONE,
				EDMA_OPT_TCINT_YES,
				EDMA_OPT_TCC_OF(12),
				EDMA_OPT_LINK_YES,
				EDMA_OPT_FS_NO
				),
	EDMA_SRC_OF(outputbuffer_pong),
	EDMA_CNT_RMK(0,DATA_LEN),
	EDMA_DST_OF(MCBSP_ADDR(DXR0)),
	EDMA_IDX_RMK(0,0),
	EDMA_RLD_RMK(0,0)
};

/*********************************************************/
/* Set the interrupts */
void set_interrupts_edma(void)     
{
 	IRQ_nmiEnable();
 	IRQ_globalEnable();
 	IRQ_reset(IRQ_EVT_EDMAINT);
 	IRQ_disable(IRQ_EVT_EDMAINT);
 	EDMA_intDisable(12);         /* ch 12 for McBSP transmit event XEVT0 */
 	EDMA_intDisable(13);         /* ch 13 for McBSP receive event REVT0 */
 	IRQ_clear(IRQ_EVT_EDMAINT);
 	EDMA_intClear(12);
 	EDMA_intClear(13);
 	IRQ_enable(IRQ_EVT_EDMAINT);
 	EDMA_intEnable(12);
 	EDMA_intEnable(13);  
 	return;
} /* end of set_interrupts_edma() */

/*********************************************************/
void my_edma_start()
{
	/* Enable interrupts. There is difference between CPU and EDMA service */
	EDMA_clearPram(0x00000000);  /* Clear PaRAM of the EDMA */

	set_interrupts_edma();

	// input
	MyEDMAConfigRecv = MyEDMAConfig_inputping;

	hEdma_mcbsp_rcv = EDMA_open(EDMA_CHA_REVT0,EDMA_OPEN_RESET);
	EDMA_config(hEdma_mcbsp_rcv,&MyEDMAConfigRecv);

	hEdma_pong_rcv = EDMA_allocTable(-1);	
	EDMA_config(hEdma_pong_rcv,&MyEDMAConfig_inputpong);

	hEdma_ping_rcv = EDMA_allocTable(-1);
	EDMA_config(hEdma_ping_rcv,&MyEDMAConfig_inputping);

	EDMA_link(hEdma_mcbsp_rcv,hEdma_pong_rcv);	
	EDMA_link(hEdma_pong_rcv,hEdma_ping_rcv);
	EDMA_link(hEdma_ping_rcv,hEdma_pong_rcv);
	
	// output
	MyEDMAConfigXmit = MyEDMAConfig_outping;

	hEdma_mcbsp_xmit = EDMA_open(EDMA_CHA_XEVT0,EDMA_OPEN_RESET);
	EDMA_config(hEdma_mcbsp_xmit,&MyEDMAConfigXmit);

	hEdma_pong_xmit = EDMA_allocTable(-1);	
	EDMA_config(hEdma_pong_xmit,&MyEDMAConfig_outpong);

	hEdma_ping_xmit = EDMA_allocTable(-1);
	EDMA_config(hEdma_ping_xmit,&MyEDMAConfig_outping);

	EDMA_link(hEdma_mcbsp_xmit,hEdma_pong_xmit);	
	EDMA_link(hEdma_pong_xmit,hEdma_ping_xmit);
	EDMA_link(hEdma_ping_xmit,hEdma_pong_xmit);	

	/* SET EER register */
	EDMA_enableChannel(hEdma_mcbsp_rcv); 
	EDMA_enableChannel(hEdma_mcbsp_xmit);
	
	
}   /* end of my_edma_start() */

/*********************************************************/

⌨️ 快捷键说明

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