📄 tv_tuner.lst
字号:
C51 COMPILER V7.50 TV_TUNER 12/14/2006 10:36:46 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TV_TUNER
OBJECT MODULE PLACED IN .\TV_Tuner.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\Source\TV_Tuner.C LARGE DEBUG OBJECTEXTEND PRINT(.\TV_Tuner.lst) OBJECT(
-.\TV_Tuner.obj)
line level source
1 #include "..\inc\public2.h"
2 #include "..\inc\Tuner_FP_Tab.h"
3
4 BYTE RegB,RegC,RegE;
5
6 void I2C_SendStart2();
7 void I2C_SendStop2();
8 void I2C_SendByte2(BYTE);
9 BYTE I2C_GetByte2(bit);
10
11 long int _Fp = Fp_VL_Start;
12 BYTE _SIF = 0;
13 BYTE _CS = 0;
14 BYTE _FINE = 0x80;
15
16 extern void I2C_Delay(unsigned char);
17
18 void TV_Init()
19 {
20 1 #ifdef DEMOD_WRID
21 1 Set_SIF(2);
22 1 Set_DEMOD();
23 1 #endif
24 1
25 1 Set_Fosc(Fp_VL_Start,_FINE);
26 1 }
27
28 unsigned int Set_VL()
29 {
30 1 Set_Fosc(Fp_VL_Start,0x80);
31 1 return Fp_VL_Start;
32 1 }
33
34 unsigned int Set_VH()
35 {
36 1 Set_Fosc(Fp_VH_Start,0x80);
37 1 return Fp_VH_Start;
38 1 }
39
40 unsigned int Set_UHF()
41 {
42 1 Set_Fosc(Fp_UHF_Start,0x80);
43 1 return Fp_UHF_Start;
44 1 }
45
46 void Set_Fosc( unsigned int fp_p, unsigned char fine)
47 {
48 1 BYTE i, tmp;
49 1
50 1 if ( (fp_p >= Fp_VL_Start) && (fp_p < Fp_VH_Start) )
51 1 tmp = PLL_CTR2_VL; // V-L
52 1 else if ( (fp_p >= Fp_VH_Start) && (fp_p < Fp_UHF_Start) )
53 1 tmp = PLL_CTR2_VH; // V-H
54 1 else if ( fp_p <= Fp_UHF_End )
C51 COMPILER V7.50 TV_TUNER 12/14/2006 10:36:46 PAGE 2
55 1 tmp = PLL_CTR2_UHF; // UHF
56 1 else
57 1 {
58 2 tmp = PLL_CTR2_VL;
59 2 fp_p = Fp_VL_Start;
60 2 }
61 1
62 1 I2C_SendStart2();
63 1 I2C_SendByte2(PLL_WRID); //Write W_ID
64 1 if ( fp_p >= _Fp )
65 1 {
66 2 I2C_SendByte2((Fp_Table[fp_p]+Fif+fine-0x80)/256);
67 2 I2C_SendByte2((Fp_Table[fp_p]+Fif+fine-0x80)%256);
68 2 I2C_SendByte2(PLL_CTR1);
69 2 I2C_SendByte2(tmp); //VL VH UH select
70 2 }
71 1 else
72 1 {
73 2 I2C_SendByte2(PLL_CTR1);
74 2 I2C_SendByte2(tmp); //VL VH UH select
75 2 I2C_SendByte2((Fp_Table[fp_p]+Fif+fine-0x80)/256);
76 2 I2C_SendByte2((Fp_Table[fp_p]+Fif+fine-0x80)%256);
77 2 }
78 1 I2C_SendStop2(); //Stop
79 1
80 1 _Fp = fp_p;
81 1 _FINE = fine;
82 1
83 1 for(i=0;i<200;i++)
84 1 {
85 2 I2C_SendStart2();
86 2 I2C_SendByte2(PLL_WRID|0x1); //Write W_ID
87 2 tmp = I2C_GetByte2(1);
88 2 I2C_SendStop2();
89 2 if ( (tmp&0xC0) == 0x40 ) // Locked
90 2 break;
91 2 }
92 1
93 1 for(i=0;i<200;i++); // Delay
94 1
95 1 #ifdef DEMOD_WRID
96 1 if ( TV_If_AFC() )
97 1 for(i=0;i<250;i++); // Delay
98 1 #endif
99 1 }
100
101 #ifdef DEMOD_WRID
102
103 void Set_CS(BYTE cs)
104 {
105 1 _CS = cs;
106 1 }
107
108 void Set_SIF(BYTE sif)
109 {
110 1 _SIF = sif;
111 1 }
112
113 void Set_DEMOD()
114 {
115 1 BYTE sif;
116 1
C51 COMPILER V7.50 TV_TUNER 12/14/2006 10:36:46 PAGE 3
117 1 switch (_CS)
118 1 {
119 2 case NTSC :
120 2 case NTSC443 :
121 2 case NTSCN :
122 2 _CS = NTSC;
123 2 break;
124 2 default :
125 2 _CS = PAL;
126 2 break;
127 2 }
128 1
129 1 switch ( _SIF )
130 1 {
131 2 case M:
132 2 sif = 0;
133 2 break;
134 2 case BG:
135 2 sif = 1;
136 2 break;
137 2 case DK:
138 2 sif = 3;
139 2 break;
140 2 case I:
141 2 sif = 2;
142 2 break;
143 2 case L:
144 2 _CS = SECAM;
145 2 sif = 3;
146 2 break;
147 2 }
148 1
149 1 switch (_CS)
150 1 {
151 2 case NTSC:
152 2 RegB = 0x16;
153 2 RegC = 0x30; // -16dB takeover
154 2 RegE = 0x00;
155 2 break;
156 2 case PAL:
157 2 RegB = 0xD6;//0xD6;
158 2 RegC = 0x70;//60 // -16dB takeover
159 2 RegE = 0x00;//0x40;
160 2 break;
161 2 case SECAM: // SECAM L
162 2 RegB = 0x06;//0x46;
163 2 RegC = 0x70;//0x50; // 0 dB takeover
164 2 RegE = 0x00;//40
165 2 break;
166 2 }
167 1
168 1 // RegB = RegB | 0x01; // Sound trap bypass
169 1
170 1 #ifdef PIF_38_9
171 1 RegE = RegE | 0x08 | sif; // 08 for VIF38.9MHz
172 1 #endif
173 1
174 1 #ifdef PIF_38_0
RegE = RegE | 0x0C | sif; // 0C for VIF38.0MHz
#endif
177 1
178 1 /*
C51 COMPILER V7.50 TV_TUNER 12/14/2006 10:36:46 PAGE 4
179 1 RegB = 0xC6;//0x16;
180 1 RegC = 0x60;//0x70;
181 1 RegE = 0x89;
182 1 */
183 1 I2C_SendStart2();
184 1 I2C_SendByte2(DEMOD_WRID); // Write W_ID
185 1 I2C_SendByte2(0x0);
186 1
187 1 I2C_SendByte2(RegB);
188 1 I2C_SendByte2(RegC);
189 1 I2C_SendByte2(RegE);
190 1
191 1 I2C_SendStop2();
192 1 }
193
194 bit TV_If_AFC()
195 {
196 1 BYTE d_status;
197 1
198 1 I2C_SendStart2();
199 1 I2C_SendByte2(DEMOD_WRID|0x01); //Write W_ID
200 1 d_status = I2C_GetByte2(1);
201 1 I2C_SendStop2();
202 1
203 1 if ( (d_status&0xC0) == 0xC0 )
204 1 return 1;
205 1 else
206 1 return 0;
207 1 }
208
209 bit TV_If_Locked()
210 {
211 1 BYTE d_status;
212 1
213 1 I2C_SendStart2();
214 1 I2C_SendByte2(DEMOD_WRID|0x01); //Read W_ID
215 1 d_status = I2C_GetByte2(1)&0xDF;
216 1 I2C_SendStop2();
217 1
218 1 if ( (d_status==0xC4) ||(d_status==0xC2) || (d_status==0xC0) || (d_status==0xDE) || (d_status==0xDC) )
219 1 return 1;
220 1 else
221 1 return 0;
222 1 }
223 #endif
224
225 void I2C_SendStart2(void)
226 {
227 1 I2C_SDA2 = 1;
228 1 I2C_Delay(2);
229 1 I2C_SCL2 = 1;
230 1 I2C_Delay(2);
231 1
232 1 I2C_SDA2 = 0;
233 1 I2C_Delay(2);
234 1 I2C_SCL2 = 0;
235 1 I2C_Delay(2);
236 1 }
237
238 void I2C_SendStop2(void)
239 {
240 1 I2C_SDA2 = 0;
C51 COMPILER V7.50 TV_TUNER 12/14/2006 10:36:46 PAGE 5
241 1 I2C_Delay(2);
242 1 I2C_SCL2 = 1;
243 1 I2C_Delay(2);
244 1 I2C_SDA2 = 1;
245 1 I2C_Delay(2);
246 1 }
247
248 void I2C_SendByte2(BYTE val)
249 {
250 1 BYTE i;
251 1
252 1 for (i=0; i<8; i++)
253 1 {
254 2 I2C_SDA2 = (bit)(val & 0X80);
255 2 I2C_Delay(2);
256 2 I2C_SCL2 = 1;
257 2 val <<= 1;
258 2 I2C_Delay(2);
259 2 I2C_SCL2 = 0;
260 2 I2C_Delay(2);
261 2 }
262 1
263 1 I2C_SDA2 = 1;
264 1 I2C_Delay(2);
265 1 I2C_SCL2 = 1;
266 1 I2C_Delay(2);
267 1 I2C_SCL2 = 0;
268 1 I2C_Delay(2);
269 1 }
270
271 BYTE I2C_GetByte2(bit ACK_NACK)
272 {
273 1 BYTE i;
274 1 BYTE rd_byte;
275 1
276 1 rd_byte = 0;
277 1
278 1 for(i=0; i<8; i++)
279 1 {
280 2 I2C_SCL2 = 1;
281 2 rd_byte <<= 1;
282 2 I2C_Delay(2);
283 2 rd_byte |= I2C_SDA2;
284 2 I2C_SCL2 = 0;
285 2 I2C_Delay(2);
286 2 }
287 1
288 1 I2C_SDA2 = ACK_NACK;
289 1 I2C_Delay(2);
290 1 I2C_SCL2 = 1;
291 1 I2C_Delay(2);
292 1 I2C_SCL2 = 0;
293 1 I2C_Delay(2);
294 1 I2C_SDA2 = 1;
295 1 I2C_Delay(2);
296 1
297 1 return(rd_byte);
298 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1000 ----
C51 COMPILER V7.50 TV_TUNER 12/14/2006 10:36:46 PAGE 6
CONSTANT SIZE = 806 ----
XDATA SIZE = 10 12
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -