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

📄 init_dma.c

📁 blackfin的MDMA程序
💻 C
字号:
#include "main.h"

/********************************************************************************/
/***** Init_DMA()															*****/
/********************************************************************************/
//extern  unsigned char Src_Array[360];
extern  unsigned char Dst_Array_1[360];						//定义传输的数组
extern  unsigned char Dst_Array_2[360];

unsigned short MemDMA_Src_Descriptor[7];		//定义描述符
unsigned short MemDMA_Dst_Descriptor[7];		//定义目标区间

extern bool Array1_empty;
extern bool Array2_empty;
extern int dma_count;
//--------------------------------------------------------------------------//
// Function:	Init_MemDMA0												//
//--------------------------------------------------------------------------//
unsigned int testm;
void Init_MemDMA0(void)
{
	// configure MemDMA0 Source Descriptor block in memory
	while((Array1_empty == 0)&&(Array2_empty == 0))
	{	}

	MemDMA_Src_Descriptor[0] = (unsigned short)((unsigned int)MemDMA_Src_Descriptor & 0xffff);	//
	MemDMA_Src_Descriptor[1] = (unsigned short)((unsigned int)MemDMA_Src_Descriptor >> 16);		
	testm = 0x1110000 + dma_count*360;
	asm("ssync;");
	MemDMA_Src_Descriptor[2] = (unsigned short)(testm & 0xffff); //dma_count*360;	//(unsigned short)((unsigned int)Src_Array & 0xffff);		//低位地址
	asm("ssync;");
	MemDMA_Src_Descriptor[3] = (unsigned short)(testm >> 16);	//(unsigned short)((unsigned int)Src_Array >> 16);			//高位地址
	MemDMA_Src_Descriptor[4] = 0x7725;																//配置寄存器
	MemDMA_Src_Descriptor[5] = 0xb4;	//0x168;	//																	//x_count
	MemDMA_Src_Descriptor[6] = 0x0002;																//x_modify

	// configure MemDMA0 Destination Descriptor block in memory
	MemDMA_Dst_Descriptor[0] = (unsigned short)((unsigned int)MemDMA_Dst_Descriptor & 0xffff);
	MemDMA_Dst_Descriptor[1] = (unsigned short)((unsigned int)MemDMA_Dst_Descriptor >> 16);
	MemDMA_Dst_Descriptor[4] = 0x7727;
	MemDMA_Dst_Descriptor[5] = 0xb4;	//0x168;	//
	MemDMA_Dst_Descriptor[6] = 0x0002;
	
	if(dma_count%2 == 0)
	{
		MemDMA_Dst_Descriptor[2] = (unsigned short)((unsigned int)Dst_Array_1 & 0xffff);
		MemDMA_Dst_Descriptor[3] = (unsigned short)((unsigned int)Dst_Array_1 >> 16);
		Array1_empty = 0;
	}
	else
	{
		MemDMA_Dst_Descriptor[2] = (unsigned short)((unsigned int)Dst_Array_2 & 0xffff);
		MemDMA_Dst_Descriptor[3] = (unsigned short)((unsigned int)Dst_Array_2 >> 16);
		Array2_empty = 0;
	}

	// enable MemDMA0 transfers
	*pMDMA1_S0_NEXT_DESC_PTR	= MemDMA_Src_Descriptor;
	*pMDMA1_D0_NEXT_DESC_PTR	= MemDMA_Dst_Descriptor;
	*pMDMA1_S0_CONFIG		= 0x7725;
	*pMDMA1_D0_CONFIG		= 0x7727;
	asm("ssync;");
}

void Disable_MDMA(void)
{

	*pMDMA1_S0_CONFIG &= ~DMAEN;//~DMAEN=0xFFFFFFF1  /* Channel Disable */
    asm("ssync;");
    *pMDMA1_D0_CONFIG &= ~DMAEN;//~DMAEN=0xFFFFFFF1  /* Channel Disable */
    asm("ssync;");
}

⌨️ 快捷键说明

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