📄 tuner.lst
字号:
C51 COMPILER V7.06 TUNER 03/16/2009 19:12:51 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TUNER
OBJECT MODULE PLACED IN tuner.OBJ
COMPILER INVOKED BY: G:\Keil\C51\BIN\C51.EXE tuner.c OPTIMIZE(9,SIZE) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //#include <intrins.h>
2 #include "global.h"
3 #include "tuner.h"
4
5 void Delay10us(UINT16 twDelay)
6 {
7 1 UINT16 i;
8 1 for( i=0;i<twDelay;i++ )
9 1 {
10 2 // _nop_();
11 2 // _nop_();
12 2 WatchDog;
13 2 }
14 1 }
15
16
17
18 /****************************************************************************/
19 /* Command Delay */
20 /****************************************************************************/
21 void CMD_Delay(BYTE i)
22 {
23 1 for (; i!=0; i--) ;
24 1 }
25
26 void CMD_CheckHighSCL()
27 {
28 1 I2cSCL = 1;
29 1 }
30
31 void CMD_SendStart()
32 {
33 1 I2cSCL = 1;
34 1 CMD_Delay(CMD_DELAY);
35 1 I2cSDA = 0;
36 1 CMD_Delay(CMD_DELAY);
37 1 I2cSCL = 0;
38 1 CMD_Delay(CMD_DELAY);
39 1 }
40
41 void CMD_SendStop()
42 {
43 1 I2cSDA = 0;
44 1 CMD_CheckHighSCL();
45 1 CMD_Delay(CMD_DELAY);
46 1 I2cSDA = 1;
47 1 CMD_Delay(CMD_DELAY);
48 1 }
49
50 BYTE CMD_SendByte(BYTE bByte)
51 {
52 1 BYTE i;
53 1 BIT Acknowledge=1;
54 1 for(i=0;i<8;i++)
55 1 {
C51 COMPILER V7.06 TUNER 03/16/2009 19:12:51 PAGE 2
56 2 if(bByte&0x80)
57 2 I2cSDA=1;
58 2 else
59 2 I2cSDA=0;
60 2 bByte<<=1;
61 2 CMD_Delay(CMD_DELAY);
62 2 CMD_CheckHighSCL();
63 2 I2cSCL =0;
64 2 }
65 1 I2cSDA=1;
66 1 I2cSCL=1;
67 1 CMD_Delay(CMD_DELAY);
68 1 if (I2cSDA) Acknowledge=0;
69 1 I2cSCL=0;
70 1 CMD_Delay(CMD_DELAY);
71 1 return Acknowledge;
72 1 }
73
74 BYTE CMD_GetByte(BYTE Acknowledge)
75 {
76 1 BYTE i,bByte=0, bMask=0x80;
77 1 for(i=0;i<8;i++)
78 1 {
79 2 CMD_Delay(CMD_DELAY);
80 2 I2cSCL=1;
81 2 if(I2cSDA)bByte|=bMask;
82 2 bMask >>= 1;
83 2 I2cSCL =0;
84 2 }
85 1 I2cSDA =(Acknowledge)?1:0;
86 1 CMD_CheckHighSCL();
87 1 CMD_Delay(CMD_DELAY);
88 1 I2cSCL =0;
89 1 I2cSDA =1;
90 1 CMD_Delay(CMD_DELAY);
91 1 return bByte;
92 1 }
93
94 //////////////////////////////////////////////
95
96 void Tuner_I2cSendData()
97 {
98 1 BYTE i;
99 1 EA=0;
100 1 CMD_SendStart();
101 1 if (CMD_SendByte(0x0c0)) //chip addr of write data to driver
102 1 {
103 2 for (i=0; i<5; i++)
104 2 {
105 3 if (!CMD_SendByte(WriteDataWord[i])) //0 err
106 3 {
107 4 break;
108 4 }
109 3 }
110 2 }
111 1 CMD_SendStop(); //???
112 1 EA=1;
113 1 CMD_Delay(CMD_DELAY);
114 1 CMD_Delay(CMD_DELAY);
115 1
116 1 }
117
C51 COMPILER V7.06 TUNER 03/16/2009 19:12:51 PAGE 3
118 void Tuner_I2cReadData()
119 {
120 1
121 1 BYTE i;
122 1 EA=0;
123 1 CMD_SendStart();
124 1 if (CMD_SendByte(0x0c1)) //chip addr of read data
125 1 {
126 2 for (i=0;i<5;i++)
127 2 ReadDataWord[i] =(i==4)? CMD_GetByte(1):CMD_GetByte(0); //the last byte with ACK.
128 2 CMD_SendStop();
129 2 }
130 1 else CMD_SendStop();
131 1 EA=1;
132 1 }
133
134 // BYTE tbRead1; //for test only
135 // BYTE tbRead2;
136 // BYTE tbRead3;
137 // BYTE tbRead4;
138
139 BIT Stereo=False;
140 BIT Ready=False;
141
142 static void AssembleFrequencyWord(void)
143 {
144 1 UINT16 twPLL =0; //Dec
145 1 UINT32 tdwPresetVCO =gdwPresetVCO; //Khz
146 1 BYTE tbTmp1;
147 1 BYTE tbTmp2;
148 1
149 1 // calcu1ate frequency dataword bits from given station frequency BCD:
150 1 if(FlagHighInjection)
151 1 twPLL =(unsigned int)((float)((tdwPresetVCO +225)*4)/(float)REFERENCE_FREQ);
152 1 else
153 1 twPLL =(unsigned int)((float)((tdwPresetVCO -225)*4)/(float)REFERENCE_FREQ);
154 1 //convert BCD to Hex.
155 1 tbTmp1 =(unsigned char)(twPLL%256); //6789=Hex1A85 -->133=Hex85
156 1 tbTmp2 =(unsigned char)(twPLL/256); // -->26=Hex1A
157 1
158 1 WriteDataWord[0]=tbTmp2; //high block
159 1 WriteDataWord[1]=tbTmp1;
160 1
161 1 }
162
163 //BYTE Write1;
164
165 static void AssembleData(void)
166 {
167 1 WriteDataWord[3] = 0x11; //32k /p1 found.
168 1 WriteDataWord[4] = 0x00; //70us去加重电路
169 1
170 1
171 1
172 1 if (FlagSearch ) // search mode
173 1 {
174 2 WriteDataWord[0] |= 0x40; // Set to 1 for search start; other =0.
175 2
176 2 // Set the bits of BYTE3 of search
177 2 if(FlagSearchtUp) WriteDataWord[2] |= 0x80;
178 2 else WriteDataWord[2] &= 0x7f; //0111 1111
179 2
C51 COMPILER V7.06 TUNER 03/16/2009 19:12:51 PAGE 4
180 2 if ((FlagLevel & 0x02) == 0x02) WriteDataWord[2] |=0x40 ;
181 2 else WriteDataWord[2] &=0x0bf; //1011 1111
182 2
183 2 if ((FlagLevel & 0x01) == 0x01) WriteDataWord[2] |=0x20;
184 2 else WriteDataWord[2] &=0x0df; //1101 1111
185 2 // Write1= WriteDataWord[0] ;
186 2
187 2
188 2 }
189 1 /////PreSet mode
190 1 else
191 1 {
192 2 AssembleFrequencyWord();
193 2 WriteDataWord[0] &= 0x0bf; // Set to 0 for Preset mode. 1011,1111
194 2 }
195 1 if(FlagMute) WriteDataWord[0] |= 0x80;
196 1 else WriteDataWord[0] &= 0x7f ; //0111 1111
197 1 //set the public data bit of BYTE3
198 1 if(FlagHighInjection) WriteDataWord[2] |= 0x10 ;
199 1 else WriteDataWord[2] &= 0x0ef; //1110 1111
200 1
201 1 if(FlagMono) WriteDataWord[2] |= 0x08 ;
202 1 else WriteDataWord[2] &= 0x0f7 ; //1111 0111
203 1
204 1 //set the public data bit of BYTE4
205 1 if(FlagSWPORT2) WriteDataWord[3] |= 0x80;
206 1 else WriteDataWord[3] &= 0x7f ; //0111 1111
207 1
208 1 if(FlagSoftMute) WriteDataWord[3] |= 0x08;
209 1 else WriteDataWord[3] &= 0xf7 ; //1111 0111
210 1
211 1 if(FlagSWPORT1) WriteDataWord[3] |= 0x01;
212 1 else WriteDataWord[3] &= 0xfe ; //1111 1110
213 1
214 1
215 1
216 1
217 1 }
218 /*
219 ///****************test
220 void DisAssembleFrequencyWord(void)
221 {
222 UINT16 twPLL =0; //Dec
223 UINT32 tdwtestVCO ; //Khz
224
225 BYTE tbTmp1=ReadDataWord[1];
226 BYTE tbTmp2=ReadDataWord[0];
227 tbTmp2&=0x3f;
228
229
230 twPLL=65535;
231
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -