📄 mstar.c
字号:
#include <math.h>
#include "types.h"
#include "board.h"
#include "ms_reg.h"
#include "global.h"
#include "panel.h"
#include "adjust.h"
#include "ms_rwreg.h"
#include "debug.h"
#include "misc.h"
#include "ddc.h"
#include "power.h"
#include "detect.h"
#include "msOsd.h"
#include "gamma.h"
#include "menudef.h"
#include "menufunc.h"
//*******************************************************************
//
// Constant Definition
//
//*******************************************************************
#define ADC2Sets 0//1// 1 for chip with 2 ADC(9x5x & 9x4x)
#define FixDClk 0
#define OutDClk1 108
#define OutDClk2 135
#if WidePanel
idata BYTE BlackVstartOffset;
idata bit NormalSizeFlag;
#endif
#if PanelLVDS
//14.318 * 15 * 8 / 3.5 = 490.9, 490.9<<19=257374477.16, 490.9<<3=8=3927
#define DClkFactor 257374477ul
//#define DClkFactor 257650102// use 215 as base
#else
//14.318 * 15 * 8 / 4 = 429.54, 429.54<<19=225202667.52, 429.54<<3=8=3436.32
#define DClkFactor 225202667ul
//#define DClkFactor 257650102// use 215 as base
#endif
#define FreeRunDClk (DWORD)DClkFactor/PanelDCLK
#define SetModeMsg 0// 1
#if SetModeMsg
#define Out_i printData
#define Out_s printMsg
#else
#define Out_i
#define Out_s
#endif
//*******************************************************************
//
// local declaration
//
//*******************************************************************
void mStar_SetupInputPort(void);
void mStar_SetupFreeRunMode(void);
void mStar_SetupADC(void);
Bool mStar_SetCaptureWindow(void);
void mStar_SetScalingFactor(void);
void mStar_SetupPattern(void);
Bool mStar_SetPanelTiming(void);
void mStar_InitADC(void);
void mStar_InitTCON(void);
void mStar_SetScalingFilter(BYTE filter);
void mStar_SetUserPref(void);
void mStar_ResetDClkPLL(void);
void CheckLineBuffer(void);
///////////////////////////////////////////////
//2005-10-21 UPDATE
void ScalerReset(void)
{
//mStar_WriteByte(REGBK, REGBANKSCALER);
// mStar_WriteByte(SWRST, 0x00);
// #endif MSTMCU
Set_ms_ResetZ(); // reset chipset
ForceDelay1ms(5);
Clr_ms_ResetZ();
// Initialize Scaler block
mStar_WriteByte(REGBK, REGBANKSCALER);
mStar_WriteByte(SWRST, 0x3F); // software reset
ForceDelay1ms(1);
mStar_WriteByte(SWRST, 0x00); // software reset
}
/////////////////////////////////END
#if PanelLGx08//PRV765_A_LG
void ModeTrack(void);
#elif (PanelAUEN05|PanelAU150XN07|PanelCPT190EA03|PanelAUEG01|PanelAUEG01_v2)
void ModeTrack(DWORD factor);
#endif
//++++++++++++++++++++++++++++++++++++
#if XGA //20031225 for 15" panel
#if OverDriver //Addey by YQ for overdriver 20041125
#define SSCSTEP 0x6F
#define SSCSPAN 0x163
/*
#elif (KF573_A_CPT_G09|IIYAMA_KF573_A_CPT_G09)
#define SSCSTEP 0x1B0
#define SSCSPAN 0x25
#elif PanelCPTXG08 //Dclk=79M SSC=3%
#define SSCSTEP 0xF7
#define SSCSPAN 0x15A
#elif PRV576_A_HST//Dclk=74M SSC=1%
#define SSCSTEP 0xE7
#define SSCSPAN 0x83
*/
#else
#define SSCSTEP 0x1B0
#define SSCSPAN 0x25
#endif
//++++++++++++++++++++++++++++++++++++
#else // SXGA 1280*1024
/*
#if (KF773S_A_CPT|IIYAMA_KF773S_A_CPT)
//Dclk=112M 20040301
#define SSCSTEP 0x15E
#define SSCSPAN 0x8F
#elif MA782S_A_CPT
#define SSCSTEP 0x15E
#define SSCSPAN 0x60
#elif RD772S_A_CPT
#define SSCSTEP 0x15E
#define SSCSPAN 0x4C
#elif WidePanel //70M 1%
#define SSCSTEP 0x17F
#define SSCSPAN 0x30
#elif PRV765S_A_CPT
#define SSCSTEP 0x15E
#define SSCSPAN 0x4C
#elif (BA789_A_AU|PRV786_NEWIC_A_AU_EN05)
#define SSCSTEP 0x160
#define SSCSPAN 0x34
#elif (Costdown_TSU56AK_AD_Audio_190EN03|Costdown_16AK_Audio_A_CMO_170E5|TSU56AK_AD_Audio_LTM190EX_L01\
|MX710W_AD_AU_M170XW01|Costdown_16AK_Audio_M170E5)
#define SSCSTEP 0xA7
#define SSCSPAN 0x163
#else
*/
#if (Medion&&PanelLTM190EX_L01)
#define SSCSTEP 0xA7
#define SSCSPAN 0x163
#else
// Dclk=130M SSC=0.8%
#define SSCSTEP 0x160
#define SSCSPAN 0x2C
#endif
//----------------------------------
#endif
//*******************************************************************
//
extern WORD testValue;
//*******************************************************************
// Function Name: mStar_Init(void)
//
// Description: Initialize mStar chip while 1st power on system
//
// Caller: mStar_InitADC(), mStar_InitTCON, mStar_SetupFreeRunMode()
// mStar_SetupInputPort() in mStar.c
// mStar_WriteByte(), mStar_WriteWord() in ms_rwreg.c
// mStar_WriteDDC1(), mStar_WriteDDC2() in ddc.c
// mStar_InitGamma() in gamma.c
// Osd_InitOSD() in osd.c
// Callee: Init_Device() in main.c
//*******************************************************************
void mStar_Init(void)
{
// Initialize Scaler block
ScalerReset();
mStar_WriteByte(DBFC, 0);
// power down contorl 0xF0~0xF1
mStar_WriteByte(PDMD, 0x00|VDD2LOW); // power up chip //2005-11-12 Update
mStar_WriteByte(TEST, 0x00); // ???? important
mStar_WriteByte(REGBK, REGBANKADC);
mStar_WriteByte(TESTEN, 0x80);
#if ForceLvdsToRsds //tony 25/11/2003
#if NewEA03
mStar_WriteByte(TST_REG, 0x80);
#else
mStar_WriteByte(TST_REG, 0x8b);
#endif
#elif ForceLvdsToTTL
mStar_WriteByte(TST_REG, 0x83);
#elif ForceLvdsToTTLTcon
mStar_WriteByte(TST_REG, 0x87);
#else
mStar_WriteByte(TST_REG, 0x00);
#endif
mStar_WriteByte(REGBK, REGBANKSCALER);
#if 1 //PanelCPTEA03
mStar_WriteByte(REGBK, REGBANKADC);
mStar_WriteByte(TESTEN, 0x80);
// mStar_WriteByte(TESTA3, 0x20);
mStar_WriteByte(TESTA4, 0x02);
mStar_WriteByte(TESTEN, 0x00);
mStar_WriteByte(REGBK, REGBANKSCALER);
#endif
#if(PanelCPTXG08|PanelCPTEA03|PanelHstSX84|PanelHanStarSXA1|PanelHstSX84_F|PanelCPTXP02)
mStar_WriteByte(MDCTRL,BIT7);
mStar_WriteByte(PLLCTRL2,BIT7);
#endif
mStar_WriteByte(TEST, 0x00); // ???? important
//=========================================================================
// display timing
// output DE size // 0x10~0x17
mStar_WriteWord(DEVST_H, 0); // Vert. DE start
mStar_WriteWord(DEVEND_H, PanelHeight-1); // Vert. DE end
mStar_WriteWord(DEHST_H, PanelHStart); // Hor. DE start
mStar_WriteWord(DEHEND_H, PanelHStart+PanelWidth-1); // Hor. DE end
// Scaling Image window size 0x18~0x1D
mStar_WriteWord(SIHST_H, PanelHStart);
mStar_WriteWord(SIHEND_H, PanelHStart+PanelWidth-1);
mStar_WriteWord(SIVEND_H, PanelHeight-1);
// Output Sync Timing //0x1E~0x26
mStar_WriteWord(VDTOT_H, PanelVTotal-1); // output vtotal
mStar_WriteWord(VSST_H, PanelVTotal-PanelVStart); // vsync start
mStar_WriteWord(VSEND_H, PanelVTotal-PanelVSyncBackPorch); //vsync end
mStar_WriteWord(HDTOT_H, PanelHTotal-1); // output htotal
mStar_WriteByte(HSEND, PanelHSyncWidth-1); //
#if (PanelAUEN05|PanelAUEG01|PanelAUEG01_v2)//|PanelTB141LA1) //tony 20040117
mStar_WriteByte(OSCCTRL1, 0x53); // enable auto-htotal
#else
mStar_WriteByte(OSCCTRL1, LCM_B|HSRM_B|AHRT_B|CTRL_B); // enable auto-htotal
#endif
mStar_WriteByte(OSCCTRL2, ATEN2_B); // setup clock mode
// output control // 0x42~0x44
mStar_WriteByte(OCTRL1, (LTIM_B&LVDS_TIMode)|(PanelSwapOddRB&ORBX_B)|(PanelSwapEvenRB&ERBX_B)| // setup output port
(PanelSwapMLSB&MLXT_B)|(PanelSwapOddML&OMLX_B)|(PanelSwapEvenML&EMLX_B)); // setup
#if PanelAU150XN07
// mStar_WriteByte(OCTRL1, mStar_ReadByte(OCTRL1)|LCPS);
#endif
#if PanelRSDS
mStar_WriteByte(OCTRL2, TCOP_B | (PanelDualPort&DPO_B)|(PanelSwapPort&DPX_B));
mStar_WriteByte(OCTRL3, 0x1F); // RSDS output with all GPO
#elif PanelLVDS
//mStar_WriteByte(OCTRL2, (PanelDualPort&DPO_B)|(PanelSwapPort&DPX_B));
mStar_WriteByte(OCTRL2, (PanelDualPort&DPO_B)|(PanelSwapPort&DPX_B)| DOT_B);//Albert 20031008
mStar_WriteByte(OCTRL3, ENRT_B); // LVDS output
#elif PanelTTL
mStar_WriteByte(OCTRL2, TCOP_B |(PanelDualPort&DPO_B)|(PanelSwapPort&DPX_B));
mStar_WriteByte(OCTRL3, 0); // TTL Output
#endif
// output signal control 0xF2
//mStar_WriteByte(OSCTRL, 0x00); // output signal polarity control
mStar_WriteByte(OSCTRL, (PanelDClkDelay<<4) | (OCLK_B&PanelInvDClk) | (ODE_B&PanelInvDE) |
(OVS_B&PanelInvVSync) | (OHS_B&PanelInvHSync)); // output signal polarity control
// output driving current 0xF5
/*
mStar_WriteByte(ODRV, (PanelDCLKCurrent<<6) | (PanelDECurrent<<4) |
(PanelOddDataCurrent<<2) | PanelEvenDataCurrent); // setup output driving current
*/ //different from datasheet
mStar_WriteByte(ODRV, (PanelDCLKCurrent<<4) | (PanelDECurrent<<6) |
(PanelOddDataCurrent<<2) | PanelEvenDataCurrent);
//=========================================================================
// Clock generator control 0xD0~0xDB
mStar_WriteByte(PLLCTRL1, 0x00);
#if (PanelCPTXG08|PanelCPTEA03|PanelHstSX84|PanelHanStarSXA1|PanelHstSX84_F|PanelCPTXP02)
mStar_WriteByte(PLLCTRL2, BIT7); //tony 22/12/03 change
#else
mStar_WriteByte(PLLCTRL2, 0x00); // setup output pll & master pll
#endif
// Master PLL
mStar_WriteByte(MPLL_M, 0x6F); // set master pll as 215 MHz & drive current
// output dclk setting
mStar_WriteByte(LPLL_M, 0x48); // output pll spread spectrum control
#if PanelLVDS
mStar_WriteByte(LPLL_CTL2, 0x1B);//0x0B); // output pll type & divider
#else //select Output PLL type BIT5
mStar_WriteByte(LPLL_CTL2, 0x3B);//0x2B); // output pll type & divider
#endif
// Spectrum control
mStar_WriteWord(LPLL_STEP_H, SSCSTEP);
mStar_WriteWord(LPLL_SPAN_H, SSCSPAN);
// Dither control //0x36~0x38
#if PanelDither==6
mStar_WriteByte(DITHCTRL, 0x05);
#else
mStar_WriteByte(DITHCTRL, 0x00);
#endif
mStar_WriteByte(DITHCOEF, 0x2D);
//--------------------------------------
#if (PanelCPTEA03|PanelCPTXG08|PanelHstSX84|PanelHanStarSXA1|PanelHstSX84_F|PanelCPTXP02)//for black short line in gray pattern while no flicker 2003/12/19
mStar_WriteByte(TRFN, 0x32); //tony 22/12/03
#else
mStar_WriteByte(TRFN, 0x12); //dither method
#endif
//====================================================================
mStar_WriteByte(DDCCTRL, 0x00); // DDC control
// display port
// brightness 0x2A~0x2D
#if !UsePWMBrightness
mStar_WriteByte(BRC, BRC_B); //Enable birghtness control
#else
mStar_WriteByte(BRC, mStar_ReadByte(BRC)&~BRC_B); // disable birghtness control
#endif
// contrast 0x2E~0x31
#if (DVII_Board|DSUB_Board|TSUM_Board)
mStar_WriteByte(CNTR, 0x61); // enable contrast function and set 0 as center
#else
mStar_WriteByte(CNTR, CNTR_B); // enable contrast function and set 0 as center
#endif
// border color 0x32~0x35
mStar_WriteByte(FWC, 0);//FWC_B); // panel background color
#if 0//UsesRGB
mStar_WriteByte(FTAPEN, 0x02); // enable srgb function
#else
// Filter coefficient(sharpness) 0x65~0x69
mStar_WriteByte(FTAPEN, 0x01);//2); // enable srgb function
mStar_WriteByte(FTAPC1, 0x00);
mStar_WriteByte(FTAPC2, 0x40);
mStar_WriteByte(FTAPC3, 0x88);
mStar_WriteByte(FTAPC4, 0x48);
#endif
// Auto Adjustment 0x78~
mStar_WriteByte(ATOCTRL, 0x1); // enable auto position
#if (PanelCPTXG08|PanelCPTEA03|PanelHstSX84|PanelHanStarSXA1|PanelNEC150XG03\
|PanelNECSVA10276|PanelHstSX84_F|PanelCMO170E5|PanelCPTXP02)
mStar_WriteByte(ATPCTRL, 0x11); //20031222
#elif PanelHST170ME13
mStar_WriteByte(ATPCTRL, 0x15); //enable auto phase
#else
mStar_WriteByte(ATPCTRL, 0x19); //enable auto phase
#endif
mStar_WriteByte(ATGCTRL, 0);//011); // enable auto Gain
#if PanelCPTEA03 //tony 22/12/03
mStar_WriteByte(ATPTH, 0x06);
#elif (PanelCPTXG08|PanelCPTXP02)
mStar_WriteByte(ATPTH, 0x04);
#elif (PanelHstSX84|PanelHanStarSXA1|PanelHstSX84_F)
mStar_WriteByte(ATPTH, 0x07);
#else
mStar_WriteByte(ATPTH, 0x1C); // enable auto phase
#endif
mStar_WriteByte(AOVDV, 0x40);
// VSync Status
mStar_WriteByte(LHMARGIN, 0x30);
mStar_WriteByte(LSMARGIN, 0x20);
// PWM control 0xC3
#if MSTMCU
mStar_WriteByte(PWMDIV0, 0x06);
mStar_WriteByte(PWM1C, 0x7F);
mStar_WriteByte(PWM0C, 0x7F);
#else
mStar_WriteByte(PWM0C, 0x7F);
#if DSUB_Board
mStar_WriteByte(PWM1C, 0xFF);
#else
mStar_WriteByte(PWM1C, 0x7F);
#endif
#endif
// interrupt control
mStar_WriteByte(INTCTRL, 0x20);
mStar_WriteByte(INTPULSE, 0x0F);
mStar_WriteByte(INTENA, 0);
mStar_WriteByte(HSTOL, 1);//10);
mStar_WriteByte(VSTOL, 1);//5);
mStar_WriteByte(HSPRD_H, 0x00);//10);
//#if MSTMCU
mStar_WriteByte(0x62, 0x60); //I/O setting
#if ChipPins==PINS_128
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -