📄 hx8824.c
字号:
/*********************************************************************
COPYRIGHT (C) Himax Technologies, Inc.
File name : HX8824.c
Description : Implement HX8824 control function
Author : Taylor
Create date : 2004/10/01
Modifications :
*********************************************************************/
#define _HX8824_C
/********************** Include Section *****************************/
#include "hx8824.h"
#include "rs232.h"
#include "osd.h"
#include "Key.h"
/**************** Function Implement Section ************************/
/* ================================================================
Name : Init_HX8824
Purpose : Initial HX8824 Device
Passed : None
Notes : None
================================================================ */
void Init_HX8824(void)
{
//***************** version B***********************************************
/*
I2CWriteByte(HX8824_ADDR, 0x41, 0x10); // initial Image enhancement
I2CWriteByte(HX8824_ADDR, 0x42, 0xf0);
I2CWriteByte(HX8824_ADDR, 0x43, 0x00);
I2CWriteByte(HX8824_ADDR, 0x44, 0xf0);
I2CWriteByte(HX8824_ADDR, 0x45, 0x0c);
I2CWriteByte(HX8824_ADDR, 0x46, 0x80);
I2CWriteByte(HX8824_ADDR, 0x47, 0x80);
I2CWriteByte(HX8824_ADDR, 0x48, 0x00);
I2CWriteByte(HX8824_ADDR, 0x49, 0x00);
I2CWriteByte(HX8824_ADDR, 0x4A, 0x80);
I2CWriteByte(HX8824_ADDR, 0x4B, 0x00);
*/
I2CWriteByte(HX8824_ADDR, 0x14, 0x00);
I2CWriteByte(HX8824_ADDR, 0x15, 0x00);
I2CWriteByte(HX8824_ADDR, 0x16, 0x00);
I2CWriteByte(HX8824_ADDR, 0x17, 0x00);
I2CWriteByte(HX8824_ADDR, 0x19, 0x02);
I2CWriteByte(HX8824_ADDR, 0xD6, 0x18); //PWM control2 default value
I2CWriteByte(HX8824_ADDR, 0xD7, 0x12); //PWM control2 default value
I2CWriteByte(HX8824_ADDR, 0xD8, 0x00); //PWM control2 default value
I2CWriteByte(HX8824_ADDR, 0xD9, 0x00); //PWM control2 default value
I2CWriteByte(HX8824_ADDR, 0xDA, 0x00); //PWM control2 default value
I2CWriteByte(HX8824_ADDR, 0xDB, 0x00); //PWM control2 default value
//I2CWriteByte(HX8824_ADDR, 0x76, 0x07); // bitwise for 3 channel
I2CWriteByte(HX8824_ADDR, 0xE3, 0x01); // TCON bypass
//***************** Version A************************************************
/*
I2CWriteByte(HX8824_ADDR, 0x41, 0x10); // initial Image enhancement
I2CWriteByte(HX8824_ADDR, 0x42, 0x00);
I2CWriteByte(HX8824_ADDR, 0x43, 0x80);
I2CWriteByte(HX8824_ADDR, 0x44, 0x80);
I2CWriteByte(HX8824_ADDR, 0x45, 0x00);
I2CWriteByte(HX8824_ADDR, 0x46, 0x00);
I2CWriteByte(HX8824_ADDR, 0x70, 0x00); // enable dithering
*/
/*
I2CWriteByte(HX8824_ADDR, 0x71, 0x5F); // 0x5F dithering mode (78h will cause flicker in 32 gray in green?)
I2CWriteByte(HX8824_ADDR, 0x72, 0x2D); //
I2CWriteByte(HX8824_ADDR, 0x73, 0x36);
I2CWriteByte(HX8824_ADDR, 0x74, 0x8D);
I2CWriteByte(HX8824_ADDR, 0x75, 0x63);
*/
/*
I2CWriteByte(HX8824_ADDR, 0x71, 0x78); // 0x5F dithering mode (78h will cause flicker in 32 gray in green?)
I2CWriteByte(HX8824_ADDR, 0x72, 0x2D); //
I2CWriteByte(HX8824_ADDR, 0x73, 0x36);
I2CWriteByte(HX8824_ADDR, 0x74, 0x8D);
I2CWriteByte(HX8824_ADDR, 0x75, 0x63);
*/
I2CWriteByte(HX8824_ADDR, 0x71, 0x39); // 0x5F dithering mode (78h will cause flicker in 32 gray in green?)
I2CWriteByte(HX8824_ADDR, 0x72, 0x1B); //
I2CWriteByte(HX8824_ADDR, 0x73, 0x93);
I2CWriteByte(HX8824_ADDR, 0x74, 0x39);
I2CWriteByte(HX8824_ADDR, 0x75, 0x87);
//**************** PWM setting ***********************************************
/*
I2CWriteByte(HX8824_ADDR, 0xD7, 0x02); // Enable PWM
I2CWriteByte(HX8824_ADDR, 0xD8, 0x0D); // Enable PWM
I2CWriteByte(HX8824_ADDR, 0xD9, 0x00); // Enable PWM
DelayX1ms(10);
I2CWriteByte(HX8824_ADDR, 0xD6, 0x3E); // Enable PWM
*/
// Dump to RS232
//Puts_UART("HX8824 ID="),HexTobyStr((Byte)TestPattern),Puts_UART(byStr),Puts_UART("\r\n");
#if mode6448_8060
// Select source from VGA
bVideo = 0;
S1 = 1;
S2 = 0;
Mode = 0;
I2CWriteByte(HX8824_ADDR,0x00, 0x80); // input h size
I2CWriteByte(HX8824_ADDR,0x01, 0x02);
I2CWriteByte(HX8824_ADDR,0x02, 0xE0); // input v size
I2CWriteByte(HX8824_ADDR,0x03, 0x01);
I2CWriteByte(HX8824_ADDR,0x10, 0x1C); // input format select
I2CWriteByte(HX8824_ADDR,0x11, 0x04);
I2CWriteByte(HX8824_ADDR,0x20, 0xCC);
I2CWriteByte(HX8824_ADDR,0x21, 0x0C);
I2CWriteByte(HX8824_ADDR,0x22, 0xFF);
I2CWriteByte(HX8824_ADDR,0x23, 0x0F);
I2CWriteByte(HX8824_ADDR,0x20, 0xCC);
I2CWriteByte(HX8824_ADDR,0x21, 0x0C);
I2CWriteByte(HX8824_ADDR,0x22, 0xFF);
I2CWriteByte(HX8824_ADDR,0x23, 0x1F);
I2CWriteByte(HX8824_ADDR,0x24, 0x00);
I2CWriteByte(HX8824_ADDR,0x25, 0x00);
I2CWriteByte(HX8824_ADDR,0x24, 0x00);
I2CWriteByte(HX8824_ADDR,0x25, 0x04);
I2CWriteByte(HX8824_ADDR,0xA0, 0xD8);
I2CWriteByte(HX8824_ADDR,0xA1, 0x1D);
I2CWriteByte(HX8824_ADDR,0xA2, 0x00);
I2CWriteByte(HX8824_ADDR,0x90, 0xF8);
I2CWriteByte(HX8824_ADDR,0x91, 0x03);
I2CWriteByte(HX8824_ADDR,0x92, 0x48);
I2CWriteByte(HX8824_ADDR,0x93, 0x00);
I2CWriteByte(HX8824_ADDR,0x94, 0x90);
I2CWriteByte(HX8824_ADDR,0x95, 0x00);
I2CWriteByte(HX8824_ADDR,0x96, 0x20);
I2CWriteByte(HX8824_ADDR,0x97, 0x03);
I2CWriteByte(HX8824_ADDR,0x98, 0x92);
I2CWriteByte(HX8824_ADDR,0x99, 0x02);
I2CWriteByte(HX8824_ADDR,0x9A, 0x13);
I2CWriteByte(HX8824_ADDR,0x9B, 0x00);
I2CWriteByte(HX8824_ADDR,0x9C, 0x26);
I2CWriteByte(HX8824_ADDR,0x9D, 0x00);
I2CWriteByte(HX8824_ADDR,0x9E, 0x58);
I2CWriteByte(HX8824_ADDR,0x9F, 0x02);
//***************** PLL ********************************************************
I2CWriteByte(HX8824_ADDR, 0xD0, 0x03); // P1
I2CWriteByte(HX8824_ADDR, 0xD1, 0x04); // P2
I2CWriteByte(HX8824_ADDR, 0xD2, 0x08); // N
I2CWriteByte(HX8824_ADDR, 0xD3, 0x77); // M: 120-1
I2CWriteByte(HX8824_ADDR, 0xD4, 0x00); // M
#endif
//**************************************************************************************
#if mode6448_8048
// Select source from VGA
bVideo = 0;
S1 = 1;
S2 = 0;
Mode = 1;
I2CWriteByte(HX8824_ADDR, 0x10, 0x1C);
I2CWriteByte(HX8824_ADDR, 0x11, 0x04);
I2CWriteByte(HX8824_ADDR, 0x20, 0x00);
I2CWriteByte(HX8824_ADDR, 0x21, 0x10);
I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
I2CWriteByte(HX8824_ADDR, 0x23, 0x0F);
I2CWriteByte(HX8824_ADDR, 0x20, 0xCC);
I2CWriteByte(HX8824_ADDR, 0x21, 0x0C);
I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
I2CWriteByte(HX8824_ADDR, 0x23, 0x1F);
I2CWriteByte(HX8824_ADDR, 0x24, 0x00);
I2CWriteByte(HX8824_ADDR, 0x25, 0x00);
I2CWriteByte(HX8824_ADDR, 0x24, 0x00);
I2CWriteByte(HX8824_ADDR, 0x25, 0x04);
I2CWriteByte(HX8824_ADDR, 0xA0, 0xe2); // 88 e2
I2CWriteByte(HX8824_ADDR, 0xA1, 0x13); // 17 13
I2CWriteByte(HX8824_ADDR, 0xA2, 0x00);
I2CWriteByte(HX8824_ADDR, 0x00, 0x80);
I2CWriteByte(HX8824_ADDR, 0x01, 0x02);
I2CWriteByte(HX8824_ADDR, 0x02, 0xE0);
I2CWriteByte(HX8824_ADDR, 0x03, 0x01);
I2CWriteByte(HX8824_ADDR, 0x90, 0x20);
I2CWriteByte(HX8824_ADDR, 0x91, 0x04);
I2CWriteByte(HX8824_ADDR, 0x92, 0x3F);
I2CWriteByte(HX8824_ADDR, 0x93, 0x00);
I2CWriteByte(HX8824_ADDR, 0x94, 0x7A);
I2CWriteByte(HX8824_ADDR, 0x95, 0x00);
I2CWriteByte(HX8824_ADDR, 0x96, 0x20);
I2CWriteByte(HX8824_ADDR, 0x97, 0x03);
I2CWriteByte(HX8824_ADDR, 0x98, 0x0D);
I2CWriteByte(HX8824_ADDR, 0x99, 0x02);
I2CWriteByte(HX8824_ADDR, 0x9A, 0x03);
I2CWriteByte(HX8824_ADDR, 0x9B, 0x00);
I2CWriteByte(HX8824_ADDR, 0x9C, 0x20);
I2CWriteByte(HX8824_ADDR, 0x9D, 0x00);
I2CWriteByte(HX8824_ADDR, 0x9E, 0xE0);
I2CWriteByte(HX8824_ADDR, 0x9F, 0x01);
//**************** 0x10-->0x0C or 0x08(DE only, no VS & HS)**********************
// I2CWriteByte(HX8824_ADDR, 0x14, 0x00); // 0x21~0x23 will be ok
// I2CWriteByte(HX8824_ADDR, 0x15, 0x00);
//***************** PLL ********************************************************
I2CWriteByte(HX8824_ADDR, 0xD0, 0x03); // P1
I2CWriteByte(HX8824_ADDR, 0xD1, 0x04); // P2
I2CWriteByte(HX8824_ADDR, 0xD2, 0x08); // N
I2CWriteByte(HX8824_ADDR, 0xD3, 0x63); // M: 100-1
I2CWriteByte(HX8824_ADDR, 0xD4, 0x00); // M
#endif
//****************************************************************************************
#if mode6448_6448
// Select source from VGA
bVideo = 0;
S1 = 1;
S2 = 0;
Mode = 2;
I2CWriteByte(HX8824_ADDR, 0x10, 0x1C); // USE EXTERNAL SYNC AND DE
I2CWriteByte(HX8824_ADDR, 0x11, 0x04);
I2CWriteByte(HX8824_ADDR, 0x20, 0x00);
I2CWriteByte(HX8824_ADDR, 0x21, 0x10);
I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
I2CWriteByte(HX8824_ADDR, 0x23, 0x0F);
I2CWriteByte(HX8824_ADDR, 0x20, 0x00);
I2CWriteByte(HX8824_ADDR, 0x21, 0x10);
I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
I2CWriteByte(HX8824_ADDR, 0x23, 0x1F);
I2CWriteByte(HX8824_ADDR, 0x24, 0x00);
I2CWriteByte(HX8824_ADDR, 0x25, 0x00);
I2CWriteByte(HX8824_ADDR, 0x24, 0x00);
I2CWriteByte(HX8824_ADDR, 0x25, 0x04);
I2CWriteByte(HX8824_ADDR, 0x27, 0x05); //DELAY
I2CWriteByte(HX8824_ADDR, 0xA0, 0x1E);
I2CWriteByte(HX8824_ADDR, 0xA1, 0x07);
I2CWriteByte(HX8824_ADDR, 0xA2, 0x00);
I2CWriteByte(HX8824_ADDR, 0x00, 0x80);
I2CWriteByte(HX8824_ADDR, 0x01, 0x02);
I2CWriteByte(HX8824_ADDR, 0x02, 0xE0);
I2CWriteByte(HX8824_ADDR, 0x03, 0x01);
I2CWriteByte(HX8824_ADDR, 0x90, 0x20);
I2CWriteByte(HX8824_ADDR, 0x91, 0x03);
I2CWriteByte(HX8824_ADDR, 0x92, 0x60);
I2CWriteByte(HX8824_ADDR, 0x93, 0x00);
I2CWriteByte(HX8824_ADDR, 0x94, 0x90);
I2CWriteByte(HX8824_ADDR, 0x95, 0x00);
I2CWriteByte(HX8824_ADDR, 0x96, 0x80);
I2CWriteByte(HX8824_ADDR, 0x97, 0x02);
I2CWriteByte(HX8824_ADDR, 0x98, 0x0D);
I2CWriteByte(HX8824_ADDR, 0x99, 0x02);
I2CWriteByte(HX8824_ADDR, 0x9A, 0x02);
I2CWriteByte(HX8824_ADDR, 0x9B, 0x00);
I2CWriteByte(HX8824_ADDR, 0x9C, 0x23);
I2CWriteByte(HX8824_ADDR, 0x9D, 0x00);
I2CWriteByte(HX8824_ADDR, 0x9E, 0xE0);
I2CWriteByte(HX8824_ADDR, 0x9F, 0x01);
//***************** PLL ********************************************************
I2CWriteByte(HX8824_ADDR, 0xD0, 0x08); // P1
I2CWriteByte(HX8824_ADDR, 0xD1, 0x08); // P2
I2CWriteByte(HX8824_ADDR, 0xD2, 0x0C); // N
I2CWriteByte(HX8824_ADDR, 0xD3, 0xF5); // M: 246 -1
I2CWriteByte(HX8824_ADDR, 0xD4, 0x00); // M
#endif
//***************************************************************************************
#if mode6448_3224
// Select source from VGA
bVideo = 0;
S1 = 1;
S2 = 0;
Mode = 3;
I2CWriteByte(HX8824_ADDR, 0x10, 0x1C); // input format select
I2CWriteByte(HX8824_ADDR, 0x11, 0x04);
I2CWriteByte(HX8824_ADDR, 0x20, 0x00);
I2CWriteByte(HX8824_ADDR, 0x21, 0x20);
I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
I2CWriteByte(HX8824_ADDR, 0x23, 0x0F);
I2CWriteByte(HX8824_ADDR, 0x20, 0x00);
I2CWriteByte(HX8824_ADDR, 0x21, 0x20);
I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -