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

📄 gsel.h

📁 GM5621原代码
💻 H
📖 第 1 页 / 共 3 页
字号:
// 	Genesis-Microchip comm handler functions
///////////////////////////////////////////////////////////////////////////////
typedef struct gmt_MsgStruct_s
{
	BYTE	len; // length of this command packet
	BYTE	cmd;
	BYTE BUF[254];
} gmt_MsgStruct;

typedef enum
{
	gmd_SERIAL_USE,
	gmd_DDC2BI_USE
}gmt_HANDLER_USE;

typedef enum
{
	gmd_DVI_DDC2Bi_CHANNEL,
	gmd_VGA_DDC2Bi_CHANNEL
}gmt_DDC2BI_CHANNEL;

void gm_UartInit(DWORD D_CpuClock, DWORD D_BaudRate);
void gm_SerialHandler(void);
void gm_Ddc2biHandler(void);
void gm_DDC2BiInit(gmt_DDC2BI_CHANNEL DDC2Bi_channel);

void far gm_StartRcvMsg( void );
gmt_MsgStruct *  gm_CommsGetMessage(BYTE B_WhichCommHandler);
gmt_RET_STAT gm_CommsSendReply( gmt_MsgStruct far * Stp_CommMsg, gmt_HANDLER_USE   WhichCommHandler);
//void gm_Print (BYTE * Bp_str, WORD W_value);

BYTE* gm_DDC2Bi_GetMessage (BYTE* Bp_Dest);
BYTE gm_DDC2Bi_GetStatus(void);
gmt_RET_STAT gm_DDC2Bi_SendMessage (BYTE far * Bp_Src);

void far gm_Print (const char far *Bp_Str, WORD W_Value);
void gm_Printf (BYTE * Bp_str, WORD value1, WORD value2, ...);

///////////////////////////////////////////////////////////////////////////////
// Genesis-Microchip data type define for gamma functions
///////////////////////////////////////////////////////////////////////////////
typedef enum
{
	gmd_INPUT_GAMMA_TABLE 	= 1,
	gmd_OUTPUT_GAMMA_TABLE 	= 2,
	gmd_VIDEO_GAMMA_TABLE 	= 3,
	gmd_ALL_COLORS 			= 0,
	gmd_RED 						= 0x10,
	gmd_GREEN 					= 0x20,
	gmd_BLUE 					= 0x30
}gmt_GAMMA_SELECT;
gmt_RET_STAT gm_DecompressLoadGammaTableMain(gmt_GAMMA_SELECT GammaSelect, BYTE ROM* Bp_SrcGammaTable);
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// 	Genesis-Microchip nvram functions
///////////////////////////////////////////////////////////////////////////////
gmt_RET_STAT gm_InitNVRAM(void);
gmt_RET_STAT far gm_InitNVRAMLong( gmt_BLOCKINFO ROM *pRomDir, BYTE ROM *pRomDirSize,
						 gmt_Nvram_RW_Function pNVRAM_ReadBlkFn,
						 gmt_Nvram_RW_Function pNVRAM_WriteBlkFn );
gmt_RET_STAT far gm_InitNVRAMDirectory(void);

gmt_BLOCKINFO far gm_GetNVRAMBlockInfo(BYTE B_BlockType, BYTE B_BlockIndex);
gmt_RET_STAT far gm_ReadNVRAMAbsolute(WORD Address, BYTE * Bp_Buffer, WORD W_Length);
gmt_RET_STAT far gm_WriteNVRAMAbsolute(WORD Address, BYTE * Bp_Buffer, WORD W_Length);
gmt_RET_STAT gm_ReadNVRAMBlock(BYTE B_BlockType, BYTE B_Index, BYTE * Bp_Buffer, WORD W_Offset, WORD W_Length );
gmt_RET_STAT gm_WriteNVRAMBlock(BYTE B_BlockType, BYTE B_Index, BYTE * Bp_Buffer, WORD W_Offset, WORD W_Length);


//**************************************************************
//	         G S E L    C O N S T A N T S
//**************************************************************
#if defined(PHOENIX) || defined(TUCSON) || defined(PHOENIX_U) 
	#define gmc_NumDriverTimers 11 // 5 gsel + 5 irom = 10 timers when using IROM AB
#elif defined(OAK)
	#define gmc_NumDriverTimers 12 // 7 gsel + 5 irom = 12 timers when using IROM AB
#else
	#define gmc_NumDriverTimers 12 // 5 gsel + 6 irom = 11 timers when using IROM AB
#endif
//#define gmc_SerialBaudRate 115200  // should set to 57600 if we use mcuclock of 20 or 24mhz with 8051
extern DWORD ROM gmc_SerialBaudRate;
extern DWORD ROM gmc_T_CLK_KHZ;
extern BYTE  ROM gmc_R_CLK_MHZ;
extern DWORD ROM gmc_CPU_CLK_KHZ;
extern DWORD ROM gmc_OCM_CLK_POWERDOWN;
extern BYTE  ROM gmc_CPU_SPEED;
extern BYTE  ROM gmc_CPU_WaitStates_NS;
extern WORD  ROM gmc_I2cSclk_Khz;
extern WORD  ROM gmc_CCF_NVRAM_SCRATHPAD;
extern WORD  ROM gmc_BrightnessPWMPort;
//extern BYTE  ROM gmc_SPI_Clock_Sel;
extern BYTE  	  gmc_SPI_Clock_Sel;
extern BYTE  ROM gmc_ADC_OFFSET2_YUV_MIN_VALUE;
extern BYTE  ROM gmc_ADC_OFFSET2_Y_MAX_VALUE;
extern BYTE  ROM gmc_ADC_OFFSET2_UV_MAX_VALUE;

extern BYTE  ROM gmc_DPllDivider;
extern BYTE  ROM gmc_DClkDivider;
extern BYTE  ROM gmc_FreeRunPllDiv;
extern BYTE  ROM gmc_FreeRunClkDiv;
extern WORD  gmc_PowerUpPanelTiming;
extern WORD  gmc_PowerDownPanelTiming;
extern BYTE  gmc_PowerDownTimeIn10ms;
extern WORD  gmc_PanelWidth;
extern WORD  gmc_PanelHeight;
extern WORD  gmc_PanelVActiveStart;
extern WORD  gmc_PanelVActiveEnd;
extern BYTE  gmc_PanelDepth;		// Add for Panel array, 0401
extern BYTE  gmc_PanelMinHTotal;
extern WORD  gmc_PanelTypVTotal;
extern DWORD gmc_PanelMaxPClk;
extern WORD  gmc_PanelMaxVTotal;
extern WORD  gmc_PanelMinVTotal;
extern BYTE  gmc_PanelTwoPixelPerClk;
extern BYTE  gmc_Panel_Spread_Spect_En;
extern BYTE  gmc_PanelSpreadSpectrumCtrl;
extern BYTE  ROM gmc_BKGND_HSTART;
extern BYTE  ROM gmc_BKGRN_VSTART;

extern BYTE  ROM gmc_IPHS_ActiveStart;
extern BYTE  ROM gmc_IPVS_ActiveStart;

extern BYTE  ROM gmc_InputTimingStableCount;

//**************************************************************
//          ACM-3D
//**************************************************************
//Macro, structure, variables, functions, for ACM-3D

//******************************************************************************
//  T Y P E    D E F I N I T I O N S
//******************************************************************************

#ifdef __PARADIGM__
#pragma pack(push)
#pragma pack(1)
#endif //__PARADIGM__


//
// Region definition struct, 3 axies with 3 params
//
typedef struct gmt_ACM3DRegionDefStruct
{
	WORD	W_HueCenter;	// 0..359, 9u, ACM_Zx_HUE_CENTER
	BYTE	B_HueAperture;	// 0..180, 8u, ACM_Zx_HUE_APERTURE
	BYTE	B_R1;			// 0..255, 8u, ACM_Zx_SAT_R1
	BYTE	B_R2;			// 0..255, 8u, ACM_Zx_SAT_R2
	BYTE	B_Y1;			// 0..255, 8u, ACM_Zx_LUMI1
	BYTE	B_Y2;			// 0..255, 8u, ACM_Zx_LUMI2
	BYTE	B_HueFade;		// 0, 5..63, 6u, ACM_Zx_HUE_FADE
	BYTE	B_SatFade;		// 5..63, 6u, ACM_Zx_SAT_FADE
	BYTE	B_LumiFade;		// 5..63, 6u, ACM_Zx_LUMI_FADE
} gmt_ACM3DRegionDef;


//*************************************************************************
//
//	A C M     C O R R E C T I O N     P A R A M E T E R S
//
//*************************************************************************
//
// Correction parameters definition struct, 9 params for each Region
//
typedef struct gmt_ACM3DCorrectionParamsStruct
{
	SBYTE	sB_HueOffs;		// -127..+128, Range TBD, 8s, ACM_Zx_HUE_OFFS
	SBYTE	sB_HueGain;		// -8..+7, Range TBD, 4s,  ACM_Zx_HUE_GAIN
	SBYTE	sB_SatOffs;		// -127..+128, Range TBD, 8s, ACM_Zx_SAT_OFFS
	SBYTE	sB_SatGain;		// 0..+127, 7u, Range TBD,  ACM_Zx_SAT_GAIN
	SBYTE	sB_LumiOffs;		// -127..+128, Range TBD, 8s, ACM_Zx_LUMI_OFFS
	SBYTE	sB_LumiGain;		// 0..+127, 7u, Range TBD,  ACM_Zx_LUMI_GAIN
	SBYTE	sB_U_Vect;		// 128..+127, 8s, ACM_Zx_U_VECT, for REGION_BLUE Stretch, deft=0x00
	SBYTE	sB_V_Vect;		// 128..+127, 8s, ACM_Zx_V_VECT, for REGION_BLUE Stretch, deft=0x00
	BYTE	B_Alpha;				// 1.4u, 0..1.9375, ACM_Zx_ALPHA, for ext. HW blocks,  deft=0x10
} gmt_ACM3DCorrectionParams;

//
// Run-time Calculated Correction parameters definition struct, 5 params for each Region
//
typedef struct gmt_ACM3DCalcCorrParamsStruct
{
	WORD	W_1_HueFade;	// 0, 1/5...1/63, 0.10u, ACM_Zx_HUE_FADEDIV
	WORD	W_1_RLo;		// 1/5...1/63, 0.10u, ACM_Zx_SATR1_SOFT
	WORD	W_1_RUp;		// 1/5...1/63, 0.10u, ACM_Zx_SATR2_SOFT
	WORD	W_1_YLo;		// 1/5...1/63, 0.10u, ACM_Zx_LUMI1_SOFT
	WORD	W_1_YUp;		// 1/5...1/63, 0.10u, ACM_Zx_LUMI2_SOFT
} gmt_ACM3DCalcCorrParams;

#ifdef __PARADIGM__
#pragma pack(pop)
#endif //__PARADIGM__


//define hue center of each axis for six-axis color control
#define HUE_CENTER_MAGENTA		0x32		//50 degree
#define HUE_CENTER_RED			0x6E		//110 degree
#define HUE_CENTER_YELLOW		0xAA		//170 degree
#define HUE_CENTER_GREEN		0xE6		//230 degree
#define HUE_CENTER_CYAN			0x122		//290 degree
#define HUE_CENTER_BLUE			0x15E		//350 degree

//
//Six-Axis color control enum
//
typedef enum SixAxisEnum
{
	RED_AXIS,
   YELLOW_AXIS,
   GREEN_AXIS,
   CYAN_AXIS,
   BLUE_AXIS,
   MAGENTA_AXIS,
   MAX_AXIS_NUM
}SixAxisType;

extern WORD	 ROM gmc_ACM_ZONE1_START;
extern gmt_ACM3DRegionDef far * gPa_ACM3DRegionDefs; // = (gmt_ACM3DRegionDef far *)&gma_ACM3DRegionDefs;
extern gmt_ACM3DCorrectionParams far * gPa_ACM3DCorrectionParamDefs; // = 	(gmt_ACM3DCorrectionParams far *)&gma_ACM3DCorrectionParamDefs;

//  functions for ACM-3D
void gm_ACM3DInit( void );
void gm_ACM3DUpdateCtrl(BYTE B_Enable, BYTE B_WindowCtrl);
void gm_ACM3DSetRegionDefinitionTablePtr(gmt_ACM3DRegionDef far * pt_stRegionDef);
void gm_ACM3DSetCorrectionParamsTablePtr(gmt_ACM3DCorrectionParams far * pt_stCorrParams);
//void gm_ACM3DUpdateSaturation(BYTE B_Region, BYTE B_SaturationAdjuster);
//void gm_ACM3DUpdateHue(BYTE B_Region, BYTE B_HueAdjuster);
void gm_ACM3DUpdateLumaGain(BYTE B_Region, BYTE B_LumaGain);
void gm_ACM3DUpdateLumaOffset(BYTE B_Region, SBYTE B_LumaOffset);
void gm_ACM3DUpdateSaturationGain(BYTE B_Region, BYTE B_SaturationGain);
void gm_ACM3DUpdateSaturationOffset(BYTE B_Region, SBYTE B_Saturationoffset);
void gm_ACM3DUpdateHueGain(BYTE B_Region, SBYTE B_HueGain);
void gm_ACM3DUpdateHueOffset(BYTE B_Region, SBYTE B_HueOffset);

void gm_ACM3DLoadRegionSettings(gmt_ACM3DRegionDef ROM* pt_stRegionDef, gmt_ACM3DCorrectionParams ROM* pt_stCorrParams);

//six-axis color control
void gm_ACM3DAdjustSixAxisControl(SixAxisType axisId, SBYTE sB_Offset);

void gm_ACM3DReadAll( void );

//**************************************************************
//				R E G B L O C K    
//**************************************************************
    //typedef unsigned char   gmt_RegBlock;
	//void gm_ProcessRegBlock(const gmt_RegBlock *DataPtr);
    
    
    // return high and low bytes of a WORD
    #define byte3(a) (((a) >> 24) & 0xff)
    #define byte2(a) (((a) >> 16) & 0xff)
    #define byte1(a) (((a) >> 8) & 0xff)
    #define byte0(a)  (0xff & (a))
    
    
    // define regblockwrite constant and macros.
    
    // regblock opcodes
    /* bit no:  76543210
    			||||||\\------ 2 most significant bits of address (b7,b1,b0)
                |\\\\\-------- 5 bit opcode function (b6..b2)
    			 \------------ 1 bit end of block indicator 
    
     */
    #define OpCodeBits   	0xfc   // middle 5 bits used for opcode (including end of block indicator)
    #define OpCodeStartBit 2
    #define	RBWriteByte	    0
    #define	RBWriteWord	   	( 1 << OpCodeStartBit)
    #define	RBWriteTriBytes	( 2 << OpCodeStartBit)
    #define	RBWriteDWord   	( 3 << OpCodeStartBit)
    #define RBDelay         ( 4 << OpCodeStartBit)
    #define	RBWriteBytePB	   ( 5 << OpCodeStartBit)
    #define	RBWriteWordPB	   ( 6 << OpCodeStartBit)
    #define	RBWriteTriBytesPB  ( 7 << OpCodeStartBit)
    #define RBWriteDWordPB	   ( 8 << OpCodeStartBit)
     
    #define RegBlockEnd    	( 1 << 7 )
    // opcode has most significant bits of address as well, define mask for address bits
    #define RegBlockHiAddrBitsMask 3

    typedef unsigned char   gm_RegBlockType;
    
    // macros to generate regblock array of opcode, address, data tuples
    //  note that each tuple may consist of between 3 and 6 bytes.
    #define gm_DefineRegBlock(name) \
    		 gm_RegBlockType ROM name [] = {
    //  Caution, address should be <= 0x3ff as address does not get masked before being ored with command
    //    if register names from gmax_reg.h are used this constraint will be enforced automatically
    #define RB_Delay(ms2delay) \
    	    (BYTE) RBDelay, (BYTE) (ms2delay)
    
    #define RB_DelayEnd(ms2delay) \
    	    (BYTE) (RBDelay | RegBlockEnd), (BYTE) (ms2delay) };
    
    #define RB_WriteByte(address,bdata) \
            (BYTE) RBWriteByte | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (bdata)
    
    #define RB_WriteWord(address,wdata) \
            (BYTE) RBWriteWord | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), \
            (BYTE) byte1(wdata), (BYTE) byte0(wdata)
    
    #define RB_WriteTriBytes(address,ddata) \
            (BYTE) RBWriteTriBytes | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), \
            (BYTE) byte2(ddata), (BYTE) byte1(ddata), (BYTE) byte0(ddata)
    
    #define RB_WriteDWord(address,ddata) \
            (BYTE) RBWriteDWord | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), \
            (BYTE) byte3(ddata), (BYTE) byte2(ddata), (BYTE) byte1(ddata), (BYTE) byte0(ddata)
    
    #define RB_WriteByteEnd(address,bdata) \
            (BYTE) RegBlockEnd | RBWriteByte | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (bdata) };
    
    #define RB_WriteWordEnd(address,wdata) \
            (BYTE) RegBlockEnd | RBWriteWord | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), \
            (BYTE) byte1(wdata), (BYTE) byte0(wdata) };
    
    #define RB_WriteTriBytesEnd(address,ddata) \
            (BYTE) RegBlockEnd | RBWriteTriBytes | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), \
            (BYTE) byte2(ddata), (BYTE) byte1(ddata), (BYTE) byte0(ddata) };
    
    #define RB_WriteDWordEnd(address,ddata) \
            (BYTE) RegBlockEnd | RBWriteDWord | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), \
            (BYTE) byte3(ddata), (BYTE) byte2(ddata), (BYTE) byte1(ddata), (BYTE) byte0(ddata) };
    
    #define RB_WriteByteParam(address,index) \
            (BYTE) RBWriteBytePB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index)
    
    #define RB_WriteWordParam(address,index) \
            (BYTE) RBWriteWordPB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index)
    
    #define RB_WriteTriBytesParam(address,index) \
            (BYTE) RBWriteTriBytesPB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index)
    
    #define RB_WriteDWordParam(address,index) \
            (BYTE) RBWriteDWordPB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index)
    				   
    #define RB_WriteByteParamEnd(address,index) \
            (BYTE) RegBlockEnd | RBWriteBytePB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index) };
    
    #define RB_WriteWordParamEnd(address,index) \
            (BYTE) RegBlockEnd | RBWriteWordPB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index) };
    
    #define RB_WriteTriBytesParamEnd(address,index) \
            (BYTE) RegBlockEnd | RBWriteTriBytesPB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index) };

    #define RB_WriteDWordParamEnd(address,index) \
            (BYTE) RegBlockEnd | RBWriteDWordPB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index) };

//  E N D   R E G B L O C K  M A C R O S    
 
#endif	//#ifndef	__GSEL_H__


⌨️ 快捷键说明

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