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

📄 lab_04_subprogram.c

📁 单一图像的读取
💻 C
字号:
//---------------- lecture04_subprogram.c  start---------------
#include "DMA0.h"
#include "ADV7171_reset.h"

unsigned short *DMA0_CONFIG = p_DMA0_CONFIG;
unsigned int *DMA0_START_ADDR = p_DMA0_START_ADDR;
unsigned short *DMA0_X_COUNT = p_DMA0_X_COUNT;
unsigned short *DMA0_Y_COUNT = p_DMA0_Y_COUNT;
unsigned short *DMA0_X_MODIFY = p_DMA0_X_MODIFY;
unsigned short *DMA0_Y_MODIFY = p_DMA0_Y_MODIFY;
unsigned short *PPI_CONTROL = 0xFFC01000;


unsigned short * p_Ushort;
unsigned int * p_U_int;
unsigned char * p_U_char;

DMA_init(unsigned char * buffer_start_addr)
{
	*DMA0_CONFIG = 0x1010;
	*DMA0_START_ADDR = buffer_start_addr;
	*DMA0_X_COUNT = 1716;
	*DMA0_Y_COUNT = 525;
	*DMA0_X_MODIFY = 1;
	*DMA0_Y_MODIFY = 1;
}

PPI_init()
{
	*PPI_CONTROL = 0x0002;
}

DMA_enable()
{
    *DMA0_CONFIG |= 0x0001;	
}

PPI_enable()
{
	*PPI_CONTROL = 0x0003;
}

////////////////////////////////////////////////////////////////
Read_Flash_and_NTSC_ITU656_Convert (unsigned char* buffer_656)
{
	unsigned char * flash_p_Y = 0x20010000;
	unsigned char * flash_p_U = 0x20010000 + 720*486;
	unsigned char * flash_p_V = 0x20010000 + 720*486 + 360*243;
	unsigned char * p = buffer_656;
	int i,j;
	for(i=1;i<=3;i++)  //1~3行的偶场场消隐
	{
		*p = 0xFF;      //行消隐开始
		*(p+1) = 0x00;
		*(p+2) = 0x00;
		*(p+3) = 0xF1;
		p +=4;
		
		for(j=0;j<268/2;j++)
		{
			*p = 0x80;
			*(p+1) = 0x10;
			p +=2;
		}
		
		*p = 0xFF;     //行消隐结束
		*(p+1) = 0x00;
		*(p+2) = 0x00;
		*(p+3) = 0xEC;
		p +=4;		
	    
		for(j=0;j<1440;j++)
		{
			*p = 0;
			p++;
		}
	}
	
	for(i=4;i<=20;i++)   //4~20行奇场同步开始的场消隐
	{
		*p = 0xFF;       //行消隐开始
		*(p+1) = 0x00;
		*(p+2) = 0x00;
		*(p+3) = 0xB6;
		p +=4;
		
		for(j=0;j<268/2;j++)
		{
			*p = 0x80;
			*(p+1) = 0x10;
			p +=2;
		}
		
		*p = 0xFF;       //行消隐结束
		*(p+1) = 0x00;
		*(p+2) = 0x00;
		*(p+3) = 0xAB;
		p +=4;		
	    
		for(j=0;j<1440;j++)
		{
			*p = 0;
			p++;
		}
	}
	
	flash_p_Y += 720;
	
	for(i=21;i<=263;i++) //21~263行奇场有效行开始
	{
		*p = 0xFF;       //行消隐开始
		*(p+1) = 0x00;
		*(p+2) = 0x00;
		*(p+3) = 0x9D;
		p +=4;

		for(j=0;j<268/2;j++)
		{
			*p = 0x80;
			*(p+1) = 0x10;
			p +=2;
		}
		
		*p = 0xFF;       //行消隐结束
		*(p+1) = 0x00;
		*(p+2) = 0x00;
		*(p+3) = 0x80;
		p +=4;
		
		for(j=0;j<720/2;j++)
		{
			*p = *(flash_p_U);
			*(p+1) = *(flash_p_Y);
			*(p+2) = *(flash_p_V);
			*(p+3) = *(flash_p_Y+1);
			p += 4;
			flash_p_Y +=2;
			flash_p_U ++;
			flash_p_V ++;
		}
		flash_p_Y +=720;
	}
	
	for(i=264;i<=265;i++)  //264~265行的奇场场消隐
	{
		*p = 0xFF;      //行消隐开始
		*(p+1) = 0x00;
		*(p+2) = 0x00;
		*(p+3) = 0xB6;
		p +=4;
		
		for(j=0;j<268/2;j++)
		{
			*p = 0x80;
			*(p+1) = 0x10;
			p +=2;
		}
		
		*p = 0xFF;     //行消隐结束
		*(p+1) = 0x00;
		*(p+2) = 0x00;
		*(p+3) = 0xAB;
		p +=4;		
	    
		for(j=0;j<1440;j++)
		{
			*p = 0;
			p++;
		}
	}
	
	for(i=266;i<=282;i++)   //266~282行偶场同步开始的场消隐
	{
		*p = 0xFF;       //行消隐开始
		*(p+1) = 0x00;
		*(p+2) = 0x00;
		*(p+3) = 0xF1;
		p +=4;
		
		for(j=0;j<268/2;j++)
		{
			*p = 0x80;
			*(p+1) = 0x10;
			p +=2;
		}
		
		*p = 0xFF;       //行消隐结束
		*(p+1) = 0x00;
		*(p+2) = 0x00;
		*(p+3) = 0xEC;
		p +=4;		
	    
		for(j=0;j<1440;j++)
		{
			*p = 0;
			p++;
		}
	}
	
	flash_p_Y = 0x20010000;
	flash_p_U = 0x20010000 + 720*486;
	flash_p_V = 0x20010000 + 720*486 + 360*243;

	
	for(i=283;i<=525;i++) //283~525行偶场有效行开始
	{
		*p = 0xFF;       //行消隐开始
		*(p+1) = 0x00;
		*(p+2) = 0x00;
		*(p+3) = 0xDA;
		p +=4;

		for(j=0;j<268/2;j++)
		{
			*p = 0x80;
			*(p+1) = 0x10;
			p +=2;
		}
		
		*p = 0xFF;       //行消隐结束
		*(p+1) = 0x00;
		*(p+2) = 0x00;
		*(p+3) = 0xC7;
		p +=4;
		

		for(j=0;j<720/2;j++)
		{
			*p = *(flash_p_U);
			*(p+1) = *(flash_p_Y);
			*(p+2) = *(flash_p_V);
			*(p+3) = *(flash_p_Y+1);
			p += 4;
			flash_p_Y +=2;
			flash_p_U ++;
			flash_p_V ++;
		}
		flash_p_Y +=720;
	}
}


/////////////////////////////////////////////////
ADV7171_reset_start()
{

	p_U_int = EBIU_AMBCTL0;
	*p_U_int =0x7bb07bb0; 	// configure EBIU
	p_U_int = EBIU_AMBCTL1;
	*p_U_int =0x7bb07bb0; 	// configure EBIU
	p_Ushort = EBIU_AMGCTL;
	*p_Ushort = 0x000f; 		// configure EBIU
	p_U_char = Flash_PortA_Data_Out;
	*p_U_char = 0;
	p_U_char = Flash_PortA_Direction;
	*p_U_char = 0x34; 
}

Delay_2ms()
{
    int i;
    for(i=0;i<20000;i++);	
}

ADV7171_reset_end()
{
	p_U_char = Flash_PortA_Data_Out;
	*p_U_char = 0x04;   // portA2=1 for ADV7171 reset end
}

Select_PPIclk_for_BF533()
{
	p_U_char = Flash_PortA_Data_Out;
	*p_U_char |= 0x00; 
}



void ADV7171_reset()
{	
	unsigned short * p_Ushort;
	unsigned int * p_U_int;
	unsigned char * p_U_char;
	p_U_int = EBIU_AMBCTL0;
	*p_U_int =0x7bb07bb0; 	// configure EBIU
	p_U_int = EBIU_AMBCTL1;
	*p_U_int =0x7bb07bb0; 	// configure EBIU
	p_Ushort = EBIU_AMGCTL;
	*p_Ushort = 0x000f; 		// configure EBIU
	p_U_char = Flash_PortA_Data_Out;
	*p_U_char = 0;		
//portA4=0,portA5=0 for BF533 PPIclk select,portA2=0 for ADV7171 reset start
	p_U_char = Flash_PortA_Direction;
	*p_U_char = 0x34;  
	p_U_char = Flash_PortA_Data_Out;
	*p_U_char = 0x04;   // portA2=1 for ADV7171 reset end
}
//---------------- lecture04_subprogram.c  end---------------

⌨️ 快捷键说明

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