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

📄 display.h

📁 samsung 最新芯片2450 的测试程序.
💻 H
字号:
/*********************************************************************
;* Project Name : S3C2450X
;*
;* Copyright 2008 by Samsung Electronics, Inc.
;* All rights reserved.
;*
;* Project Description :
;* This software is only for verifying functions of the S3C2450X
;* Anybody can use this code without our permission.
;**********************************************************************/

#ifndef __DISPLAY_H__
#define __DISPLAY_H__

#ifdef __cplusplus
extern "C" {
#endif

#define LCD_FRAME_BUFFER		_NONCACHE_STARTADDRESS

#define LCD_WIN0_FRAME_BUFFER0		(LCD_FRAME_BUFFER)
#define LCD_WIN0_FRAME_BUFFER1		(LCD_FRAME_BUFFER+0x100000)
#define LCD_WIN1_FRAME_BUFFER		(LCD_FRAME_BUFFER+0x200000)

#define LCD_DELAY_300NS	54		//on the basis of 540MHz
#define LCD_DELAY_50US	9000	//on the basis of 540MHz
#define LCD_DELAY_1MS	18000	//180000	//on the basis of 540MHz

#define LCD_MODULE_LTE480WV			0
#define LCD_MODULE_LTV350			1
#define LCD_MODULE_LTS222			2
#define LCD_MODULE_LTS222_SERIAL	3
#define LCD_MODULE_LTS222_CPUIF		4

#define	PORTRAIT	0
#define LANDSCAPE	1

#define	QVGA	0
#define WVGA	1

#define	PARALLEL_IF	0
#define SERIAL_IF	1
#define I80_IF		2

//* SPECIFIC FOR LTS222 MODULE FOR PARALLEL RGB INTERFACE
#define LTS222_VBPD		(9)		
#define LTS222_VFPD		(10)
#define LTS222_VSPW		(3)
#define LTS222_HBPD		(1)		
#define LTS222_HFPD		(6)
#define LTS222_HSPW		(3)
#define LTS222_HOZVAL	(240)
#define LTS222_LINEVAL	(320)

//* SPECIFIC FOR LTS222 MODULE FOR SERIAL RGB INTERFACE
#define LTS222_VBPD_SERIAL		7//(7)		
#define LTS222_VFPD_SERIAL		10//(10)
#define LTS222_VSPW_SERIAL		3//(3)
#define LTS222_HBPD_SERIAL		2//(6)		
#define LTS222_HFPD_SERIAL		2//(6)
#define LTS222_HSPW_SERIAL		1//(3)
#define LTS222_HOZVAL_SERIAL	(240)
#define LTS222_LINEVAL_SERIAL	(320)

//* SPECIFIC FOR LTE480(WVGA) MODULE FOR PARALLEL RGB INTERFACE
#define LTE480_VBPD		(7)
#define LTE480_VFPD		(5)	
#define LTE480_VSPW		(1)
#define LTE480_HBPD		(13)
#define LTE480_HFPD		(8)
#define LTE480_HSPW		(3)
#define LTE480_HOZVAL	(800)// Horizontal pixel 800
#define LTE480_LINEVAL	(480)// Vertical pixel 480

#define LTE480_FRAME_RATE	(60)

//* SPECIFIC FOR LTS222 MODULE FOR CPU INTERFACE
#define LTS222_CS_SETUP		(1)		
#define LTS222_WR_SETUP		(1)
#define LTS222_WR_ACT		(5)
#define LTS222_WR_HOLD		(1)		
#define LTS222_FRAME_RATE	(60)

//* SPECIFIC FOR LTV350 MODULE
#define LTV350_VBPD		(5)
#define LTV350_VFPD		(3)
#define LTV350_VSPW		(4)
#define LTV350_HBPD		(5)
#define LTV350_HFPD		(3)
#define LTV350_HSPW		(10)
#define LTV350_HOZVAL	(320)
#define LTV350_LINEVAL	(240)

#define LTV350_FRAME_RATE	60

//* VIDCON0	
#define VIDCON0_S_RGB_IF					(0<<22)
#define VIDCON0_S_CPU_IF_MAIN					(2<<22)
#define VIDCON0_S_CPU_IF_SUB					(3<<22)

#define VIDCON0_CPU_16BIT					(0<<19)
#define VIDCON0_CPU_16plus2					(1<<19)
#define VIDCON0_CPU_9plus9					(2<<19)
#define VIDCON0_CPU_16plus8					(3<<19)
#define VIDCON0_CPU_18BIT					(4<<19)

#define VIDCON0_S_RGB_PAR					(0<<13)
#define VIDCON0_S_BGR_PAR					(1<<13)
#define VIDCON0_S_RGB_SER					(2<<13)
#define VIDCON0_S_BGR_SER					(3<<13)
#define VIDCON0_S_CLKVAL_F_AlWAYS_UPDATE	(0<<12)
#define VIDCON0_S_CLKVAL_F_SOF_UPDATE		(1<<12)
#define VIDCON0_S_VCLK_GATING_ON			(0<<5)
#define VIDCON0_S_VCLK_GATING_OFF			(1<<5)
#define VIDCON0_S_CLKDIR_DIRECT				(0<<4)
#define VIDCON0_S_CLKDIR_DIVIDED			(1<<4)
#define VIDCON0_S_CLKSEL_HCLK				(0<<2)
#define VIDCON0_S_CLKSEL_EPLL				(1<<2)
#define VIDCON0_S_ENVID_OFF					(0<<1)
#define VIDCON0_S_EVVID_ON					(1<<1)
#define VIDCON0_S_ENVID_F_OFF				(0<<0)
#define VIDCON0_S_ENVID_F_ON				(1<<0)
//bit shift
#define VIDCON0_CLKVAL_F_SHIFT				(6)

//* VIDCON1
#define VIDCON1_S_VCLK_FALL_EDGE_FETCH		(0<<7)
#define VIDCON1_S_VCLK_RISE_EDGE_FETCH		(1<<7)
#define VIDCON1_S_HSYNC_INVERTED			(1<<6)
#define VIDCON1_S_VSYNC_INVERTED			(1<<5)
#define VIDCON1_S_VDEN_INVERTED				(1<<4)

//* VIDTCON0,1
//bit shift
#define VIDTCON0_BPD_S				(16)
#define VIDTCON0_FPD_S				(8)
#define VIDTCON0_SPW_S				(0)

//* VIDTCON2
//bit shift
#define VIDTCON2_LINEVAL_S			(11)
#define VIDTCON2_HOZVAL_S			(0)


//* WINCON1to4
#define WINCONx_BIT_SWAP_ON			(1<<2)	//shift on basis of half-word swap
#define WINCONx_BYTE_SWAP_ON		(1<<1)	//shift on basis of half-word swap
#define WINCONx_HALFW_SWAP_ON		(1<<0)	//shift on basis of half-word swap
#define WINCONx_4WORD_BURST			(2)
#define WINCONx_8WORD_BURST			(1)
#define WINCONx_16WORD_BURST		(0)
#define WINCONx_PLANE_BLENDING		(0)
#define WINCONx_PIXEL_BLENDING		(1)
#define WINCONx_1BPP_PALLET			(0)
#define WINCONx_2BPP_PALLET			(1)
#define WINCONx_4BPP_PALLET			(2)
#define WINCONx_8BPP_PALLET			(3)
#define WINCONx_8BPP_NO_PALLET		(4)
#define WINCONx_16BPP_565			(5)
#define WINCONx_16BPP_A555			(6)
#define WINCONx_16BPP_1555			(7)
#define WINCONx_18BPP_666			(8)
#define WINCONx_18BPP_A665			(9)
#define WINCONx_19BPP_A666			(10)
#define WINCONx_24BPP_888			(11)
#define WINCONx_24BPP_A887			(12)
#define WINCONx_25BPP_A888			(13)
#define WINCONx_ALPHA_MODE_0		(0)
#define WINCONx_ALPHA_MODE_1		(1)

//bit shift
#define WINCON_BUFSEL				(23)
#define WINCON_BUFAUTOEN			(22)
#define WINCON_SWAP_S				(16)
#define WINCON_BURSTLEN_S			(9)
#define WINCON_BLENDING_S			(6)
#define WINCON_BPP_S				(2)
#define WINCON_ALPHA_S				(1)

//* VIDWxADD2
//bit shift
#define VIDWxADD2_OFFSET_SIZE_S		(13)
#define VIDWxADD2_PAGE_WIDTH_S		(0)


//* VIDOSDxA,B,C
//bit shift
#define VIDOSDxAB_HORIZON_X_S		(11)
#define VIDOSDxAB_VERTICAL_Y_S		(0)
#define VIDOSDxC_ALPHA0_S			(12)


#define LCD_WIN_0					0
#define LCD_WIN_1					1
#define LCD_WIN_ALL					2

#define LCD_BUF_0					0
#define LCD_BUF_1					1


#define LCD_OFF						0
#define LCD_ON						1

// Set SPI for lcd 
// 1. Set jumper like as 1-2 in J4 at SMDK board
// 2. You can use the SPI1 to control LCD panel register
// nSS1		---> SPI_LCDnSS		---> GPL 14
// SPIMOSI1	---> SPI_LCDMOSI	---> GPL 11
// SPICLK1	---> SPI_LCDCLK		---> GPL 10
#define LCD_DEN		(1<<14)
#define LCD_DSERI	(1<<11)
#define LCD_DCLK	(1<<10)

#define LCD_DEN_BIT		14
#define LCD_DSERI_BIT	11
#define LCD_DCLK_BIT	10

#define LCD_DEN_Lo		(rGPLDAT &= ~LCD_DEN)
#define LCD_DEN_Hi		(rGPLDAT |=	LCD_DEN)
#define LCD_DCLK_Lo		(rGPLDAT &= ~LCD_DCLK)
#define LCD_DCLK_Hi		(rGPLDAT |=	LCD_DCLK)
#define LCD_DSERI_Lo	(rGPLDAT &= ~LCD_DSERI)
#define LCD_DSERI_Hi	(rGPLDAT |=	LCD_DSERI)

//================================================
// function prototype
void Test_LCD(void);
void Display_RgbIf(void);
void Basic_Display(void);
void Test_EachWindow_EachBPP(void);
void Test_Blending_Win01(void);
void Test_ColorKey(void);
void Test_ColorMap(void);
void Test_Interrupt(void);
void Test_Virtual_Screen(void);
void Test_Buffer_Autochange(void);

void Prepare_Blending_Pallet01(void);
void Prepare_ColorKey_Pallet1(void);

void Setup_RgbIf( void);
void Basic_Display_Setting( int32 win_num,int32 buf_num, int32 bpp, uint32 width, uint32 height);
void LCDC_Common_Init(void);

void Display_Start(int8 win_num);
void Display_End(int8 win_num);
int8* Select_Win_Buf(void);
void Make_Image(int8 window, int8 buffer, int8 image);	// 0: 24bpp Color bar 1: Picturs for each size and type
void Prepare_Image(int8 win_num, int8 bpp);
void Prepare_Pallet(int8 win_num, int8 bpp);
void SetLcdPort(void);
void LcdBacklightCon(int);
void LcdBacklightDimCon(int level);
void delayLoop(uint32 count);

void LcdEnvidOnOff(uint8 onoff);
void LcdWindowOnOff(uint8 num, uint8 onoff);
void _PutPixel1Bit(uint32 x, uint32 y, uint32 c);
void _PutPixel2Bit(uint32 x, uint32 y, uint32 c);
void _PutPixel4Bit(uint32 x, uint32 y, uint32 c);
void _PutPixel8Bit(uint32 x, uint32 y, uint32 c);
void _PutPixel16Bit(uint32 x, uint32 y, uint32 c);
void _PutPixel32Bit(uint32 x, uint32 y, uint32 c);

void LCD_Line(int32 x1, int32 y1, int32 x2, int32 y2, int32 color);
void LCD_Rectangle(int32 x1,int32 y1,int32 x2,int32 y2,int32 color);
void LCD_FilledRectangle(int32 x1,int32 y1,int32 x2,int32 y2,int32 color);
void LCD_ClearScr(uint32 c);
void lputs(uint32 x, uint32 y, uint32 c, char *str);
void lprintf(uint32 x, uint32 y, uint32 c, const char *fmt,...);

void __irq Display_ISR(void);
void __irq Display_ISR_FrameCount(void);

void Init_LDI(void);

void InitLDI_LTS222(void);
void InitLDI_LTS222_CPUIF(void);
void InitLDI_LTV350(void);
void InitLDI_LTE480(void);
void Write_LDI_LTS222(int address, int data);
void Write_LDI_LTV350(int address, int data);



#define LCDFRAMEBUFFER 0x31800000 //_NONCACHE_STARTADDRESS 

#define MVAL		(13)
#define MVAL_USED 	(0)
#define M5D(n) ((n) & 0x1fffff)	// To get lower 21bits

#define CLKVAL_STN_MONO		(20) 	
    // 30hz @100Mhz(HCLK),WLH=16hclk,WDLY=16hclk,LINEBLANK=1*8hclk,VD=4 
#define CLKVAL_STN_GRAY		(10) 	
    // 60hz @100Mhz,WLH=16hclk,WDLY=16hclk,LINEBLANK=13*8hclk,VD=4 
#define CLKVAL_CSTN					(9)   
//#define CLKVAL_CSTN					(35)   

//STN
#define WLH_STN	    		(0)
#define WDLY_STN		(0)
#define LINEBLANK_MONO		(1 &0xff) // MONO timing parameter for CPT CLS-040S-C3M(CHUNGHWA)
#define LINEBLANK_GRAY		(13 &0xff)// GRAY timing parameter for CPT CLS-040S-C3M(CHUNGHWA)
//CSTN timing parameter for LCBHBT161M(NANYA)
#define WLH_CSTN	        (0)
#define WDLY_CSTN		(0)
#define LINEBLANK_CSTN		(16 &0xff)

//STN
#define HOZVAL_STN		(LCD_XSIZE_STN/4-1)	// Valid VD data line number is 4.
#define LINEVAL_STN		(LCD_YSIZE_STN-1)
//Color STN
#define HOZVAL_CSTN		(LCD_XSIZE_CSTN*3/8-1)	// Valid VD data line number is 8.
#define LINEVAL_CSTN		(LCD_YSIZE_CSTN-1)

//STN
#define LCD_XSIZE_STN 	(320)
#define LCD_YSIZE_STN 	(240)
//Color STN
#define LCD_XSIZE_CSTN 	(320)
#define LCD_YSIZE_CSTN 	(240)
//TFT 240320
#define LCD_XSIZE_TFT_240320 	(240)	
#define LCD_YSIZE_TFT_240320 	(320)
//TFT 640480
#define LCD_XSIZE_TFT_640480 	(640)	
#define LCD_YSIZE_TFT_640480 	(480)
//TFT 800600
#define LCD_XSIZE_TFT_800600 	(800)	
#define LCD_YSIZE_TFT_800600 	(600)

//STN
#define SCR_XSIZE_STN 	(LCD_XSIZE_STN*2)   //for virtual screen  
#define SCR_YSIZE_STN 	(LCD_YSIZE_STN*2)
//Color STN
/*
#define SCR_XSIZE_CSTN 	(LCD_XSIZE_CSTN*2)   //for virtual screen  
#define SCR_YSIZE_CSTN 	(LCD_YSIZE_CSTN*2)
*/
#define SCR_XSIZE_CSTN 	(LCD_XSIZE_CSTN)   //No virtual screen  
#define SCR_YSIZE_CSTN 	(LCD_YSIZE_CSTN)

//TFT 240320
#define SCR_XSIZE_TFT_240320 	(LCD_XSIZE_TFT_240320*2)
#define SCR_YSIZE_TFT_240320 	(LCD_YSIZE_TFT_240320*2)
//TFT 640480
#define SCR_XSIZE_TFT_640480 	(LCD_XSIZE_TFT_640480*2)
#define SCR_YSIZE_TFT_640480 	(LCD_YSIZE_TFT_640480*2)
//TFT 800600
#define SCR_XSIZE_TFT_800600 	(LCD_XSIZE_TFT_800600*2)
#define SCR_YSIZE_TFT_800600 	(LCD_YSIZE_TFT_800600*2)

//Selecting LCD type
//STN LCD Panel(320*240)
#define MODE_STN_1BIT 	(0x1001)
#define MODE_STN_2BIT  	(0x1002)
#define MODE_STN_4BIT  	(0x1004)
//Color STN LCD Panel(320*240)
#define MODE_CSTN_8BIT   (0x2001)
#define MODE_CSTN_12BIT (0x2002)
#define MODE_CSTN_12BIT_UP (0x2004)
#define MODE_CSTN_16BIT (0x2008) // for 2442A
//TFT LCD Panel(240*320)
#define MODE_TFT_1BIT_240320     (0x4101)
#define MODE_TFT_8BIT_240320 	 (0x4102)
#define MODE_TFT_16BIT_240320    (0x4104)
#define MODE_TFT_24BIT_240320    (0x4108)
//TFT LCD Panel(640*480)
#define MODE_TFT_1BIT_640480     (0x4201)
#define MODE_TFT_8BIT_640480     (0x4202)
#define MODE_TFT_16BIT_640480    (0x4204)
#define MODE_TFT_24BIT_640480    (0x4208)
//TFT LCD Panel(800*600)
#define MODE_TFT_1BIT_800600     (0x4401)
#define MODE_TFT_8BIT_800600     (0x4402)
#define MODE_TFT_16BIT_800600    (0x4404)


//Mono
extern U32 (*frameBuffer1Bit)[SCR_XSIZE_STN/32];
//Gray
extern U32 (*frameBuffer2Bit)[SCR_XSIZE_STN/16];
extern U32 (*frameBuffer4Bit)[SCR_XSIZE_STN/8];
//Color STN
extern U32 (*frameBuffer8Bit)[SCR_XSIZE_CSTN/4];
extern U32 (*frameBuffer12Bit)[SCR_XSIZE_CSTN*3/8]; // The least common multiple (between 12 and 32) is 96
extern U32 (*frameBuffer16Bit)[SCR_XSIZE_CSTN/2]; // for 2442A
//TFT 240320
extern U32 (*frameBuffer8BitTft240320)[SCR_XSIZE_TFT_240320/4];
extern U32 (*frameBuffer16BitTft240320)[SCR_XSIZE_TFT_240320/2];
extern U32 (*frameBuffer24BitTft240320)[SCR_XSIZE_TFT_240320];
//TFT 640480
extern U32 (*frameBuffer1BitTft640480)[SCR_XSIZE_TFT_640480/32];
extern U32 (*frameBuffer8BitTft640480)[SCR_XSIZE_TFT_640480/4];
extern U32 (*frameBuffer16BitTft640480)[SCR_XSIZE_TFT_640480/2];
extern U32 (*frameBuffer24BitTft640480)[SCR_XSIZE_TFT_640480]; // Unpacked 24bit 
//TFT 800600
extern U32 (*frameBuffer1BitTft800600)[SCR_XSIZE_TFT_800600/32];
extern U32 (*frameBuffer8BitTft800600)[SCR_XSIZE_TFT_800600/4];
extern U32 (*frameBuffer16BitTft800600)[SCR_XSIZE_TFT_800600/2];

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

// extern variable
extern int8 lcd_type;
extern int8 lcd_size;
extern int8 lcd_if;
extern int8 lcd_module;
extern uint32 lcd_bpp;
extern uint16 lcd_horizon_value,lcd_line_value;
extern uint8 lcd_vbpd,lcd_vfpd,lcd_vspw,lcd_hbpd,lcd_hfpd,lcd_hspw;
extern uint8 lcd_cs_setup,lcd_wr_setup,lcd_wr_act,lcd_wr_hold;
extern uint8 lcd_frame_rate;
extern uint8 lcd_burst_mode;
extern uint16 screen_width,screen_height;
extern uint32 *lcd_framebuffer;
extern uint32 uFrameCount;

extern void (*PutPixel)(uint32 x,uint32 y,uint32 c);

extern void *lcd_bpp_mode[];
extern uint8 lcd_bit_order[];
extern uint8 lcd_bit_convert[];
extern uint8 lcd_burst_in_byte[];
extern uint8 lcd_burst_size[3];
extern uint32 lcd_frame_buffer[][2];
extern vuint32 *WINCONx_Reg_Addr[];
extern vuint32 *VIDOSDxA_Reg_Addr[];
extern vuint32 *VIDOSDxB_Reg_Addr[];
extern vuint32 *VIDOSDxC_Reg_Addr[];
extern vuint32 *VIDWxADD0_Reg_Addr[][2];
extern vuint32 *VIDWxADD1_Reg_Addr[][2];
extern vuint32 *VIDWxADD2_Reg_Addr[][2];
extern vuint32 *WxKEYCON0_Reg_Addr[];
extern vuint32 *WxKEYCON1_Reg_Addr[];
extern vuint32 *WINxMAP_Reg_Addr[];
extern vuint32 *WINxPalletBase[];


#ifdef __cplusplus
}
#endif
#endif //#ifndef __DISPLAY_H__

⌨️ 快捷键说明

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