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

📄 display.c

📁 三星2443芯片
💻 C
📖 第 1 页 / 共 5 页
字号:

			bpp = GetIntNum();
			if( (bpp<0)||(bpp>14) )	break;

			LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
			LcdEnvidOnOff(LCD_OFF);
				
			Basic_Display_Setting(window,LCD_BUF_0,bpp,lcd_horizon_value,lcd_line_value);	
			LCD_ClearScr(0);

			Prepare_Image(window,bpp);

			Display_Start(window);
			Display_End(window);

		}

	}
	
}
//
//==========================================

//==========================================
// Blending(per-plane or per-pixel) Test
//
void PlaneBlendingTest(void)
{
	uint32 i;
	int32 alpha_sel;

	printf("\nSelect the alpha type which you want to test\n");
	printf(" 0: alpha 0   1: alpha 1\n");
	alpha_sel = GetIntNum();
	if ((alpha_sel<0)||(alpha_sel>1))
		alpha_sel=0;

	LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
	LcdEnvidOnOff(LCD_OFF);
			

	// Setting Window 0
	Basic_Display_Setting(LCD_WIN_0,LCD_BUF_0,WINCONx_16BPP_565,lcd_horizon_value,lcd_line_value);	

	LCD_FilledRectangle(0, 0, screen_width-1, screen_height/4*1-1, 0xf800);

	LCD_FilledRectangle(0, screen_height/4*1, screen_width-1, screen_height/4*2-1, 0x7e0);
	LCD_FilledRectangle(0, screen_height/4*2, screen_width-1, screen_height/4*3-1, 0x1f);
	LCD_FilledRectangle(0, screen_height/4*3, screen_width-1, screen_height-1, 0xffff);
	lprintf(50,20,0xffff,"Window 0");			
			
		
	// Setting Window 1
	Basic_Display_Setting(LCD_WIN_1,LCD_BUF_0,WINCONx_16BPP_565,lcd_horizon_value,lcd_line_value);	

	LCD_FilledRectangle(0, 0, screen_width/4*1-1, screen_height-1, 0xf800);
	LCD_FilledRectangle(screen_width/4*1, 0, screen_width/4*2-1, screen_height-1, 0x7e0);
	LCD_FilledRectangle(screen_width/4*2, 0, screen_width/4*3-1, screen_height-1, 0x1f);
	LCD_FilledRectangle(screen_width/4*3, 0, screen_width-1, screen_height-1, 0xffff);
	lprintf(50,100,0xffff,"Window 1");


	*WINCONx_Reg_Addr[1] &= ~((1<<6)|(1<<1));
	*WINCONx_Reg_Addr[1] |= (alpha_sel<<1);
	*VIDOSDxC_Reg_Addr[1] = (0<<20)|(0<<16)|(0<<12)|(0xf<<8)|(0xf<<4)|(0xf<<0);

	LcdWindowOnOff(LCD_WIN_ALL,LCD_ON);
	LcdEnvidOnOff(LCD_ON);

	printf("Press any key to start\n");
	getchar();

	for(i=0;i<8;i++)
	{
		*VIDOSDxC_Reg_Addr[1] = (i<<20)|(i<<16)|(i<<12)|((i^0xf)<<8)|((i^0xf)<<4)|((i^0xf)<<0);
		//*VIDOSDxC_Reg_Addr[1] = (i<<20)|(i<<16)|(i<<12)|(i<<8)|(i<<4)|(i<<0);
		delayLoop(10000000);
	}

	/* Ending Test */
	Display_End(LCD_WIN_ALL);
	
}

void PixelBlendingTest( void)
{
	uint32 i;

	LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
	LcdEnvidOnOff(LCD_OFF);

	// Setting Window 0
	Basic_Display_Setting(LCD_WIN_0,LCD_BUF_0,WINCONx_16BPP_565,lcd_horizon_value,lcd_line_value);	

	LCD_FilledRectangle(0, 0, screen_width-1, screen_height/4*1-1, 0xf800);
	LCD_FilledRectangle(0, screen_height/4*1, screen_width-1, screen_height/4*2-1, 0x7e0);
	LCD_FilledRectangle(0, screen_height/4*2, screen_width-1, screen_height/4*3-1, 0x1f);
	LCD_FilledRectangle(0, screen_height/4*3, screen_width-1, screen_height-1, 0xffff);
	lprintf(50,20,0xffff,"Window 0");	
		
	// Setting Window 1
	Basic_Display_Setting(LCD_WIN_1,LCD_BUF_0,WINCONx_16BPP_A555,lcd_horizon_value,lcd_line_value);	

	LCD_FilledRectangle(0, 0, screen_width/8*1-1, screen_height-1, 0x7c00);
	LCD_FilledRectangle(screen_width/8*1, 0, screen_width/8*2-1, screen_height-1, 0x3e0);
	LCD_FilledRectangle(screen_width/8*2, 0, screen_width/8*3-1, screen_height-1, 0x1f);
	LCD_FilledRectangle(screen_width/8*3, 0, screen_width/8*4-1, screen_height-1, 0x7fff);

	LCD_FilledRectangle(screen_width/8*4, 0, screen_width/8*5-1, screen_height-1, 0xfc00);
	LCD_FilledRectangle(screen_width/8*5, 0, screen_width/8*6-1, screen_height-1, 0x83e0);
	LCD_FilledRectangle(screen_width/8*6, 0, screen_width/8*7-1, screen_height-1, 0x801f);
	LCD_FilledRectangle(screen_width/8*7, 0, screen_width-1, screen_height-1, 0xffff);
	
	lprintf(0,100,0x7fff,"Window 1");
	lprintf(0,120,0x7fff,"non blending area");
	
	lprintf(screen_width/2,100,0xffff,"Window 1");
	lprintf(screen_width/2,120,0xffff,"blending area");


	*WINCONx_Reg_Addr[1] &= ~((1<<6)|(1<<1));
	*WINCONx_Reg_Addr[1] |= (1<<6);
	*VIDOSDxC_Reg_Addr[1] = (0x0<<20)|(0x0<<16)|(0x0<<12)|(0xf<<8)|(0xf<<4)|(0xf<<0);

	LcdWindowOnOff(LCD_WIN_ALL,LCD_ON);
	LcdEnvidOnOff(LCD_ON);

	printf("Press any key to start\n");
	getchar();

	for(i=0;i<16;i++)
	{
		*VIDOSDxC_Reg_Addr[1] = (i<<20)|(i<<16)|(i<<12)|((i^0xf)<<8)|((i^0xf)<<4)|((i^0xf)<<0);
		delayLoop(10000000);
	}

	/* Ending Test */
	Display_End(LCD_WIN_ALL);

}

void Test_Blending_Win01(void)
{
	int blending;
	
	printf("\nSelect the blending mode which you want to test\n");
	printf("(If you want to stop this test, press enter key)\n");
	printf(" 0: Per Plane Blending   1: Per Pixel Blending\n");
		
	blending = GetIntNum();
	if (blending==0)
		PlaneBlendingTest();
	else if (blending==1)
		PixelBlendingTest();
}

//
//==========================================

//==========================================
// ColorKey Test
//
void Test_ColorKey(void)
{

	LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
	LcdEnvidOnOff(LCD_OFF);


	// Setting Window 0
	Basic_Display_Setting(LCD_WIN_0,LCD_BUF_0,WINCONx_24BPP_888,lcd_horizon_value,lcd_line_value);	

	LCD_FilledRectangle(0, 0, screen_width-1, screen_height/4*1-1, 0xff0000);
	LCD_FilledRectangle(0, screen_height/4*1, screen_width-1, screen_height/4*2-1, 0x00ff00);
	LCD_FilledRectangle(0, screen_height/4*2, screen_width-1, screen_height/4*3-1, 0x0000ff);
	LCD_FilledRectangle(0, screen_height/4*3, screen_width-1, screen_height-1, 0xffffff);
	lprintf(50,20,0xffffff,"Window 0");			
			
		
	// Setting Window 1
	Basic_Display_Setting(LCD_WIN_1,LCD_BUF_0,WINCONx_24BPP_888,lcd_horizon_value,lcd_line_value);	

	LCD_FilledRectangle(0, 0, screen_width/4*1-1, screen_height-1, 0xff0000);
	LCD_FilledRectangle(screen_width/4*1, 0, screen_width/4*2-1, screen_height-1, 0x00ff00);
	LCD_FilledRectangle(screen_width/4*2, 0, screen_width/4*3-1, screen_height-1, 0x0000ff);
	LCD_FilledRectangle(screen_width/4*3, 0, screen_width-1, screen_height-1, 0xffffff);
	lprintf(50,100,0xffffff,"Window 1");
			
	*WxKEYCON0_Reg_Addr[1]	=	(0<<26)|(1<<25)|(0<<24)|(0x000000);
	*WxKEYCON1_Reg_Addr[1]	=	0x000000;
	
	LcdWindowOnOff(LCD_WIN_ALL,LCD_ON);
	LcdEnvidOnOff(LCD_ON);


	printf("Press any key to start\n");
	getchar();
	
	*WxKEYCON1_Reg_Addr[1]	=	0xff0000;
	delayLoop(30000000);
	*WxKEYCON1_Reg_Addr[1]	=	0x00ff00;
	delayLoop(30000000);
	*WxKEYCON1_Reg_Addr[1]	=	0x0000ff;
	delayLoop(30000000);
	*WxKEYCON1_Reg_Addr[1]	=	0xffffff;
	delayLoop(30000000);

	/* Ending Test */
	Display_End(LCD_WIN_ALL);

}


//
//==========================================

//==========================================
// ColorMap Test function
//
void Test_ColorMap(void)
{
	int8 window=-1;
	uint32 color_map=0;
	
	while(1)
	{
		printf("\nSelect the window # which you want to test\n");
		printf("(If you want to stop this test, press enter key)\n");
		printf(" 0: Window 0   1: Window 1 \n");

		window = GetIntNum();
		if( window==(-1) )	return;
		else
		{	
			switch(window)
			{
				case 0:
					color_map = 0xffff00;
					break;
				case 1:
					color_map = 0x00ffff;
					break;
				default:
					color_map = 0;	
					break;			
			}
					
			LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
			LcdEnvidOnOff(LCD_OFF);
			
			Basic_Display_Setting(window,LCD_BUF_0,WINCONx_24BPP_888,lcd_horizon_value,lcd_line_value);	
			LCD_ClearScr(0);
			*WINxMAP_Reg_Addr[window] = (1<<24)|(color_map);	//color map enable
			Display_Start(window);
			Display_End(window);
		}		
	}
}

//
//==========================================

//==========================================
// CPU Interface Test
//
void Test_DisplayFramebufferCpuIf_QVGA_GOM(void)
{
	U32 i,data;
	U32 *framebuffer;

	printf("CPU I/F Display Controller Test!\n");

	framebuffer = (U32 *)LCD_FRAME_BUFFER;
	for(i=0; i<240*320*2/4; i++) {
		//data=cpuiftestimg[i*2+1];
		//data |= (cpuiftestimg[i*2] <<16);
		data=0x001f;
		data |= (0x001f <<16);
		*framebuffer ++ = data;
	}		

	rVIDCON0 =0;
	rWINCON0 =0;
	rWINCON1 =0;	

	rVIDCON0 = (2<<22)|(0<<19)|(0<<16)|(0x1<<6)|(1<<5)|(1<<4)|(0<<2); // VIDOUT = System I/F for Main LDI, output data format = 16bit mode, Video Clock=HCLK

	rVIDTCON2 = (319<<11)|(239);

	rWINCON0 = (1<<18)|(2<<9)|(5<<2); // 4word burst, 16bpp, 
	rWINCON1 = (2<<9)|(5<<2); // 4word burst, 16bpp, 

	rVIDOSD0A = (0<<11)|(0);
	rVIDOSD0B = (239<<11)|(319);	
	rVIDOSD1A = (0<<11)|(0);
	rVIDOSD1B = (239<<11)|(319);	

	rVIDW00ADD0B0 = LCD_FRAME_BUFFER;
	rVIDW00ADD0B1 = LCD_FRAME_BUFFER + 320*240*2;
	//rVIDW01ADD0 = LCD_FRAME_BUFFER;
	//rVIDW01ADD1 = LCD_FRAME_BUFFER + 320*240*2;

	rSYSIFCON0 = (0x1<<16)|(0x1<<12)|(0x5<<8)|(0x1<<4)|(1<<2)|(1<<1)|(1); // CS_SETUP=0x1, WR_SETUP=0x1, WR_ACT=0x2, WR_HOLD=0x1, RSPOL=HIGH, SUCCEUP=Successive, SYSIFEN=Enable
	//rSYSIFCON1 = (0xf<<16)|(0xf<<12)|(0xf<<8)|(0xf<<4)|(1<<2)|(1<<1)|(1); // CS_SETUP=0x1, WR_SETUP=0x1, WR_ACT=0x2, WR_HOLD=0x1, RSPOL=HIGH, SUCCEUP=Successive, SYSIFEN=Enable

	rWINCON0 |= 1;
	
	//rWINCON0 |= 1;
	rVIDCON0 |= 3;
	//rCPUTRIGCON1 = 1;
	Delay(100);
	rCPUTRIGCON2 = 1;

	printf("If you want to stop, press any key!\n");
	printf("rSYSIFCON0:0x%x\n",rSYSIFCON0);
	Uart_getc();


	rWINCON1 &= ~1;
	rVIDCON0 &= ~3;

	
}


void Test_DisplayFramebufferCpuIf_OUTPUT_FORMAT(void)
{
	U32 i,data;
	U32 *framebuffer;

	printf("CPU I/F Display Controller Test!\n");

	//framebuffer = (U32 *)LCD_FRAME_BUFFER;//window 0
	framebuffer = (U32 *)(LCD_FRAME_BUFFER+0x200000);//window 1
/*
	for(i=0; i<240*320*2/4; i++) {
		//data=cpuiftestimg[i*2+1];
		//data |= (cpuiftestimg[i*2] <<16);
		data=0x001f;
		data |= (0x001f <<16);
	}		
*/

	for(i=0; i<240*320; i++) {
		//data=0x00003f;
		data=0x0000ff;
		*framebuffer ++ = data;
	}	

	LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
	LcdEnvidOnOff(LCD_OFF);

	Basic_Display_Setting_CPUIF_OUTPUT_FORMAT(1,0,WINCONx_18BPP_666,lcd_horizon_value,lcd_line_value);
	rVIDCON0 = rVIDCON0 & ~((0x7<<19)|(0x7<<16)) | (0x4<<16);
	rWINCON1 = rWINCON1 & ~(0xf<<2) | (0xb<<2);
	
	Display_Start_CPUIF(1);	
	Display_End(LCD_WIN_ALL);
	
}


void Test_DisplayFramebufferCpuIf_Bufferchange(void)
{
	U32 i,data;
	U32 *framebuffer0_0, *framebuffer0_1;

	printf("CPU I/F Display Controller Test!\n");

	framebuffer0_0 = (U32 *)LCD_FRAME_BUFFER;//window 0
	framebuffer0_1 = (U32 *)(LCD_FRAME_BUFFER+0x100000);//window 1

	for(i=0; i<240*320*2/4; i++) {
		//data=cpuiftestimg[i*2+1];
		//data |= (cpuiftestimg[i*2] <<16);
		data=0xf800;
		data |=(U32) (0xf800 <<16);
		*framebuffer0_0 ++ = data;
	}		

	for(i=0; i<240*320*2/4; i++) {
		//data=cpuiftestimg[i*2+1];
		//data |= (cpuiftestimg[i*2] <<16);
		data=0x001f;
		data |= (0x001f <<16);
		*framebuffer0_1 ++ = data;
	}		

	LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
	LcdEnvidOnOff(LCD_OFF);
		
	Basic_Display_Setting_CPUIF_OUTPUT_FORMAT(0,1,WINCONx_16BPP_565,lcd_horizon_value,lcd_line_value);
	
	rWINCON0 = rWINCON0 & ~(0x1<<22) | (1<<22);
	
	rVIDW00ADD0B0 = LCD_FRAME_BUFFER;
	rVIDW00ADD1B0 = LCD_FRAME_BUFFER + (320*240*2);
	
	rVIDW00ADD0B1 = LCD_FRAME_BUFFER+0x100000;
	rVIDW00ADD1B1 = LCD_FRAME_BUFFER+0x100000 + (320*240*2);
	
	
	Display_Start_CPUIF(0);	
	//Display_End(LCD_WIN_ALL);

	Uart_getc();

	Display_Start_CPUIF(0);	
	//Display_End(LCD_WIN_ALL);

	Uart_getc();

	Display_Start_CPUIF(0);	
	//Display_End(LCD_WIN_ALL);

	Uart_getc();

	Display_Start_CPUIF(0);	
	//Display_End(LCD_WIN_ALL);
	
}


void Test_DisplayFramebufferCpuIf_QVGA1(void)
{
	int8 image,window,buffer;
	uint32 i,j,k=0;

	printf("\nSelect the window # which you want to test\n");
	printf(" 0: Window 0   1: Window 1\n");

	window = GetIntNum();
	if( (window<0) || (window>1) )	return;

	if (window==0)
	{
		printf("\nSelect the buffer # which you want to test\n");
		printf(" 0: Buffer 0   1: Buffer 1\n");

		buffer = GetIntNum();
		if( (buffer<0) || (buffer>1) )	return;
	} else {
		buffer = 0;
	}

	printf("\nSelect the image which you want to display\n");
	printf(" 1: RGBW (16bpp)  2: Snail (16bpp)	\n");


	image = GetIntNum();

 	if(image == 1)	//RGBW
 	{
		Basic_Display_Setting_CPUIF(window,buffer,WINCONx_16BPP_565,lcd_horizon_value,lcd_line_value);
		LCD_FilledRectangle(0, 0, screen_width-1, screen_height/4*1-1, 0xf100);
		LCD_FilledRectangle(0, screen_height/4*1, screen_width-1, screen_height/4*2-1, 0x07c0);
		LCD_FilledRectangle(0, screen_height/4*2, screen_width-1, screen_height/4*3-1, 0x001f);
		LCD_FilledRectangle(0, screen_height/4*3, screen_width-1, screen_height-1, 0xffff);
		lprintf(130,80,0xffff,"Hello~");
 	}
	else if(image == 2)	//Snail
	{
		Basic_Display_Setting_CPUIF(window,buffer,WINCONx_16BPP_565,lcd_horizon_value,lcd_line_value);			
		for(j=0;j<screen_height;j++)
			for(i=0;i<screen_width;i++)
				PutPixel(i,j,snail16bpp[k++]);
	}
	else
	{
		printf("You entered wrong number..\n");
		return;	
	}

	rVIDINTCON = (1<<18)|(1<<17); 
	rVIDINTCON |= (1<<0); 
	pISR_LCD = (unsigned)Display_ISR0;

	rINTMSK &= ~(1<<16);
	rINTSUBMSK &= ~(1<<17);
	
	Display_Start_CPUIF(window);	
	

	printf("\n >>> display through window %d[%s] is going on...\n",window,lcd_bpp_mode[WINCONx_16BPP_565]);
	Display_End(window);
	
	return;	

⌨️ 快捷键说明

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