📄 l2_lcdtv.new
字号:
/*++
Copyright (c) 2001 Sunplus Technology Co., Ltd.
Module Name:
L2_lcdtv.c
Abstract:
Module related to L2 LCD/TV functions
Environment:
Keil C51 Compiler
Revision History:
11/12/2001 Prover created
--*/
//=============================================================================
//Header file
//=============================================================================
#include "general.h"
#include "main.h"
//=============================================================================
//Symbol
//=============================================================================
//-----------------------------------------------------------------------------
//Constant
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//Variable
//-----------------------------------------------------------------------------
sfr MemStretch = 0x8E;
//=============================================================================
//Program
//=============================================================================
//-----------------------------------------------------------------------------
//L2_InitLCDTV
//-----------------------------------------------------------------------------
//patch3.3@cytsai@0417
UCHAR L2_InitLCDTV(UCHAR CamMode)
{
UCHAR i,j;
UCHAR status = 1;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
//PRINT_L2(" L2_InitLCDTV: Enter\n");
if(CamMode!=0)
{
status = 1; // if not power on initial
}
else
{
XBYTE[0x2D30] = 0x00;
XBYTE[0x2D20] = 0x40; // imgsubsamp
XBYTE[0x2D21] = 0x40; // osdsubsamp
XBYTE[0x2D27] = 0x7a; // lp, eoi for STN-LCD
XBYTE[0x2D28] = 0x20; // fr change every 32 lines
XBYTE[0x2D29] = 0x00; // xcksel for STN-LCD
XBYTE[0x2D2B] = 0x00; // {osdlpfen,dien,gammaen}
XBYTE[0x2D35] = 0x03; // {htonefac,osdblkspd}
XBYTE[0x2D36] = 0x0e; // fonthbits
#ifdef STNLCD //cytsai@0328
// LCD Gamma
XBYTE[0x2D60] = 0x00;
XBYTE[0x2D61] = 0x19;
XBYTE[0x2D62] = 0x35;
XBYTE[0x2D63] = 0x4c;
XBYTE[0x2D64] = 0x61;
XBYTE[0x2D65] = 0x74;
XBYTE[0x2D66] = 0x85;
XBYTE[0x2D67] = 0x95;
XBYTE[0x2D68] = 0xa3;
XBYTE[0x2D69] = 0xb0;
XBYTE[0x2D6a] = 0xbc;
XBYTE[0x2D6b] = 0xc8;
XBYTE[0x2D6c] = 0xd3;
XBYTE[0x2D6d] = 0xdf;
XBYTE[0x2D6e] = 0xec;
XBYTE[0x2D6f] = 0xf8;
XBYTE[0x2D70] = 0xff;
XBYTE[0x2D2b] = 0x01;
#endif
//OSD related
//L2_SetDisplaySrcImgSize(288, 432, 11);
L2_SetColorPalette(0, 255, 255, 255);
L2_SetColorPalette(1, 255, 0, 0);
L2_SetColorPalette(2, 0, 0, 0);
L2_SetColorPalette(3, 255, 255, 0);
L2_SetColorPalette(4, 0, 0, 255);
L2_SetColorPalette(5, 255, 0, 255);
L2_SetColorPalette(6, 0, 255, 255);
L2_SetColorPalette(7, 255, 255, 255);
L2_SetColorPalette(8, 0, 128, 0);
for(i=0;i<10;i++) for(j=0;j<25;j++)
{
L2_SetFOSDIndex(i, j, 0);
L2_SetFOSDAttr(i, j, 0x00);
}
//cytsai@0131
/*
L2_SetFOSDIndex(0, 0, 96);
L2_SetFOSDIndex(1, 0, 97);
L2_SetFOSDIndex(2, 0, 98);
L2_SetFOSDIndex(3, 0, 99);
L2_SetFOSDIndex(4, 0, 100);
L2_SetFOSDIndex(5, 0, 101);
L2_SetFOSDIndex(6, 0, 102);
L2_SetFOSDIndex(7, 0, 103);
L2_SetFOSDIndex(0, 1, 96);
L2_SetFOSDIndex(1, 1, 97);
L2_SetFOSDIndex(2, 1, 98);
L2_SetFOSDIndex(3, 1, 99);
L2_SetFOSDIndex(4, 1, 100);
L2_SetFOSDIndex(5, 1, 101);
L2_SetFOSDIndex(6, 1, 102);
L2_SetFOSDIndex(7, 1, 103);
L2_SetFOSDAttr(0, 0, 0x08);
L2_SetFOSDAttr(1, 0, 0x08);
L2_SetFOSDAttr(2, 0, 0x08);
L2_SetFOSDAttr(3, 0, 0x08);
L2_SetFOSDAttr(4, 0, 0x08);
L2_SetFOSDAttr(5, 0, 0x08);
L2_SetFOSDAttr(6, 0, 0x08);
L2_SetFOSDAttr(7, 0, 0x08);
L2_SetFOSDAttr(0, 1, 0x08);
L2_SetFOSDAttr(1, 1, 0x08);
L2_SetFOSDAttr(2, 1, 0x08);
L2_SetFOSDAttr(3, 1, 0x08);
L2_SetFOSDAttr(4, 1, 0x08);
L2_SetFOSDAttr(5, 1, 0x08);
L2_SetFOSDAttr(6, 1, 0x08);
L2_SetFOSDAttr(7, 1, 0x08);
*/
L2_SetFOSDOffset(0, 0, 0);
L2_SetFOSDBGMixlevel(4);
/*
#ifdef STNLCD
L2_SetOSDSelWindow(0, 32, 239, 191, 10); //cytsai@0128
#endif
*/
L2_DefineColorKey(0);
//XBYTE[0x2DC0] = 0x00; // clear vd interrupt event
//PRINT_L2(" L2_InitLCDTV: Exit\n");
status =0;
}
MemStretch = tmp;
return(status);
}
//-----------------------------------------------------------------------------
//L2_SetDisplayType
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
//patch3.3@cytsai@0417
UCHAR L2_SetDisplayType(UCHAR index)
{
UCHAR status = 1;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
////printf("L2_SetDisplayType Enter Type = %bx \n", index);
//#ifdef ANANTSC
if(index==0)// composite NTSC output
{
XBYTE[0x201C] = 0x00; // using 27MHz for TV
XBYTE[0x2D00] = 0x00; // tvdspmode
XBYTE[0x2D08] = 0xa1; // vldx0
XBYTE[0x2D09] = 0x00; // vldx0
XBYTE[0x2D0A] = 0x1C; // vldy0
XBYTE[0x2D0B] = 0x00; // vldy0
XBYTE[0x2D0C] = 0x20; // vldx1
XBYTE[0x2D0D] = 0x03; // vldx1
XBYTE[0x2D0E] = 0xf0; // vldy1
XBYTE[0x2D0F] = 0x00; // vldy1
XBYTE[0x2D1B] = 0x01; // imgvofst
XBYTE[0x2D1C] = 0x00; // imgvofst
XBYTE[0x2D1D] = 0x00; // imghofst
XBYTE[0x2D1E] = 0x00; // imghofst
XBYTE[0x2D21] = 0x20; // osdsubsamp
XBYTE[0x2D32] = 0x18; // osdvzfac
XBYTE[0x2D34] = 0x30; // osdhofst
XBYTE[0x2DE2] = 0x01; // field mode
status = 0;
}
//#endif
#ifdef ANAPAL
if(index==1)// composite PAL output
{
XBYTE[0x201C] = 0x00; // using 27MHz for TV
XBYTE[0x2D00] = 0x01; // tvdspmode
XBYTE[0x2D08] = 0xA0; // vldx0
XBYTE[0x2D09] = 0x00; // vldx0
XBYTE[0x2D0A] = 0x20; // vldy0
XBYTE[0x2D0B] = 0x00; // vldy0
XBYTE[0x2D0C] = 0x2f; // vldx1
XBYTE[0x2D0D] = 0x03; // vldx1
XBYTE[0x2D0E] = 0x23; // vldy1
XBYTE[0x2D0F] = 0x01; // vldy1
XBYTE[0x2D1B] = 0x01; // imgvofst
XBYTE[0x2D1C] = 0x00; // imgvofst
XBYTE[0x2D1D] = 0x00; // imghofst
XBYTE[0x2D1E] = 0x00; // imghofst
XBYTE[0x2D21] = 0x20; // osdsubsamp
XBYTE[0x2D33] = 0x08; // osdvofst
XBYTE[0x2D34] = 0x30; // osdhofst
XBYTE[0x2DE2] = 0x01; // field mode
status = 0;
}
#endif
#ifdef NTSC656
if(index==2)// CCIR656 NTSC output
{
XBYTE[0x201C] = 0x00; // using 27MHz for TV
XBYTE[0x2D00] = 0x02; // tvdspmode
XBYTE[0x2D08] = 0x80; // vldx0
XBYTE[0x2D09] = 0x00; // vldx0
XBYTE[0x2D0A] = 0x04; // vldy0
XBYTE[0x2D0B] = 0x00; // vldy0
XBYTE[0x2D0C] = 0x4f; // vldx1
XBYTE[0x2D0D] = 0x03; // vldx1
XBYTE[0x2D0E] = 0xf3; // vldy1
XBYTE[0x2D0F] = 0x00; // vldy1
XBYTE[0x2D1B] = 0x00; // imgvofst
XBYTE[0x2D1C] = 0x00; // imgvofst
XBYTE[0x2D1D] = 0x00; // imghofst
XBYTE[0x2D1E] = 0x00; // imghofst
XBYTE[0x2D21] = 0x20; // osdsubsamp
XBYTE[0x2D33] = 0x08; // osdvofst
XBYTE[0x2D34] = 0x30; // osdhofst
XBYTE[0x2DE2] = 0x01; // field mode
status = 0;
}
#endif
#ifdef PAL656
if(index==3)// CCIR656 PAL output
{
XBYTE[0x201C] = 0x00; // using 27MHz for TV
XBYTE[0x2D00] = 0x03; // tvdspmode
XBYTE[0x2D08] = 0x80; // vldx0
XBYTE[0x2D09] = 0x00; // vldx0
XBYTE[0x2D0A] = 0x04; // vldy0
XBYTE[0x2D0B] = 0x00; // vldy0
XBYTE[0x2D0C] = 0x4f; // vldx1
XBYTE[0x2D0D] = 0x03; // vldx1
XBYTE[0x2D0E] = 0x23; // vldy1
XBYTE[0x2D0F] = 0x01; // vldy1
XBYTE[0x2D1B] = 0x00; // imgvofst
XBYTE[0x2D1C] = 0x00; // imgvofst
XBYTE[0x2D1D] = 0x00; // imghofst
XBYTE[0x2D1E] = 0x00; // imghofst
XBYTE[0x2D21] = 0x20; // osdsubsamp
XBYTE[0x2D33] = 0x08; // osdvofst
XBYTE[0x2D34] = 0x30; // osdhofst
XBYTE[0x2DE2] = 0x01; // field mode
status = 0;
}
#endif
#ifdef NTSC8
if(index==4)// CCIR601(8-bit) NTSC output
{
XBYTE[0x201C] = 0x00; // using 27MHz for TV
XBYTE[0x2D00] = 0x04; // tvdspmode
XBYTE[0x2D08] = 0x68; // vldx0
XBYTE[0x2D09] = 0x00; // vldx0
XBYTE[0x2D0A] = 0x10; // vldy0
XBYTE[0x2D0B] = 0x00; // vldy0
XBYTE[0x2D0C] = 0x37; // vldx1
XBYTE[0x2D0D] = 0x03; // vldx1
XBYTE[0x2D0E] = 0xff; // vldy1
XBYTE[0x2D0F] = 0x00; // vldy1
XBYTE[0x2D1B] = 0x00; // imgvofst
XBYTE[0x2D1C] = 0x00; // imgvofst
XBYTE[0x2D1D] = 0x00; // imghofst
XBYTE[0x2D1E] = 0x00; // imghofst
XBYTE[0x2D21] = 0x20; // osdsubsamp
XBYTE[0x2D2A] = 0x01; // CCIR type
XBYTE[0x2D33] = 0x08; // osdvofst
XBYTE[0x2D34] = 0x30; // osdhofst
XBYTE[0x2DE2] = 0x01; // field mode
status = 0;
}
#endif
#ifdef PAL8
if(index==5)// CCIR601(8-bit) PAL output
{
XBYTE[0x201C] = 0x00; // using 27MHz for TV
XBYTE[0x2D00] = 0x05; // tvdspmode
XBYTE[0x2D08] = 0x80; // vldx0
XBYTE[0x2D09] = 0x00; // vldx0
XBYTE[0x2D0A] = 0x04; // vldy0
XBYTE[0x2D0B] = 0x00; // vldy0
XBYTE[0x2D0C] = 0x4f; // vldx1
XBYTE[0x2D0D] = 0x03; // vldx1
XBYTE[0x2D0E] = 0x23; // vldy1
XBYTE[0x2D0F] = 0x01; // vldy1
XBYTE[0x2D1B] = 0x00; // imgvofst
XBYTE[0x2D1C] = 0x00; // imgvofst
XBYTE[0x2D1D] = 0x00; // imghofst
XBYTE[0x2D1E] = 0x00; // imghofst
XBYTE[0x2D21] = 0x20; // osdsubsamp
XBYTE[0x2D33] = 0x08; // osdvofst
XBYTE[0x2D34] = 0x30; // osdhofst
XBYTE[0x2DE2] = 0x01; // field mode
status = 0;
}
#endif
#ifdef NTSC16
if(index==6)// CCIR601(16-bit) NTSC output
{
XBYTE[0x201C] = 0x00; // using 27MHz for TV
XBYTE[0x2D00] = 0x06; // tvdspmode
XBYTE[0x2D08] = 0x80; // vldx0
XBYTE[0x2D09] = 0x00; // vldx0
XBYTE[0x2D0A] = 0x04; // vldy0
XBYTE[0x2D0B] = 0x00; // vldy0
XBYTE[0x2D0C] = 0x4f; // vldx1
XBYTE[0x2D0D] = 0x03; // vldx1
XBYTE[0x2D0E] = 0xf3; // vldy1
XBYTE[0x2D0F] = 0x00; // vldy1
XBYTE[0x2D1B] = 0x00; // imgvofst
XBYTE[0x2D1C] = 0x00; // imgvofst
XBYTE[0x2D1D] = 0x00; // imghofst
XBYTE[0x2D1E] = 0x00; // imghofst
XBYTE[0x2D21] = 0x20; // osdsubsamp
XBYTE[0x2D33] = 0x08; // osdvofst
XBYTE[0x2D34] = 0x30; // osdhofst
XBYTE[0x2DE2] = 0x01; // field mode
status = 0;
}
#endif
#ifdef PAL16
if(index==7)// CCIR601(16-bit) PAL output
{
XBYTE[0x201C] = 0x00; // using 27MHz for TV
XBYTE[0x2D00] = 0x07; // tvdspmode
XBYTE[0x2D08] = 0x80; // vldx0
XBYTE[0x2D09] = 0x00; // vldx0
XBYTE[0x2D0A] = 0x04; // vldy0
XBYTE[0x2D0B] = 0x00; // vldy0
XBYTE[0x2D0C] = 0x4f; // vldx1
XBYTE[0x2D0D] = 0x03; // vldx1
XBYTE[0x2D0E] = 0x23; // vldy1
XBYTE[0x2D0F] = 0x01; // vldy1
XBYTE[0x2D1B] = 0x00; // imgvofst
XBYTE[0x2D1C] = 0x00; // imgvofst
XBYTE[0x2D1D] = 0x00; // imghofst
XBYTE[0x2D1E] = 0x00; // imghofst
XBYTE[0x2D21] = 0x20; // osdsubsamp
XBYTE[0x2D33] = 0x08; // osdvofst
XBYTE[0x2D34] = 0x30; // osdhofst
XBYTE[0x2DE2] = 0x01; // field mode
status = 0;
}
#endif
#ifdef UPS051
if(index==8)// UPS051 output
{
XBYTE[0x201C] = 0x02; // using 24MHz for unipac TFT-LCD
XBYTE[0x2D00] = 0x08; // tvdspmode
XBYTE[0x2D02] = 0x05; // vline
XBYTE[0x2D03] = 0x01; // vline
XBYTE[0x2D04] = 0x59; // hpixel
XBYTE[0x2D05] = 0x03; // hpixel
XBYTE[0x2D06] = 0x03; // vsyncw
XBYTE[0x2D07] = 0x62; // hsyncw
XBYTE[0x2D08] = 0x86; // vldx0
XBYTE[0x2D09] = 0x00; // vldx0
XBYTE[0x2D0A] = 0x16; // vldy0
XBYTE[0x2D0B] = 0x00; // vldy0
XBYTE[0x2D0C] = 0x48; // vldx1
XBYTE[0x2D0D] = 0x03; // vldx1
XBYTE[0x2D0E] = 0xF1; // vldy1
XBYTE[0x2D0F] = 0x00; // vldy1
XBYTE[0x2D1B] = 0x00; // imgvofst
XBYTE[0x2D1C] = 0x00; // imgvofst
XBYTE[0x2D1D] = 0x00; // imghofst
XBYTE[0x2D1E] = 0x00; // imghofst
XBYTE[0x2D20] = 0x1a; // imgsubsamp
XBYTE[0x2D21] = 0x1a; // osdsubsamp
XBYTE[0x2D33] = 0x00; // osdvofst
XBYTE[0x2D34] = 0x1a; // osdhofst
XBYTE[0x2DE2] = 0x00; // frame mode
status = 0;
}
#endif
#ifdef AU015AN02
if(index==13)// AU015AN02 output
{
XBYTE[0x201C] = 0x00; // using 27MHz for AU digital I/F TFT-LCD
XBYTE[0x20E6] = 0x80; // phase adjustment
XBYTE[0x2D00] = 0x09; // tvdspmode
XBYTE[0x2D02] = 0x05; // vline
XBYTE[0x2D03] = 0x01; // vline
XBYTE[0x2D04] = 0x59; // hpixel
XBYTE[0x2D05] = 0x03; // hpixel
XBYTE[0x2D06] = 0x15; // vsyncw
XBYTE[0x2D07] = 0x11; // hsyncw
XBYTE[0x2D08] = 0x86; // vldx0
XBYTE[0x2D09] = 0x00; // vldx0
XBYTE[0x2D0A] = 0x03; // vldy0
XBYTE[0x2D0B] = 0x00; // vldy0
XBYTE[0x2D0C] = 0xE0; // vldx1
XBYTE[0x2D0D] = 0x02; // vldx1
XBYTE[0x2D0E] = 0xDE; // vldy1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -