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

📄 buffer_init.c

📁 ADI的ADSP-BF561下实现多媒体开发的通用框架。
💻 C
字号:
/************************************************************************
*Description:Initialises the video in/out peripheral DMA buffers and also 
*			 the MEMDMA buffers
*			 TRANSFER_LENGTH is 4 (32-bit). On BF561 the maximum data width transfer
*			 is 32 bit.  
************************************************************************/

#include <services\services.h>				// system services
#include <drivers\adi_dev.h>				// device manager includes
#include <drivers\ppi\adi_ppi.h>				// PPI driver includes

#include "ppi_L1_ppi_line_transfers.h"
#include "..\..\..\..\utilities\ezkitutilities.h"	// EZ-Kit utilities

extern char subFrame1[];
extern char subFrame2[];

extern char subFrame3[];
extern char subFrame4[];

extern char subFrame5[];
extern char subFrame6[];

extern char Frame_Copy[];

#define TRANSFER_LENGTH 4

/************************************************************************
Function: buffer_init

Description:This function populates a buffer that is used for both PPI input
			and PPI output.  The buffer is configured to process
			a standard NTSC 480i frame.
			
			Maintain three buffers in L1 memory. The number can be 
			increased but correspondingly case statements should be
			added. The buffers are managed as seperate variables to 
			allow explicit placements in the memory		
************************************************************************/
buffer_init()
{
	int i;
	for (i = 0; i < NUM_BUFFERS_L1; i++) {
		switch (i)
		{		
			case 0:
				Buffer2D_IN[i].Data = subFrame1;
				break;
			case 1: 
				Buffer2D_IN[i].Data = subFrame2;
				break;
			case 2: 
				Buffer2D_IN[i].Data = subFrame3;
				break;		
		}
		Buffer2D_IN[i].ElementWidth = TRANSFER_LENGTH;
		Buffer2D_IN[i].XCount = 1716/TRANSFER_LENGTH;
		Buffer2D_IN[i].XModify = TRANSFER_LENGTH;
		Buffer2D_IN[i].YCount = L1NumRows;
		Buffer2D_IN[i].YModify = TRANSFER_LENGTH;
		Buffer2D_IN[i].CallbackParameter =&Buffer2D_IN[0];//NULL;
		Buffer2D_IN[i].pNext = &Buffer2D_IN[i+1];
	}
	Buffer2D_IN[NUM_BUFFERS_L1-1].pNext = NULL;
	
	for (i = 0; i < NUM_BUFFERS_L1; i++) {
		switch (i)
		{		
			case 0:
				Buffer2D_OUT[i].Data = subFrame1;
				break;
			case 1: 
				Buffer2D_OUT[i].Data = subFrame2;
				break;
			case 2: 
				Buffer2D_OUT[i].Data = subFrame3;
				break;	
		}
		Buffer2D_OUT[i].ElementWidth = TRANSFER_LENGTH;
		Buffer2D_OUT[i].XCount = 1716/TRANSFER_LENGTH;
		Buffer2D_OUT[i].XModify = TRANSFER_LENGTH;
		Buffer2D_OUT[i].YCount = L1NumRows;
		Buffer2D_OUT[i].YModify = TRANSFER_LENGTH;
		Buffer2D_OUT[i].CallbackParameter =&Buffer2D_OUT[0];//NULL;
		Buffer2D_OUT[i].pNext = &Buffer2D_OUT[i+1];
	}
	Buffer2D_OUT[NUM_BUFFERS_L1-1].pNext = NULL;
	
	for(i=0;i<NUM_BUFFERS_L1;i++)
	{
		switch (i)
		{		
			case 0:
				Buffer2D_IN_DMA[i].StartAddress = subFrame1;
				break;
			case 1: 
				Buffer2D_IN_DMA[i].StartAddress = subFrame2;
				break;
			case 2: 
				Buffer2D_IN_DMA[i].StartAddress = subFrame3;
				break;		
		}
		Buffer2D_IN_DMA[i].XCount = 1716/TRANSFER_LENGTH;
		Buffer2D_IN_DMA[i].XModify = TRANSFER_LENGTH;
		Buffer2D_IN_DMA[i].YCount =  L1NumRows;
		Buffer2D_IN_DMA[i].YModify = TRANSFER_LENGTH;
		
	}
	
	for(i=0;i<NUM_BUFFERS_L1;i++)
	{
		switch (i)
		{		
			case 0:
				Buffer2D_OUT_DMA[i].StartAddress = subFrame1;
				break;
			case 1: 
				Buffer2D_OUT_DMA[i].StartAddress = subFrame2;
				break;
			case 2: 
				Buffer2D_OUT_DMA[i].StartAddress = subFrame3;
				break;		
		}
		Buffer2D_OUT_DMA[i].XCount = 1716/TRANSFER_LENGTH;
		Buffer2D_OUT_DMA[i].XModify = TRANSFER_LENGTH;
		Buffer2D_OUT_DMA[i].YCount =  L1NumRows;
		Buffer2D_OUT_DMA[i].YModify = TRANSFER_LENGTH;
		
	}
	
}

⌨️ 快捷键说明

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