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

📄 videograph.c

📁 ADI的ADSP-BF561下实现PAL制式video的demo。
💻 C
字号:
//--------------------------------------------------------------------------//
//																			//
//	 Name: 	Videiograph for the ADSP-BF533 EZ-KIT Lite						//
//																			//
//--------------------------------------------------------------------------//
//																			//
//	(C) Copyright 2003 - Carsten Knop.  All rights reserved.				//
//																			//
//	Project Name:	BF533 C AVideiograph									//
//																			//
//	Date Modified:	09/30/03		CK		Rev 1.0							//
//																			//
//	Software:		VisualDSP++3.1											//
//																			//
//	Hardware:		ADSP-BF533 EZ-KIT Board									//
//																			//
//	Connections:	none													//
//																			//
//	Purpose:		This Videograph.c file generates an NTSC color bar		//
//					pattern and places the data in SDRAM memory.			//
//																			//
//--------------------------------------------------------------------------//

#include "main.h"

//------------------------------------------------------------------------------
// Function Declarations
//------------------------------------------------------------------------------
unsigned int OutputLine(volatile unsigned int *p, unsigned int line);

//------------------------------------------------------------------------------
// Procedure:	Init_VideoOutFrameBuff
// Inputs:		none
// Outputs:		none
// Description:	
//------------------------------------------------------------------------------
void Init_VideoOutFrameBuff(void)
{
	unsigned int l1, l2;
	volatile unsigned int *p;

	p = (volatile unsigned int *)SDRAM_START_ADDR;

	//printf("SRAM Pointer (Video Start): %u (0x%X)\n", p, p);
	
	for (l1 = 0; l1 < NUM_OF_VOUT_FRAMES; l1++)		//num_of_vout_frames = 1
	{
		for (l2 = 0; l2 < VIDEO_Y_COUNT; l2++)		//num_of_vout_frames = 625
		{
			p = (volatile unsigned int *)OutputLine(p, l2 + 1);
		}
	}

	//printf("SRAM Pointer (Video End): %u (0x%X)\n", p, p);
}

//------------------------------------------------------------------------------
// Procedure:	OutputLine
// Inputs:		*p, line
// Outputs:		none
// Description:	
//------------------------------------------------------------------------------
unsigned int OutputLine(volatile unsigned int *p, unsigned int line)
{
	int i;
	static bool V = 1, F = 1;
	unsigned int code;

	// V-digital field blanking (PAL).
	if (line == 624) V = 1;	// Start  / Field 1
	if (line == 23)  V = 0;	// Finish / Field 1
	if (line == 311) V = 1;	// Start  / Field 2
	if (line == 336) V = 0;	// Finish / Field 2

	// F-digital field identification (PAL).
	if (line == 1)
		F = 0;	// Field 1
	if (line == 313)
		F = 1;	// Field 2


	// End Active Video (EAV)
	if (V & F)
		*p++ = 0xF10000FF;
	if (!V & F)
		*p++ = 0xDA0000FF;
	if (V & !F)
		*p++ = 0xB60000FF;
	if (!V & !F)
		*p++ = 0x9D0000FF;


	// BLANK 
	for	(i = 0; i < (280/4); i++)
		*p++ = 0x10801080;

	// Start Active Video (SAV)
	if (V & F)
		*p++ = 0xEC0000FF;
	if (!V & F)
		*p++ = 0xC70000FF;
	if (V & !F)
		*p++ = 0xAB0000FF;
	if (!V & !F)
		*p++ = 0x800000FF;

	// Active Video
	if (V)
	{
		for	(i = 0; i < (1440/4); i++)
			*p++ = 0x10801080;
	}
	else
		if (line<180)
		{ // Y = 16 to 235   Cb and Cr = 128 +- 112
			for	(i = 0; i < (1440/4)/8; i++)	// White
				*p++ = 0xEB80EB80;
			for	(i = 0; i < (1440/4)/8; i++)	// Yellow
				*p++ = 0xD292D210;
			for	(i = 0; i < (1440/4)/8; i++)	// Cyan
				*p++ = 0xAA10AAA6;
			for	(i = 0; i < (1440/4)/8; i++)	// Green
				*p++ = 0x91229136;
			for	(i = 0; i < (1440/4)/8; i++)	// Magenta
				*p++ = 0x6ADE6ACA;
			for	(i = 0; i < (1440/4)/8; i++)	// Red
				*p++ = 0x51F0515A;
			for	(i = 0; i < (1440/4)/8; i++)	// Blue
				*p++ = 0x296E29F0;
			for	(i = 0; i < (1440/4)/8; i++)	// Black
				*p++ = 0x10801080;
		}
		else
		{       // Y = 0 to 256  Cb and Cr = 128 +- 128
			for	(i = 0; i < (1440/4)/8; i++)	// White
				*p++ = 0xFF80FF80;
			for	(i = 0; i < (1440/4)/8; i++)	// Yellow
				*p++ = 0xE28EE20F;
			for	(i = 0; i < (1440/4)/8; i++)	// Cyan
				*p++ = 0xB426B4A6;
			for	(i = 0; i < (1440/4)/8; i++)	// Green
				*p++ = 0x96359635;
			for	(i = 0; i < (1440/4)/8; i++)	// Magenta
				*p++ = 0x6ACB6ACB;
			for	(i = 0; i < (1440/4)/8; i++)	// Red
				*p++ = 0x4CDA4C5A;
			for	(i = 0; i < (1440/4)/8; i++)	// Blue
				*p++ = 0x1D711DF1;
			for	(i = 0; i < (1440/4)/8; i++)	// Black
				*p++ = 0x00800080;
		}
	return (unsigned int)p;
}

⌨️ 快捷键说明

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