📄 scaler.c
字号:
#include "Scaler.H"
#include "MCU.H"
#include "UserAdj.H"
#include "MyDef.H"
#include "F63REG.H"
#include "IIC.H"
#include "stdio.h"
#include "PANEL.H"
#include "RAM.H"
#include "sRGB.H"
#include "OSD.H"
#if 0
#define DT63 0x80
#else
#define DT63 0x00
#endif
//
#if PanelDepth == 6
#define DisplayColorDepth 0xff
#else
#define DisplayColorDepth 0x00
#endif
#if PanelTwoPixelPerClk == 1
#define DisplayBusWidth 0x00
#else
#define DisplayBusWidth 0xff
#endif
#if PanelSync_DE == 1
#define DisplaySyncMode 0xff
#else
#define DisplaySyncMode 0x00
#endif
#define DisplayControl (0x68 | (DisplayColorDepth & BIT_2) | (DisplayBusWidth & BIT_1) | (DisplaySyncMode & BIT_0))
#define DT5E (unsigned char)PanelPadDrive
#define DT5F (unsigned char)(PanelPadDrive >> 8)
#define DT61 ((Panel_Invert_DVS & BIT_0) | (Panel_Invert_DHS & BIT_1) | (Panel_Invert_DCLK & BIT_2) | (Panel_Invert_DEN & BIT_3))
code unsigned short H_ActiveTab[]={
// 640,720,640,800,832,1024,1152,1280,1280,1600,1280,1280,1280,848,1152,720
1280,720,1280,800,832,1024,1152,1280,1280,1600,1280,848,1152,720
};
code unsigned short V_ActiveTab[]={
350,400,480,600,624,768,864,960,1024,1200,720,480,870,576
};
#if PANEL == CPT_CLAA150XG08
code unsigned char TCON_Tab[]={
// 0 1 2 3 4 5 6 7 8 9 a
#if 1
0x00,0x62,0x22,0x0f,0x08,0x62,0x01,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0x07,0x04,0x0f,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0x81,0x02,0x81,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x02,0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0xe0,0x03,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
#else
0x00,0x62,0x22,0x0f,0x08,0x62,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0x04,0x04,0x48,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x02,0x03,0xa0,0x03,0xa0,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x02,0x00,0x8c,0x01,0x8a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0xc0,0x03,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0xe0,0x03,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
#endif
};
#endif
#if PANEL == QD170ER01
code unsigned char TCON_Tab[]={
// 0 1 2 3 4 5 6 7 8 9 a
0x00,0x60,0x22,0x03,0x08,0x66,0x00,0x88,0x10,0x80,0x02,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x02,0x00,0x04,0x05,0x70,0x05,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x02,0x04,0xf6,0x04,0xf6,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x02,0x00,0x8c,0x02,0x8a,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0x04,0x05,0x56,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x02,0x04,0x3a,0x05,0xc0,0x03,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0x04,0x04,0x56,0x02,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
};
#endif
#if PANEL == INNONLUX_RSDS
code unsigned char TCON_Tab[]={
// 0 1 2 3 4 5 6 7 8 9 a
0x00,0x62,0x22,0x0f,0x08,0xa3,0x01,0x86,0x10,0x80,0x02,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0x04,0x05,0x48,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0xa0,0x04,0xa0,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x02,0x00,0x8c,0x02,0x8a,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0xc0,0x04,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0xe0,0x04,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
};
#endif
#if PANEL == HannStar_HSD150MX84 //Daniel 2004-01-28
code unsigned char TCON_Tab[]={
/*
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x40,0x60,0x01,0x0F,0x00,0x20,0x00,0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//0
0x01,0x00,0x01,0x00,0x40,0x00,0xf0,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1 //LOAD
0x01,0x00,0x04,0x03,0x50,0x01,0x50,0x01,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//2 //POL
0x01,0x03,0x02,0x03,0xf0,0x04,0xf0,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3 //STV1
0x01,0x03,0x03,0x03,0xf0,0x04,0xf0,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//4 //STV2
0x02,0x00,0x04,0x03,0xf0,0x00,0x40,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//5 //CPV
0x01,0x00,0x05,0x03,0x10,0x00,0x02,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//6 //OE
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//7
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//8
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//9
};*//*
//Timing table for HannStar X84
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x40,0x20,0x01,0x0F,0x00,0x09,0x00,0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//0
0x01,0x00,0x01,0x00,0x40,0x00,0xf0,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1 //LOAD
0x01,0x00,0x04,0x03,0x50,0x01,0x50,0x01,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//2 //POL
0x04,0x03,0x02,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3 //STV1
0x04,0x03,0x04,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//4 //STV2
0x02,0x00,0x04,0x03,0xf0,0x00,0x40,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//5 //CPV
0x01,0x00,0x05,0x03,0x10,0x00,0x02,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//6 //OE
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//7
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//8
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//9
};*/
//Timing table for Lin Yu panel
// 0 1 2 3 4 5 6 7 8 9 A
/* 0x40,0x60,0x01,0x0F,0x00,0x09,0x00,0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//0
0x01,0x00,0x01,0x03,0x05,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1 //LOAD
0x01,0x00,0x04,0x03,0x02,0x04,0x02,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//2 //POL
0x02,0x03,0x01,0x00,0x30,0x04,0x30,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3 //STV1
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//4 //STV2
0x01,0x00,0x01,0x03,0x20,0x04,0x50,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//5 //CPV
0x01,0x00,0x05,0x03,0x10,0x04,0x30,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,//6 //OE
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,//7
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,//8
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//9
}; */
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
/* 0x40,0x60,0x01,0x0F,0x00,0x09,0x00,0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x02,0x00,0x01,0x03,0x40,0x01,0xc0,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //LOAD
0x01,0x00,0x04,0x03,0x50,0x01,0x50,0x01,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //POL
0x02,0x00,0x04,0x03,0xf0,0x04,0x40,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //STV1
0x01,0x00,0x04,0x03,0xf0,0x04,0xf0,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //STV2
0x01,0x00,0x05,0x03,0x40,0x02,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //CPV
0x04,0x00,0x02,0x03,0x40,0x02,0x40,0x01,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //OE
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};*/
// 0 1 2 3 4 5 6 7 8 9 A B C D E F //ljj
0x00,0x62,0x22,0x0f,0x08,0xa3,0x01,0x86,0x10,0x80,0x02,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0x04,0x05,0x48,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0xa0,0x04,0xa0,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x02,0x00,0x8c,0x02,0x8a,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0xc0,0x04,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0xe0,0x04,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
};
#endif
void UpdatePresetData(void)
{
code unsigned char UpdateSquenceTable[]={
0x0a,0x09,0x0B,0x0C,0x12,0x13,0x14,0x15,
0x16,0x17,0x18,0x19,0x1A,0x1B,0x4D,0x5E,
0x5F,0x60,0x61,0x63,0x6f
};
code unsigned char D1024x768[]={
0x1E,0x05,0x51,0x84,0x08,0x00,0x1D,0x00,
0x00,0x03,0x95,0x00,0x00,0x04,0x00,DT5E,
DT5F,0x03,DT61,DT63,0x0f
};
unsigned char i;
for(i=0; i<21; i++){
WriteIIC_HW(Scaler_Addr,UpdateSquenceTable[i],D1024x768[i]);
}
}
void InitScaler(void)
{
unsigned char i;
code unsigned char InitTab[30][2]={
{0x01,(0x48|DT01)},
{0x4E,(unsigned char)PanelTypVTotal},{0x4F,(unsigned char)(PanelTypVTotal>>8)}, // Display Vtotal
{0x50,(unsigned char)PanelHeight},{0x51,(unsigned char)(PanelHeight>>8)}, // Display VActive
{0x52,(unsigned char)PanelVSyncStart},{0x53,(unsigned char)(PanelVSyncStart>>8)}, // Display VStart
{0x54,(unsigned char)PanelVSyncEnd},{0x55,(unsigned char)(PanelVSyncEnd>>8)}, // Display VEnd
{0x56,(unsigned char)PanelMinHTotal},{0x57,(unsigned char)(PanelMinHTotal>>8)}, // Display Htotal
{0x58,(unsigned char)PanelWidth},{0x59,(unsigned char)(PanelWidth>>8)}, // Display HActive
{0x5A,(unsigned char)PanelHSyncStart},{0x5B,(unsigned char)(PanelHSyncStart>>8)}, // Display HStart
{0x5C,(unsigned char)PanelHSyncEnd},{0x5D,(unsigned char)(PanelHSyncEnd>>8)}, // Display HEnd
{0x85,0x04}, //04
{0x86,0xc0}, // Sync Processor Ctrl: Enable Free-run
{0x87,0xc0}, // H/V Sync input Ctrl: Separate Sync input
{0x88,0xc8}, // H/V Sync output Ctrl: Free-Run Output enable
{0x8b,0x0f},
{0x91,0xFF}, // H/V interrupt clear
{0x92,0x00}, // H/V interrupt enable
{0x93,0x40}, // Fast mute ctrl
{0x94,0xa6}, //0xc4
{0xe6,0x03},
{0xf8,DTF8},
{0xfd,0x05},
// {0xfb,0xc3},
};
if((flag3 & BIT_2) != 0x00)
printf("Init Scaler\r\n");
TCONInit();
for(i=0; i<29; i++) {
WriteIIC_HW(Scaler_Addr,InitTab[i][0],InitTab[i][1]);
}
UpdatePresetData();
if(Panel_Interface == LVDS){
WriteIIC_HW(Scaler_Addr,0xfa,0x40);
WriteIIC_HW(Scaler_Addr,0xfb,0xc3);
WriteIIC_HW(Scaler_Addr,0xfe,0x02);
}
else if(Panel_Interface == TTL){
WriteIIC_HW(Scaler_Addr,0xfa,0x00);
WriteIIC_HW(Scaler_Addr,0xfb,0x00);
WriteIIC_HW(Scaler_Addr,0xfe,0xc0);
}
else if(Panel_Interface == RSDS){
WriteIIC_HW(Scaler_Addr,0xfa,0xc0);
WriteIIC_HW(Scaler_Addr,0xfb,0x00);
WriteIIC_HW(Scaler_Addr,0xfe,0xc1);
}
else{
WriteIIC_HW(Scaler_Addr,0xfa,0x00);
WriteIIC_HW(Scaler_Addr,0xfb,0x00);
WriteIIC_HW(Scaler_Addr,0xfe,0xc1);
}
// SetDPLL(FreeRunH_Freq*PanelMinHTotal/1000);
SetDPLL(FreeRunH_Freq*PanelMinHTotal);
WriteIIC_HW(Scaler_Addr,0x03,0x00);
WriteIIC_HW(Scaler_Addr,0x05,0x00);
WriteIIC_HW(Scaler_Addr,0x07,0x00);
WriteIIC_HW(Scaler_Addr,0x40,0x01);
WriteIIC_HW(Scaler_Addr,0xf4,0xc0);
WriteIIC_HW(Scaler_Addr,0x4c,DisplayControl);
WriteIIC_HW(Scaler_Addr,0x4d,0x02);
//Noise reduction
WriteIIC_HW(Scaler_Addr,0x42,0x3a);
WriteIIC_HW(Scaler_Addr,0x43,0x43);
// WriteIIC_HW(Scaler_Addr,0x44,0x12); //orange
// WriteIIC_HW(Scaler_Addr,0x45,0x30);
// WriteIIC_HW(Scaler_Addr,0x49,0x10);
//
WriteWordIIC_HW(Scaler_Addr,0x75,0x20);
WriteIIC_HW(Scaler_Addr,0xb3,0x09);
WriteIIC_HW(Scaler_Addr,0xd6,0xb1); //
if((flag3 & BIT_2) != 0x00)
printf(PanelName);
DVI_On();
}
void TCONInit(void)
{
unsigned char i;
WriteIIC_HW(Scaler_Addr,0xFF,0x01); // page1 enable
#if Panel_Interface > TTL
if((flag3 & BIT_2) != 0x00)
printf("TCON Init\r\n");
for(i=0; i<0x70; i=i+16){
WritePageScaler(i,i,TCON_Tab);
}
for(i=0x70; i<0x7b; i++){
WriteIIC_HW(Scaler_Addr,i,TCON_Tab[i]);
}
for(i=0x80; i<0xa0; i=i+16){
WritePageScaler(i,i,TCON_Tab);
}
#endif
#if Panel_Spread_Spect_En == 0xff
i = (PanelSpreadSpectrumCtrl << 1) | BIT_0;
WriteIIC_HW(Scaler_Addr,0xf5,i);
#endif
WriteIIC_HW(Scaler_Addr,0xFF,0x00); // page1 disable
}
#if Panel_Interface > TTL
void WritePageScaler(unsigned char addr1,unsigned char addr2,unsigned char *p)
{
unsigned char i,ch;
/* start bit */
/* transmit device */
INTIIC1_FLG = 0xff;
IIC1_DATA = Scaler_Addr;
IIC1_CLK = 0x20 | IIC_BaudRate;
IIC1_CON = 0x00;
/* transmit addr */
MasterSendByte(addr1);
/* transmit data */
for(i=0; i<16; i++){
ch = p[addr2 + i];
MasterSendByte(ch);
}
/* transmit dumy data for stop bit */
WaitTx();
/* stop bit */
IIC1_CLK = 0xA0|IIC_BaudRate;
// IIC1_CON = 0x00;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -