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

📄 cfidedma.c

📁 Audio codec--TLV320AIC31 裸测代码
💻 C
字号:
#include <stdio.h>
//#include "cfIdefuncs.h"
#include "cfIdedma.h"


void SetDMA( DWORD ifread , DWORD from , DWORD to ,  DWORD size )
{
	volatile PDMAC_REGS pDMACRegs = (PDMAC_REGS)DMAC_BASE;
	volatile PDMAC_CHANNEL_REGS pDMACChannelRegs;
	DWORD config = 0;
	
	
	#if (ifread==0)
	{
		pDMACChannelRegs->DMACCxConfiguration = 0;
		pDMACChannelRegs->DMACCxControl = 0;
		pDMACChannelRegs->DMACCxSrcAddr = 0;
		pDMACChannelRegs->DMACCxDestAddr = 0;
	}
	#endif
	
	pDMACRegs->DMACConfiguration = (DWORD)DMAC_CONFIG_E;    // Enable the DMA controller

	pDMACChannelRegs = (PDMAC_CHANNEL_REGS)&pDMACRegs->DMACC0SrcAddr;

	pDMACChannelRegs->DMACCxConfiguration &= ~(DWORD)DMAC_CHCONFIG_E;
	while (pDMACChannelRegs->DMACCxConfiguration & (DWORD)DMAC_CHCONFIG_E);

	pDMACChannelRegs->DMACCxControl = 0;
	

	pDMACChannelRegs->DMACCxControl	=	(TRANSFER_WIDTH_WORD<< DMAC_SWIDTH_SHIFT) + 
											(TRANSFER_WIDTH_WORD<< DMAC_DWIDTH_SHIFT) +
											(BURST_SIZE_32 << DMAC_SBSIZE_SHIFT) + 
											(BURST_SIZE_32 << DMAC_DBSIZE_SHIFT);

	config =	(11 << DMAC_SPER_SHIFT) + (12 << DMAC_DPER_SHIFT);

	if( ifread )
	{
		pDMACChannelRegs->DMACCxControl |= DMAC_CTRL_D + DMAC_CTRL_DI;
											
		config |= FLOW_PER_MEM_DMAC << DMAC_FLOW_SHIFT;
	}
	else
	{
		pDMACChannelRegs->DMACCxControl |= DMAC_CTRL_S + DMAC_CTRL_SI;
		config |= FLOW_MEM_PER_DMAC << DMAC_FLOW_SHIFT;
	}
	
				
	pDMACChannelRegs->DMACCxControl	|= (size) / 2;
	pDMACChannelRegs->DMACCxSrcAddr = from;
	pDMACChannelRegs->DMACCxDestAddr = to;
	pDMACChannelRegs->DMACCxLLI = 0; 
	pDMACChannelRegs->DMACCxConfiguration = config;
	
	pDMACChannelRegs->DMACCxConfiguration |= (DWORD)DMAC_CHCONFIG_E;  
	
//	printf(" the DMACCxConfiguration is 0x%x\n",pDMACChannelRegs->DMACCxConfiguration); 
	
}

int WaitDMA()
{
	int loop = 10000;
	volatile PDMAC_REGS pDMACRegs = (PDMAC_REGS)DMAC_BASE;
	volatile PDMAC_CHANNEL_REGS pDMACChannelRegs = (PDMAC_CHANNEL_REGS)&pDMACRegs->DMACC0SrcAddr;
	
	while ( (pDMACChannelRegs->DMACCxConfiguration & (DWORD)DMAC_CHCONFIG_E) && --loop )
	{
		hw_delay(1);
		//printf(" the DMACCxConfiguration is( wait DMA) 0x%x\n",pDMACChannelRegs->DMACCxConfiguration); 
		
	}

	if (loop == 0)
	{
		pDMACChannelRegs->DMACCxConfiguration = 0;
		pDMACChannelRegs->DMACCxControl = 0;
		pDMACChannelRegs->DMACCxSrcAddr = 0;
		pDMACChannelRegs->DMACCxDestAddr = 0;
		printf("*ERROR* - IDE DMA cant finished!\r\n");
		return 0;
	}
		
	pDMACChannelRegs->DMACCxConfiguration &= ~(DWORD)DMAC_CHCONFIG_E;
	return 1;

}

⌨️ 快捷键说明

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