📄 display.lst
字号:
C51 COMPILER V7.06 DISPLAY 12/28/2004 10:14:03 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DISPLAY
OBJECT MODULE PLACED IN .\obj\DISPLAY.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\T101\DISPLAY.C BROWSE INCDIR(.\include\;.\source\) DEBUG OBJECTEXTEN
-D PRINT(.\DISPLAY.lst) OBJECT(.\obj\DISPLAY.obj)
stmt level source
1 //---------------------------------------------------------------------------
2 // Terawins Inc. Company Confidential Strictly Private
3 //
4 // $Archive: Display.c 702 $
5 // $Revision: 1.01 $
6 // $Author: JoannW $
7 // $Date: 2002/06/18 $
8 //
9 // --------------------------------------------------------------------------
10 // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
11 // --------------------------------------------------------------------------
12 // Copyright 2002 (c) Terawins Inc.
13 // This is an unpublished work.
14 // --------------------------------------------------------------------------
15 #include <reg51.h>
16 #include <math.h>
17 #include "common.h"
18 #include "system.h"
19 #include "Struct.h"
20 #include "TwoWire.h"
21 #include "TW101Reg.h"
22 #include "CfgDsply.h"
23 #include "Display.h"
24 uDWORD m_dwTemp[2];
25 extern uCHAR idata m_cScaleratio;
26 uWORD m_wDWHSZ=DWHSZ;
27 extern uCHAR idata m_cBuff[4];
28 extern uWORD idata m_wBuff[3];
29 extern uDWORD m_dwBuff[2];
30 extern uWORD m_wVRes; //as computed, used in output and scaling
31 extern uWORD m_wHRes; //as computed, used in scaling
32 extern uWORD idata m_wVTotal;
33 extern uCHAR idata m_cModeStatus;
34 extern uCHAR idata m_cSource;
35 extern uCHAR idata m_cStandard;
36 //---------------------------------------------------------------------------------
37 //This is for Display clock set,
38 //the minimum difference between input freq and out freq should be more than 5MHz
39 //---------------------------------------------------------------------------------
40
41 //----------------------------------------
42 // Local Definitions for this module
43 //----------------------------------------
44 ////
45 uWORD wDVTotal, wDHTotal,wDVBILK;
46 float tmp;
47 void DisplayProcess_new(void)
48 {
49 1 uWORD wDVTotal, wDHTotal,wDVBILK;
50 1 tmp=DNDIV_40;
51 1 if(!m_cStandard)
52 1 {
53 2 tmp=1716*m_wVRes*DNDIV_40/DWVSZ;
54 2 wDHTotal=1716*m_wVRes*DNDIV_40/DWVSZ;
C51 COMPILER V7.06 DISPLAY 12/28/2004 10:14:03 PAGE 2
55 2 tmp=(DNDIV_40*27000/(60*623))*1000;
56 2 wDVTotal=(DNDIV_40*27000/(60*623))*1000;
57 2 }
58 1 else
59 1 {
60 2 wDHTotal=1728*m_wVRes*DNDIV_40/DWVSZ;
61 2 wDVTotal=(DNDIV_40*27000/(50*576))*1000;
62 2 }
63 1
64 1
65 1 m_dwBuff[1]=I2CReadByte(TW101, 0x83);
66 1 m_dwBuff[1] <<= 8;
67 1 m_dwBuff[1]=I2CReadByte(TW101, 0x82);
68 1 m_dwBuff[1] <<= 8;
69 1 m_dwBuff[1] |= I2CReadByte(TW101, 0x81);
70 1 wDVBILK=m_dwBuff[1];
71 1 DisplaySetTiming1(wDHTotal, wDVTotal,wDVBILK);
72 1
73 1
74 1 }
75 ////
76 void DisplayProcess(void)
77 {
78 1 uWORD wDVTotal, wDHTotal,wVOffset;
79 1 uWORD wDWVSZ, wDVFrac;
80 1 uWORD wVibLeft;
81 1 uWORD wDHBlk;
82 1 float fDHTotalF;
83 1
84 1 I2CWriteByte(TW101, 0xC2, I2CReadByte(TW101, 0xc2) & 0xFB);
85 1 wDWVSZ = DWVSZ; //DWVSZ == Paneal output vertial line number
86 1 /////////////////////////Ruby
87 1 m_dwBuff[0]=GetInputVSyncXclkCnt();//Read whole frame XCLK counter
88 1 m_wBuff[0] = I2CReadByte(TW101, 0x59);
89 1 m_wBuff[0] <<= 8;
90 1 m_wBuff[0] += I2CReadByte(TW101, 0x58);
91 1
92 1 m_wVTotal=m_dwBuff[0]*32/m_wBuff[0];
93 1
94 1 m_dwBuff[1]=I2CReadByte(TW101, 0x83);
95 1 m_dwBuff[1] <<= 8;
96 1 m_dwBuff[1]=I2CReadByte(TW101, 0x82);
97 1 m_dwBuff[1] <<= 8;
98 1 m_dwBuff[1] |= I2CReadByte(TW101, 0x81);
99 1
100 1 wVOffset = (m_dwBuff[1]*32+m_wBuff[0]/2)/m_wBuff[0];
101 1 /////////////////////////////////////////////////////
102 1
103 1 m_dwBuff[0]=DisplayGetXclkCnt(m_dwBuff[0]);
104 1
105 1 fDHTotalF=DisplayGetHVTotal(&wDHTotal,&wDVTotal,&wDVFrac,wDWVSZ,m_dwBuff[0]);
106 1 wVibLeft=DisplayVibration(fDHTotalF,wDHTotal, &wDVTotal,wDWVSZ,wDVFrac);
107 1
108 1 wDHBlk = (wDHTotal - m_wDWHSZ - DISP_DFLT_HSWIDTH)/2;
109 1 wDHBlk += DISP_DFLT_HSWIDTH;
110 1
111 1 m_wBuff[0] = (unsigned long)wVOffset*100 * wDWVSZ/m_wVRes - wDHBlk * 100 / wDHTotal;
112 1 //#ifdef T100
113 1 DisplaySetPrefill(wDWVSZ,wDHTotal,wDVTotal);
114 1 //#else
115 1 // DisplaySetPrefill();//m_wBuff[0],wDWVSZ,wVibLeft,wDHTotal);
116 1 //#endif
C51 COMPILER V7.06 DISPLAY 12/28/2004 10:14:03 PAGE 3
117 1 DisplaySetTiming(wDHTotal,wDVTotal);
118 1 }
119
120 //#ifdef T100 //Ruby test 2004-08-19
121 void DisplaySetPrefill( uWORD wDWVSZ, uWORD wDHTotal,uWORD wDVTotal)//(uWORD wVBlk, uWORD wDWVSZ, uWORD wV
-ibLeft, uWORD wDHTotal,uWORD wDVTotal)
122 {
123 1 uWORD wPrefill;
124 1 //To get prefill value roughly
125 1 // wPrefill = 2450 - (unsigned long)m_wVRes*1000 / 2/wDWVSZ;
126 1 wPrefill = 5450 - (unsigned long)m_wVRes*1000 / 2/wDWVSZ;
127 1 //ROUNDUP(x,2)
128 1 if(wPrefill%10 > 4)
129 1 wPrefill=wPrefill/10+1;
130 1 else
131 1 wPrefill=wPrefill/10;
132 1
133 1 //Prefill fraction
134 1 wPrefill = wPrefill/100*100+wPrefill%100;
135 1
136 1 wPrefill = wPrefill +(unsigned long)(wPrefill%100)*m_wHRes/wDHTotal; //Ruby
137 1 m_dwBuff[0] = I2CReadByte(TW101, 0x59);
138 1 m_dwBuff[0] <<= 8;
139 1 m_dwBuff[0] += I2CReadByte(TW101, 0x58);
140 1
141 1 wPrefill = m_dwBuff[0] * wPrefill /32 / 100;
142 1
143 1 I2CWriteByte(TW101, 0x84, (unsigned char)wPrefill);
144 1 I2CWriteByte(TW101, 0x85, (unsigned char)(wPrefill>>8));
145 1 if(!m_cStandard)
146 1 {
147 2 m_dwTemp[0]=(wDVTotal-m_wVRes-DWVSST-DISP_DFLT_VSWIDTH)*wDHTotal;
148 2 m_dwTemp[1]=wPrefill/DNDIV_40;
149 2 if(m_dwTemp[0]<m_dwTemp[1])
150 2 I2CWriteByte(TW101, 0x70, I2CReadByte(TW101, 0x70)|0x20);
151 2 else
152 2 I2CWriteByte(TW101, 0x70, I2CReadByte(TW101, 0x70)&0xDF);
153 2 }
154 1 else
155 1 I2CWriteByte(TW101, 0x70, I2CReadByte(TW101, 0x70)|0x20);
156 1 }
157 /*
158 #else
159 void DisplaySetPrefill(void)//uWORD wVBlk, uWORD wDWVSZ, uWORD wVibLeft, uWORD wDHTotal)
160 {
161 uWORD wPrefill;
162
163 #ifdef WVGA
164 if(m_cStandard)
165 wPrefill = 0x1000+(288-m_wVRes)*0x200/5;
166 else
167 wPrefill = 0x100+(240-m_wVRes)*0x300/5;
168 #endif
169 #ifdef WXGA
170
171 if(m_cStandard)
172 {
173 wPrefill = 0x4000+(288-m_wVRes)*0x200/5+DELAY_LINES*0x400;
174 }
175 else
176 {
177 wPrefill = 0x3800+(240-m_wVRes)*0x300/5+DELAY_LINES*0x400;
C51 COMPILER V7.06 DISPLAY 12/28/2004 10:14:03 PAGE 4
178 }
179
180 #endif
181
182 I2CWriteByte(TW101, 0x70, I2CReadByte(TW101, 0x70)|0x20);
183 I2CWriteByte(TW101, 0x84, (unsigned char)wPrefill);
184 I2CWriteByte(TW101, 0x85, (unsigned char)(wPrefill>>8));
185 }
186 #endif
187
188 */
189 void DisplaySetTiming1(uWORD wDHTotal, uWORD wDVTotal,uWORD wDVBILK)
190 {
191 1 uWORD wTemp;
192 1 float Temp;
193 1
194 1 wTemp = ((wDHTotal - m_wDWHSZ - DISP_DFLT_HSWIDTH)>>1)-2;
195 1 I2CWriteByte(TW101, 0xB0, wTemp);
196 1 I2CWriteByte(TW101, 0xB1, wTemp>>8);
197 1
198 1 wTemp =wDVBILK/(wDHTotal*DNDIV_40)-DISP_DFLT_VSWIDTH;
199 1 I2CWriteByte(TW101, 0xB2, wTemp);
200 1 I2CWriteByte(TW101, 0xB3, wTemp>>8);
201 1
202 1 I2CWriteByte(TW101,0xB4,(uCHAR)(m_wDWHSZ));
203 1 I2CWriteByte(TW101,0xB5,(uCHAR)(m_wDWHSZ>>8));
204 1 I2CWriteByte(TW101, 0xB8, (unsigned char) wDHTotal);
205 1 I2CWriteByte(TW101, 0xB9, (unsigned char)(wDHTotal>>8));
206 1
207 1 I2CWriteByte(TW101, 0xBA, (unsigned char) wDVTotal);
208 1 I2CWriteByte(TW101, 0xBB, (unsigned char)(wDVTotal>>8));
209 1
210 1 I2CWriteByte(TW101, 0xBC, (unsigned char) DISP_DFLT_HSWIDTH);
211 1 I2CWriteByte(TW101, 0xBD, (unsigned char)(DISP_DFLT_HSWIDTH>>8));
212 1
213 1 I2CWriteByte(TW101, 0xBE, (unsigned char) DISP_DFLT_VSWIDTH);
214 1 I2CWriteByte(TW101, 0xBF, (unsigned char)(DISP_DFLT_VSWIDTH>>8));
215 1
216 1 Temp =wDVBILK/(wDHTotal*DNDIV_40)-DISP_DFLT_VSWIDTH-wTemp;
217 1 wTemp=(2.5*1716/VFREQ(1))+Temp*wDHTotal*DNDIV_40*VFREQ(1);
218 1 I2CWriteByte(TW101, 0x84, wTemp);
219 1 I2CWriteByte(TW101, 0x85, wTemp>>8);
220 1
221 1 #ifdef LOAD_TIME
if(!m_cStandard)
{
if ((I2CReadByte(EEPVIDEOBLOCK, idTIMING_FLAG_INDEX))==Panel_ID)
{
I2CWriteByte(TW101, 0xB8, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B8));
I2CWriteByte(TW101, 0xB2, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B2));
}
}
else
{
if ((I2CReadByte(EEPVIDEOBLOCK, idTIMING_FLAG_INDEX1))==Panel_ID)
{
I2CWriteByte(TW101, 0xB8, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B8_PAL));
I2CWriteByte(TW101, 0xB2, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B2_PAL));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -