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

📄 mstar.c

📁 完整的软件学习--显示器驱动视频软件
💻 C
📖 第 1 页 / 共 5 页
字号:
#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 + -