📄 display.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 + -