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

📄 display.c

📁 Samsung S3C2443 Test program source code
💻 C
📖 第 1 页 / 共 2 页
字号:

		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);
		}		
	}

	return;
	
}
//
//==========================================

//==========================================
// Interrupt Test function(window 1)
//
uint8 int_count=0;
void Test_Interrupt(void)
{
	int8 interrupt=-1;
	uint8 frame_int_type=0;
	
	while(1)
	{
		printf("\nSelect Frame-Interrupt or FIFO-Interrupt\n");
		printf("(If you want to stop this test, press enter key)\n");
		printf(" 1: Frame-Interrupt   2: FIFO-Interrupt\n");

		interrupt = GetIntNum();
		if( interrupt==(-1) )	return;
		else
		{
			if(interrupt == 1)
			{
				printf("\nSelect the Frame-Interrupt type which you want to test\n");
				printf(" 0: Back Porch   1: VSYNC   2: ACTIVE   3: Front Porch\n");
				frame_int_type = GetIntNum();
				rVIDINTCON = (frame_int_type<<15)|(1<<12); 
				int_count = 30;
				pISR_LCD = (unsigned)Display_ISR1;

				//INT_Enable0(BIT_LCD);
			}
			else if(interrupt == 2)
			{
				rVIDINTCON = (1<<6)|(1<<2)|(1<<1);	//window 1, fifo level:50%
				int_count = 1;
				
				//here some operations are necessary
				
				pISR_LCD = (unsigned)Display_ISR0;
				//INT_Enable0(BIT_LCD);
			}
			else
				break;
					
			LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
			LcdEnvidOnOff(LCD_OFF);
			
			Basic_Display_Setting(LCD_WIN_0,LCD_BUF_0,WINCONx_2BPP_PALLET,lcd_horizon_value,lcd_line_value);	
			LCD_ClearScr(0);
			Prepare_Image(LCD_WIN_0,WINCONx_2BPP_PALLET);
			Display_Start(LCD_WIN_0);
			rVIDINTCON |= 1;	//enable interrupt

			while(int_count>0)	//wait until interrupt is disposed
			{
				if(getchar())
					break;
			}
			
			rVIDINTCON = 0;	//disable interrupt
			int_count = 0;
			
			//INT_Disable0(BIT_LCD);
			//INT_Disable0(BIT_LCD);
			
			Display_End(LCD_WIN_ALL);
		}		
	}
}

void __irq Display_ISR0(void)
{
	int_count--;
	Uart_putc('.');

	ClearPending(BIT_LCD);

	if(int_count==0)
	{
		//INT_Disable0(BIT_LCD);
		Uart_putc('\n');
	}
	
	//Write_VECTADDR(0x0);
	
} 

void __irq Display_ISR1(void)
{
	int_count--;
	Uart_putc('.');

	ClearPending(BIT_LCD);

	if(int_count==0)
	{
		//INT_Disable0(BIT_LCD);
		Uart_putc('\n');
	}
	
	//Write_VECTADDR(0x0);
	
} 
//
//==========================================

//==========================================
// Virtual Screen Test Function
//
void Test_Virtual_Screen(void)
{
	uint32 i;
	uint32 byte_pixel;
	
	LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
	LcdEnvidOnOff(LCD_OFF);

	Basic_Display_Setting(LCD_WIN_0,LCD_BUF_0,WINCONx_24BPP_888,lcd_horizon_value*2,lcd_line_value*2);
	LCD_ClearScr(0);

	lprintf(0,0,0xffffff,"123456789012345678901234567890123456789012345678901234567890");
	lprintf(0,50,0xffffff,"123456789012345678901234567890123456789012345678901234567890");
	lprintf(0,100,0xffffff,"123456789012345678901234567890123456789012345678901234567890");
	lprintf(0,150,0xffffff,"123456789012345678901234567890123456789012345678901234567890");

	Display_Start(LCD_WIN_0);
	
	printf("Press any key to start.\n");
	getchar();
	
	byte_pixel = lcd_bit_order[WINCONx_24BPP_888]/8;
	
	for(i=0;i<100;i++) {
		*VIDWxADD0_Reg_Addr[LCD_WIN_0][LCD_BUF_0] = (uint32)lcd_framebuffer + i*byte_pixel + i*lcd_horizon_value*2*byte_pixel;
		*VIDWxADD1_Reg_Addr[LCD_WIN_0][LCD_BUF_0] = (uint32)lcd_framebuffer + i*byte_pixel + i*lcd_horizon_value*2*byte_pixel + lcd_horizon_value*2*byte_pixel*lcd_line_value;
		*VIDWxADD2_Reg_Addr[LCD_WIN_0][LCD_BUF_0] = ((lcd_horizon_value*byte_pixel)<<13)|(lcd_horizon_value*byte_pixel);
		delayLoop(1000000);
	}

	Display_End(LCD_WIN_0);

}
//
//==========================================
// CPU Interface test

void DISP_CMD_OUT(U16 CMD)
{
//	U32 data, CMD_UP, CMD_DN;
/*
//	CMD = (CMD>>8) + ((0xff & CMD)<<16);
	CMD_DN = (CMD>>8);
	CMD_UP = ((0xff & CMD)<<16);
	
	rLCD_MAIN_CMD = (CMD_UP + CMD_DN);
//	rLCD_MAIN_DATA = CMD_DN;
//	data = rLCD_MAIN_DATA;
	
//	UartPrintf(" Reg %x: %x: %x\n", CMD_DN, CMD_UP, data);
*/

// User must be control the CS/WE/OE signal manually in COMMAND mode.
//. it is different with S3CA480
// In DATA mode, cpuif signal generate automatically.

	rSIFCCON0 |= (1<<0); // command mode enable
	rSIFCCON0 |= (1<<9); // nCS0 enable
	Delay(1);
	rSIFCCON0 |= (1<<6); // nWE enable
	Delay(1);
	
	rSIFCCON1 = CMD;

	Delay(1);
	rSIFCCON0 |= (1<<6); // nWE disable
	Delay(1);
	rSIFCCON0 |= (1<<9); // nCS0 disable	
	rSIFCCON0 |= (1<<0); // command mode disable

//	rLCD_MAIN_INDEX = CMD;
//	data = rLCD_MAIN_INDEX;
//	UartPrintf(" CMD %x: %x\n", CMD, data);
	
}

void DISP_DATA_OUT(U16 DATA)
{
	rSIFCCON1 = DATA;
}
void  DisplayOnCpuif(void)
{
	int i;
//	int	x,y,i;

	/*Main LCD */

	// Power Setting1	

	DISP_CMD_OUT(0x2201);
	Delay(1);					//50us  弥家啊 1 捞扼辑....					
	DISP_CMD_OUT(0x0301);
	Delay(42);					//5ms

	//Initializing Function1
	DISP_CMD_OUT(0x00a0);
	Delay(1);
	DISP_CMD_OUT(0x0110);
	Delay(1);
	DISP_CMD_OUT(0x0200);
	Delay(1);
	DISP_CMD_OUT(0x0510);
//	DISP_CMD_OUT(0x0500);	//boaz.kim, datasheet
	Delay(1);
	DISP_CMD_OUT(0x0d00);

	Delay(400); //boaz.kim			// 40 ms   40000us/120us = 333.33	     HCLK 20Mhz 扁霖


	//Initializing Function2									
	DISP_CMD_OUT(0x0e00);
	Delay(1);
//	DISP_CMD_OUT(0x0f00);
	DISP_CMD_OUT(0x0f01);
	Delay(1);
	DISP_CMD_OUT(0x1000);
	Delay(1);
	DISP_CMD_OUT(0x1100);
	Delay(1);
	DISP_CMD_OUT(0x1200);
	Delay(1);
	DISP_CMD_OUT(0x1300);
	Delay(1);
	DISP_CMD_OUT(0x1400);
	Delay(1);
	DISP_CMD_OUT(0x1500);
	Delay(1);
	DISP_CMD_OUT(0x1600);
	Delay(1);
	DISP_CMD_OUT(0x1700);
	Delay(1);
	DISP_CMD_OUT(0x3401);
	Delay(1);
	DISP_CMD_OUT(0x3500);

	Delay(400);					// 15 ms   15000us/120us = 120	     HCLK 20Mhz 扁霖

	//Initializing Function3
	DISP_CMD_OUT(0x8d01);
	Delay(1);
	DISP_CMD_OUT(0x8b28);
	Delay(1);
	DISP_CMD_OUT(0x4b00);
	Delay(1);
	DISP_CMD_OUT(0x4c00);
	Delay(1);
	DISP_CMD_OUT(0x4d00);
	Delay(1);
	DISP_CMD_OUT(0x4e00);
	Delay(1);
	DISP_CMD_OUT(0x4f00);
	Delay(1);
	DISP_CMD_OUT(0x5000);
	Delay(1);
	DISP_CMD_OUT(0x8600);
	Delay(1);
	DISP_CMD_OUT(0x8726);
	Delay(1);
	DISP_CMD_OUT(0x8802);
	Delay(1);
	DISP_CMD_OUT(0x8905);
	Delay(1);
	DISP_CMD_OUT(0x3301);
	Delay(1);
//	DISP_CMD_OUT(0x3706);
	DISP_CMD_OUT(0x3701);		//modified by kwan. letter
	Delay(1);
	DISP_CMD_OUT(0x7600);
	
	Delay(400);					// 15 ms   15000us/120us = 120	     HCLK 20Mhz 扁霖

	//Initializaing Function4
	DISP_CMD_OUT(0x4200);
	Delay(1);
	DISP_CMD_OUT(0x4300);
	Delay(1);
	DISP_CMD_OUT(0x4400);	
	Delay(1);
	DISP_CMD_OUT(0x4500);
	Delay(1);
	DISP_CMD_OUT(0x46ef);
	Delay(1);
	DISP_CMD_OUT(0x4700);
	Delay(1);
	DISP_CMD_OUT(0x4800);
	Delay(1);
	DISP_CMD_OUT(0x4901);
	Delay(1);
	DISP_CMD_OUT(0x4a3f);
	Delay(1);
	DISP_CMD_OUT(0x3c00);
	Delay(1);
	DISP_CMD_OUT(0x3d00);
	Delay(1);
	DISP_CMD_OUT(0x3e01);
	Delay(1);
	DISP_CMD_OUT(0x3f3f);
	Delay(1);
//	DISP_CMD_OUT(0x4001);
	DISP_CMD_OUT(0x4003);							//modified by kwan. letter
	Delay(1);
	DISP_CMD_OUT(0x410a);
//	Delay(1);
//	DISP_CMD_OUT(0x8f05);

	Delay(400);	

	//Initializing funtion5
	DISP_CMD_OUT(0x8f00);  //?????
	Delay(1);							
	DISP_CMD_OUT(0x903f);
	Delay(1);
	DISP_CMD_OUT(0x9133);
	Delay(1);
	DISP_CMD_OUT(0x9277);
	Delay(1);
	DISP_CMD_OUT(0x9377);
	Delay(1);
	DISP_CMD_OUT(0x9417);
	Delay(1);
	DISP_CMD_OUT(0x9500);
	Delay(1);
	DISP_CMD_OUT(0x9600);
	Delay(1);
	DISP_CMD_OUT(0x9733);
	Delay(1);
	DISP_CMD_OUT(0x9877);
	Delay(1);
	DISP_CMD_OUT(0x9977);
	Delay(1);
	DISP_CMD_OUT(0x9a17);
	Delay(1);
	DISP_CMD_OUT(0x9b00);
	Delay(1);
	DISP_CMD_OUT(0x9c00);
	Delay(1);
	DISP_CMD_OUT(0x9d80);

	Delay(400);
//	DISP_CMD_OUT(0x1d0f);

	//Power Setting2
	DISP_CMD_OUT(0x1d08);
	Delay(400);	
	DISP_CMD_OUT(0x2300);
	Delay(5);
	DISP_CMD_OUT(0x2494);
	Delay(5);
	DISP_CMD_OUT(0x256f);	

	Delay(400);					// 40ms


	//Power Setting3
//	DISP_CMD_OUT(0x281e);
	DISP_CMD_OUT(0x2810);							//modified by kwan. letter
	Delay(1);
	DISP_CMD_OUT(0x1a00);
	Delay(1);
	DISP_CMD_OUT(0x2110);
	Delay(1);
	DISP_CMD_OUT(0x1825);

	Delay(400);	
	
//	DISP_CMD_OUT(0x1948);
	DISP_CMD_OUT(0x1994);							//modified by kwan. letter
	Delay(1);
	DISP_CMD_OUT(0x18e5);

	Delay(334);					//5ms
	
	DISP_CMD_OUT(0x18f7);

	Delay(400);	
	
//	DISP_CMD_OUT(0x1b07);
	DISP_CMD_OUT(0x1b09);							//modified by kwan. letter

	Delay(400);					//40ms
	
//	DISP_CMD_OUT(0x1f5a);
//	DISP_CMD_OUT(0x2054);
	DISP_CMD_OUT(0x1f78);							//modified by kwan. letter
	Delay(1);
	DISP_CMD_OUT(0x2045);
	Delay(1);
	DISP_CMD_OUT(0x1ec1);

	Delay(400);
	
	DISP_CMD_OUT(0x2100);
	Delay(1);
	DISP_CMD_OUT(0x3b01);

	Delay(334);					//10ms
	
	DISP_CMD_OUT(0x0020);	
//	DISP_CMD_OUT(0x0201);
	
	Delay(400);					//40ms
	
								//Initialize  end
	
//////// SUB LCD RGB COLOR TEST BAR///////////////////////
/*
	
  		for ( y = 0; y < SUBLCD_YDOTS; y++ )
  		{  
    		for ( x = 0; x < 42; x++ )
    		{
    			 DISP_DATA_SUB( RED_COLOR );
    		}
 			BOOTHW_KICK_WATCHDOG();

 			for ( x = 0; x < 42; x++ )
    		{
    	 		DISP_DATA_SUB( GREEN_COLOR );
    		}
    		BOOTHW_KICK_WATCHDOG();
    		for ( x = 0; x < 44; x++ )
    		{
    	 		DISP_DATA_SUB( BLUE_COLOR );
    		}
    		BOOTHW_KICK_WATCHDOG();
  		}	 		
*/ 	
}

void  DisplayOffCpuif(void)
{	
	Delay(334);					//40ms
	DISP_CMD_OUT(0x0000);
	Delay(334);
	DISP_CMD_OUT(0x3b00);
	Delay(334);
	DISP_CMD_OUT(0x1f00);
	DISP_CMD_OUT(0x2000);
	DISP_CMD_OUT(0x1e00);
	Delay(334);
	DISP_CMD_OUT(0x1b00);
	Delay(334);
	DISP_CMD_OUT(0x1800);
	Delay(334);
	DISP_CMD_OUT(0x1900);
	Delay(334);
	DISP_CMD_OUT(0x2100);
	Delay(334);
	DISP_CMD_OUT(0x2800);
	DISP_CMD_OUT(0x1a00);
}

void StandbyCpuif(void)
{
	Delay(334);					//40ms
	DISP_CMD_OUT(0x0028);
	Delay(334);
	DISP_CMD_OUT(0x1b06);
	Delay(334);
	DISP_CMD_OUT(0x1e10);
	Delay(334);
	DISP_CMD_OUT(0x1800);
	Delay(334);
	DISP_CMD_OUT(0x0111);
}

void WakeupCpuif(void)
{
	Delay(334);
	DISP_CMD_OUT(0x0110);
	Delay(334);
	DisplayOnCpuif();
}



void Test_DisplayFramebufferCpuIf_QVGA(void)
{
	U32 i,j,data;
	U32 *framebuffer;

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

	//SetMainDisplayBypass();
	DisplayOnCpuif();
	//SetMainDisplayCpuIf();



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


	//MemCopyHostif(0x31000000, A480_LCDFRAMEBUFFER, 240*320*2);

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

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

	//rVIDTCON0=(1<<16)|(2<<8)|(1);
	//rVIDTCON1=(6<<16)|(2<<8)|(3);
	rVIDTCON2 = (319<<11)|(239);


	rWINCON1 = (0<<13)|(1<<12)|(2<<9)|(5<<2); // 4word burst, 16bpp, 


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

	rVIDW01ADD0 = LCD_FRAME_BUFFER;
	rVIDW01ADD1 = LCD_FRAME_BUFFER + 320*240*2;
	rVIDW01ADD2 = 240*2;
	

#if 0 // trigered mode mode
		// VCLK = HCLK/2	
		rSYSIFCON0 = (0x1<<16)|(0x1<<12)|(0x2<<8)|(0x1<<4)|(1<<2)|(0<<1)|(1); // CS_SETUP=0x1, WR_SETUP=0x1, WR_ACT=0x2, WR_HOLD=0x1, RSPOL=HIGH, SUCCEUP=Successive, SYSIFEN=Enable
		// VCLk = HCLK
		//rSYSIFCON0 = (0x2<<16)|(0x2<<12)|(0x4<<8)|(0x2<<4)|(1<<2)|(0<<1)|(1); // CS_SETUP=0x2, WR_SETUP=0x2, WR_ACT=0x4, WR_HOLD=0x2, RSPOL=HIGH, SUCCEUP=Successive, SYSIFEN=Enable
		// VCLK = default
		//rSYSIFCON0 = (0xf<<16)|(0xf<<12)|(0xf<<8)|(0xf<<4)|(1<<2)|(0<<1)|(1); // CS_SETUP=0xf, WR_SETUP=0xf, WR_ACT=0xf, WR_HOLD=0xf, RSPOL=HIGH, SUCCEUP=Successive, SYSIFEN=Enable
		//rSYSIFCON0 = (0x3<<16)|(0x3<<12)|(0x6<<8)|(0x3<<4)|(1<<2)|(0<<1)|(1); // CS_SETUP=0x2, WR_SETUP=0x2, WR_ACT=0x4, WR_HOLD=0x2, RSPOL=HIGH, SUCCEUP=Successive, SYSIFEN=Enable
#else // Successive mode
		// VCLK = HCLK/2	
		rSYSIFCON0 = (0x1<<16)|(0x1<<12)|(0x2<<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
		// VCLk = HCLK
		//rSYSIFCON0 = (0x2<<16)|(0x2<<12)|(0x4<<8)|(0x2<<4)|(1<<2)|(1<<1)|(1); // CS_SETUP=0x2, WR_SETUP=0x2, WR_ACT=0x4, WR_HOLD=0x2, RSPOL=HIGH, SUCCEUP=Successive, SYSIFEN=Enable
		// VCLK = default
		//rSYSIFCON0 = (0xf<<16)|(0xf<<12)|(0xf<<8)|(0xf<<4)|(1<<2)|(1<<1)|(1); // CS_SETUP=0xf, WR_SETUP=0xf, WR_ACT=0xf, WR_HOLD=0xf, RSPOL=HIGH, SUCCEUP=Successive, SYSIFEN=Enable
		//rSYSIFCON0 = (0x3<<16)|(0x3<<12)|(0x6<<8)|(0x3<<4)|(1<<2)|(1<<1)|(1); // CS_SETUP=0x2, WR_SETUP=0x2, WR_ACT=0x4, WR_HOLD=0x2, RSPOL=HIGH, SUCCEUP=Successive, SYSIFEN=Enable
#endif

	rWINCON1 |= 1;
	rVIDCON0 |= 3;

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


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

	
}


⌨️ 快捷键说明

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