📄 autoadj.lst
字号:
C51 COMPILER V7.50 AUTOADJ 03/18/2008 22:04:54 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE AUTOADJ
OBJECT MODULE PLACED IN .\BIN\AutoAdj.obj
COMPILER INVOKED BY: D:\设计软件\Keil\C51\BIN\C51.EXE SRC\AutoAdj.C BROWSE DEBUG OBJECTEXTEND PRINT(.\LST\AutoAdj.lst) O
-BJECT(.\BIN\AutoAdj.obj)
line level source
1 #include "Scaler.H"
2 #include "AutoAdj.H"
3 #include "MyDef.H"
4 #include "IIC.H"
5 #include "RAM.H"
6 #include "stdio.h"
7 #include "F63REG.H"
8 #include "MCU.H"
9 #include "UserAdj.H"
10 #include "ModeHandle.H"
11 #include "8051.H"
12 #include "sRGB.H"
13 #include "ROM_MAP.H"
14 #include "SAA7114.H"
15
16 void AutoTune(void)
17 {
18 1 xdata unsigned short HP_Temp,VP_Temp,addr;
19 1 // HP_Temp = ReadIIC_HW(Scaler_Addr,0x01);
20 1 // HP_Temp &= ~BIT_5;
21 1 // WriteIIC_HW(Scaler_Addr,0x01,(unsigned char)HP_Temp);
22 1 if(H_SYNC_Temp == 0xffff)
23 1 goto Error1;
24 1 HP_Temp = HP_Start;
25 1 VP_Temp = VP_Start;
26 1 NonFullScreen = 0;
27 1 flag2 &= ~BIT_0;
28 1 AutoPosition();
29 1 if(H_SYNC_Temp == 0xffff)
30 1 goto Error1;
31 1 if((flag2 & BIT_0) != 0x00){
32 2 if(NonFullScreen == 0){
33 3 goto Error1;
34 3 }
35 2 }
36 1 AutoClock();
37 1 if(H_SYNC_Temp == 0xffff)
38 1 goto Error1;
39 1 if((flag2 & BIT_0) != 0x00){
40 2 if(NonFullScreen == 0){
41 3 goto Error;
42 3 }
43 2 else{
44 3 flag2 &= ~BIT_0;
45 3 AutoClockByPhase(1);
46 3 }
47 2 }
48 1 else{
49 2 AutoClockByPhase(0);
50 2 }
51 1 if(H_SYNC_Temp == 0xffff)
52 1 goto Error1;
53 1 AutoPhaseFineTune();
54 1 if(H_SYNC_Temp == 0xffff)
C51 COMPILER V7.50 AUTOADJ 03/18/2008 22:04:54 PAGE 2
55 1 goto Error1;
56 1 if((flag2 & BIT_0) != 0x00)
57 1 goto Error;
58 1 AutoPosition();
59 1 if(H_SYNC_Temp == 0xffff)
60 1 goto Error1;
61 1 if(((flag2 & BIT_0) != 0x00)&&(NonFullScreen == 1)){ //fail
62 2 if(ModePoint < UserModeSt){
63 3 addr = 0x101 + (ModePoint * 8);
64 3 VP_Temp = MCU_DataMap[addr];
65 3 addr++;
66 3 HP_Temp = MCU_DataMap[addr];
67 3 HP_Temp <<= 8;
68 3 addr++;
69 3 HP_Temp += MCU_DataMap[addr];
70 3 }
71 2 HP_Start = HP_Temp;
72 2 VP_Start = VP_Temp;
73 2 SetHP();
74 2 SetVP();
75 2 flag2 &= ~BIT_0;
76 2 }
77 1 Error:
78 1 if((flag2 & BIT_0) != 0x00){ //fail
79 2 if(H_SYNC_Temp != 0xffff){
80 3 ForceToBackground(0); //Set fource to background
81 3 LoadModeDependentSettings();
82 3 SetADC_PLL();
83 3 SetADC_Phase();
84 3 SetScaler();
85 3 WriteIIC_HW(Scaler_Addr,0x95,0x00);
86 3 SetDisplayNormal();
87 3 }
88 2 }
89 1 else{ //ok
90 2 SaveModeDependentSettings();
91 2 SetMinMax();
92 2 }
93 1 Error1:
94 1 RepeatTimer = KeyHoldTime;
95 1 Repeat = 0xff;
96 1
97 1 // HP_Temp = ReadIIC_HW(Scaler_Addr,0x01);
98 1 // HP_Temp |= BIT_5;
99 1 // WriteIIC_HW(Scaler_Addr,0x01,(unsigned char)HP_Temp);
100 1 }
101
102 void AutoPosition(void)
103 {
104 1 unsigned short temph,tempv;
105 1 WriteIIC_HW(Scaler_Addr,0x2E,HP_Min); // AutoPosition Pixel mask -> H
106 1 WriteIIC_HW(Scaler_Addr,0x3C,0x00); // AutoPosition Pixel mask -> V
107 1 WriteIIC_HW(Scaler_Addr,0x2F,0x30); // Red Noise Margin
108 1 WriteIIC_HW(Scaler_Addr,0x30,0x30); // Green Noise Margin
109 1 WriteIIC_HW(Scaler_Addr,0x31,0x30); // Blue Noise Margin
110 1
111 1 CheckModeChange();
112 1 if((flag2 & BIT_0) != 0)
113 1 return;
114 1
115 1 WriteIIC_HW(Scaler_Addr,0x1F,0x00);
116 1 if(SyncMode == 3){ //DVI
C51 COMPILER V7.50 AUTOADJ 03/18/2008 22:04:54 PAGE 3
117 2 WriteIIC_HW(Scaler_Addr,0x1E,0x19);
118 2 }
119 1 else{
120 2 WriteIIC_HW(Scaler_Addr,0x1E,0x09);
121 2 }
122 1 Timer3 = 10;
123 1 while(!(ReadIIC_HW(Scaler_Addr,0x1F) & BIT_0) && Timer3 != 0){
124 2 CheckModeChange();
125 2 if((flag2 & BIT_0) != 0)
126 2 return;
127 2 }
128 1 if(Timer3 != 0){ // Auto-Position OK
129 2 tempv = ReadWordIIC_HW(Scaler_Addr,0x32) & 0x07ff;
130 2 temph = ReadWordIIC_HW(Scaler_Addr,0x36) & 0x07ff;
131 2 if((tempv > 0xff) || (temph > (HTotal-H_Act))){
132 3 flag2 |= BIT_0; // abort
133 3 NonFullScreen = 1;
134 3 }
135 2 else{
136 3 HP_Start = temph;
137 3 VP_Start = tempv;
138 3 SetHP();
139 3 SetVP();
140 3 }
141 2 }
142 1 else{
143 2 flag2 |= BIT_0; // abort
144 2 }
145 1 }
146
147 void AutoClock(void)
148 {
149 1 unsigned char H_Difference,i,Compare,k;
150 1 unsigned short PLL_Divider,V_Act;
151 1 unsigned short H_Ref;
152 1 if((flag2 & BIT_0) != 0x00)
153 1 return;
154 1 V_Act = ReadWordIIC_HW(Scaler_Addr,0x34) & 0x07ff;
155 1 // if(VTotal > (V_Act + 190)){
156 1 // flag2 |= BIT_0;
157 1 // NonFullScreen = 1;
158 1 // return;
159 1 // }
160 1 if((flag3 & BIT_6) != 0){
161 2 V_Act <<= 1;
162 2 }
163 1 PLL_Divider = ReadWordIIC_HW(Scaler_Addr,0x38) & 0x07ff;
164 1
165 1 for(i=0; i<16; i++){ //check Vtotal
166 2 if(V_Act > V_ActiveTab[i])
167 2 H_Ref = V_Act - V_ActiveTab[i];
168 2 else
169 2 H_Ref = V_ActiveTab[i] - V_Act;
170 2 if(H_Ref < 5){ //check Htotal
171 3 H_Ref = H_ActiveTab[i];
172 3 if((i == 1)&&(Read24C16(0xd3) != 0))
173 3 H_Ref = 640;
174 3 if(PLL_Divider > H_Ref){
175 4 PLL_Divider = PLL_Divider - H_Ref;
176 4 Compare = 0;
177 4 }
178 3 else{
C51 COMPILER V7.50 AUTOADJ 03/18/2008 22:04:54 PAGE 4
179 4 PLL_Divider = H_Ref - PLL_Divider;
180 4 Compare = 1;
181 4 }
182 3 if(PLL_Divider > (H_Ref >> 3)){ //check Htotal range
183 4 if((i == 2) && (Compare == 0)){
184 5 i = 13;
185 5 H_Ref = 848;
186 5 }
187 4 // else{
188 4 // flag2 |= BIT_0;
189 4 // NonFullScreen = 1;
190 4 // return;
191 4 // }
192 4 }
193 3 PLL_Divider = 0x106 + (ModePoint * 8);
194 3 if(i != Read24C16(PLL_Divider)){ //change resolution
195 4 Write24C16(PLL_Divider,i);
196 4 SetScaler();
197 4 }
198 3 break;
199 3 }
200 2 }
201 1 if((i == 16)||(V_Act < 340)){
202 2 flag2 |= BIT_0;
203 2 NonFullScreen = 1;
204 2 return;
205 2 }
206 1 k = i;
207 1 // Set refance H_Active
208 1 WriteWordIIC_HW(Scaler_Addr,0x3A,H_Ref);
209 1 // read pll divider
210 1 if(HTotal <= H_Ref){
211 2 HTotal = H_Ref + HP_Start;
212 2 SetADC_PLL();
213 2 if((flag3 & BIT_1) != 0){
214 3 flag2 |= BIT_0;
215 3 return;
216 3 }
217 2 }
218 1 for(i=0; i<0x20; i++){
219 2 WriteIIC_HW(Scaler_Addr,0x1F,0x00);
220 2 WriteIIC_HW(Scaler_Addr,0x1E,0x09);
221 2 Timer3 = 10;
222 2 while(!(ReadIIC_HW(Scaler_Addr,0x1F) & BIT_0) && Timer3 != 0){
223 3 CheckModeChange();
224 3 if((flag2 & BIT_0) != 0)
225 3 return;
226 3 }
227 2 if(Timer3 == 0){
228 3 flag2 |= BIT_0;
229 3 return;
230 3 }
231 2 H_Act = ReadWordIIC_HW(Scaler_Addr,0x38) & 0x07ff;
232 2 H_Difference = ReadIIC_HW(Scaler_Addr,0x1F);
233 2 Compare = (H_Difference & 0x0C) >> 2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -