📄 fm_tea5767.lst
字号:
C51 COMPILER V7.09 FM_TEA5767 05/22/2008 10:13:58 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE FM_TEA5767
OBJECT MODULE PLACED IN ..\output\fm_tea5767.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\src\fm_tea5767.c LARGE OPTIMIZE(9,SIZE) BROWSE INCDIR(..\..\..\bsp\inclu
-de;..\src\include;..\..\include) DEFINE(CONFIG_ASIC) DEBUG OBJECTEXTEND PRINT(.\fm_tea5767.lst) OBJECT(..\output\fm_tea5
-767.obj)
line level source
1 #include "api.h"
*** WARNING C318 IN LINE 1 OF ..\src\fm_tea5767.c: can't open file 'api.h'
2 #include "fm_tea5767.h"
*** ERROR C129 IN LINE 61 OF ..\..\INCLUDE\FM_TEA5767.H: missing ';' before 'u8FMdata'
3 #include "i2c.h"
4
5 #define mCombinU16(u16, h1, h0) \
6 { \
7 ((UNION16 *)&(u16))->v8[1] = h0; \
8 ((UNION16 *)&(u16))->v8[0] = h1; \
9 }
10
11 extern INT8U _buf[64];
12
13 extern void my_sprintf(char *buf, const char *fmt, ...);
14
15 INT8U u8FMdata[5];
16 INT16U u16RadioFrequency;
17 code INT8U U8RadioSet[5] = {MUTE_TEA5767_ON,0x00,0x00,STANDBY_ON,0x00};
18 //--------------------------------------------------------------------------
19 static BOOLEAN bRadioSetCommand(INT8U *ptr)
20 {
21 register INT8U i;
22 vI2C_Start();
23 if(FALSE == bI2C_ByteOut(TEA5767_ADDR_W))
24 return FALSE;
25 for(i=0;i<5;i++)
26 {
27 if(FALSE == bI2C_ByteOut(ptr[i]))
28 return FALSE;
29 }
30 vI2C_Stop();
31 return true;
32 }
33
34 BOOLEAN bRadioInit(void)
35 {
36 FM_BUSEN = 1;
37
38 u16RadioFrequency = FM_FREQ_MIN;
39
40 return(bRadioSetCommand(U8RadioSet));
41 }
42
43 //--------------------------------------------------------------------------
44 BOOLEAN bRadioStop(void)
45 {
46 if(bRadioSetCommand(U8RadioSet)==FALSE)
47 return FALSE;
48
49 FM_BUSEN = 0;
50
51 return TRUE;
C51 COMPILER V7.09 FM_TEA5767 05/22/2008 10:13:58 PAGE 2
52 }
53
54 //--------------------------------------------------------------------------
55 static BOOLEAN bWrite_Command_To_TEA5767(void)
56 {
57 return(bRadioSetCommand(u8FMdata));
58 }
59
60 //--------------------------------------------------------------------------
61 static BOOLEAN bRead_Command_From_TDA5767(void)
62 {
63 register INT8U i;
64 vI2C_Start();
65
66 if(FALSE == bI2C_ByteOut(TEA5767_ADDR_R))
67 return FALSE;
68
69 for(i=0;i<4;i++)
70 u8FMdata[i] = u8I2C_ByteIn(0);
71
72 u8FMdata[4] = u8I2C_ByteIn(1);
73
74 vI2C_Stop();
75
76 return TRUE;
77 }
78
79
80 //--------------------------------------------------------------------------
81 static INT16U u16FreqToPLL(INT32U u16Freq)
82 {
83 INT32U u32Freq = u16Freq;
84 return (((u32Freq*10000)-225000)/8192); //for XTAL_32768K // 4/32768 = 8192
85 }
86
87 //--------------------------------------------------------------------------
88 static INT32U u16PLLToFreq(INT16U u16pll)
89 {
90 INT32U u32pll = u16pll;
91 INT16U r;
92
93 r = ((u32pll*8192)+225000)/10000; // 4/32768 = 8192
94
95 if((r%10) >= 5)
96 r = ((r/10)+1) * 10;
97
98 return r;
99 }
100
101 //--------------------------------------------------------------------------
102
103 #if 0
void vPrintFreq()
{
INT16U freq1 = u16RadioFrequency/FM_FREQ_STEP;
my_sprintf(_buf, "%d.%d ", freq1/10, freq1%10);
if(u8FMdata[2] & 0x80)
_buf[6] = 'S';
vLcd_Disp_FMfreq(_buf);
C51 COMPILER V7.09 FM_TEA5767 05/22/2008 10:13:58 PAGE 3
}
#endif
116
117 //-------------------------------------------------------
118 BOOLEAN bSetFmFrequency(INT16U freq)
119 {
120 INT16U u16PLL;
121
122 u16RadioFrequency = freq;
123
124 u16PLL = u16FreqToPLL(u16RadioFrequency);
125
126 u8FMdata[0] = (INT8U)(u16PLL >> 8);
127 u8FMdata[1] = (INT8U)(u16PLL & 0xFF);
128 u8FMdata[2] = LOW_SIDE_INJECTION;
129 u8FMdata[3] = US_EUROPE_FM_BAND | XTAL_32768K | SOFT_MUTE_ON | STEREO_NOISE_CANCELLING_ON;
130 u8FMdata[4] = DTC_75us | PLLREF_ON;
131
132 if(FALSE == bWrite_Command_To_TEA5767())
133 return FALSE;
134
135 if(FALSE == bRead_Command_From_TDA5767())
136 return FALSE;
137
138 return TRUE;
139 }
140
141 void FmFrequencyUp()
142 {
143 u16RadioFrequency += FM_FREQ_STEP;
144 if(u16RadioFrequency > FM_FREQ_MAX)
145 u16RadioFrequency = FM_FREQ_MIN;
146 }
147 void FmFrequencyDown()
148 {
149 u16RadioFrequency -= FM_FREQ_STEP;
150 if(u16RadioFrequency < FM_FREQ_MIN)
151 u16RadioFrequency = FM_FREQ_MAX;
152 }
153
154 //-------------------------------------------------------
155 BOOLEAN bFmFrequencyUp(void)
156 {
157 FmFrequencyUp();
158 return bSetFmFrequency(u16RadioFrequency);
159 }
160
161
162 //--------------------------------------------------------------------------
163 BOOLEAN bFmFrequencyDown(void)
164 {
165 FmFrequencyDown();
166 return bSetFmFrequency(u16RadioFrequency);
167 }
168
169 extern BOOLEAN init_volume(void);
170 extern BOOLEAN close_volume(void);
171 extern void delay(UINT16 n);
172 //--------------------------------------------------------------------------
173 BOOLEAN bFmAutoSearch(INT8U u8UpDown)
174 {
175
C51 COMPILER V7.09 FM_TEA5767 05/22/2008 10:13:58 PAGE 4
176 INT16U pll_dec;
177 INT16U u16PLL;
178 register INT8U ReadFlag=0;
179 register INT8U count;
180 // BOOLEAN bFM_STEREO;
181 // INT8U u8FM_LEV;
182 // INT8U u8FM_IF;
183
184 if(SEARCH_UP == u8UpDown)
185 FmFrequencyUp();
186 else
187 FmFrequencyDown();
188
189 u16PLL = u16FreqToPLL(u16RadioFrequency);
190
191 u8FMdata[0] = ((INT8U)(u16PLL >> 8)) | MUTE_TEA5767_ON | SEARCH_MODE_ON;
192 u8FMdata[1] = (INT8U)(u16PLL & 0xFF);
193 u8FMdata[2] = u8UpDown | LOW_SIDE_INJECTION | SEARCH_STOP_LEVEL_LOW;
194 u8FMdata[3] = US_EUROPE_FM_BAND | XTAL_32768K | SOFT_MUTE_ON | STEREO_NOISE_CANCELLING_ON;
195 u8FMdata[4] = DTC_75us | PLLREF_ON;
196
197 if(FALSE == bWrite_Command_To_TEA5767())
198 return FALSE;
199
200 count = 0;
201 #if 1// marco modify for fm auto search
202 while(!ReadFlag)
203 {
204 if(FALSE == bRead_Command_From_TDA5767())
205 return FALSE;
206 ReadFlag = u8FMdata[0] & 0x80;
207 if(u16RadioFrequency>FM_FREQ_MAX || u16RadioFrequency<FM_FREQ_MIN)
208 break;
209 mCombinU16(pll_dec,u8FMdata[0]&0x3F, u8FMdata[1]);
210 u16RadioFrequency = u16PLLToFreq(pll_dec);
211 }
212
213 bSetFmFrequency(u16RadioFrequency);
214 return TRUE;
215 #else
while(count++ < 10)
{
delay(5);
if(FALSE == bRead_Command_From_TDA5767())
//return FALSE;
continue;
//ReadFlag = u8FMdata[0] & 0x80;
//if(ReadFlag)
bFM_STEREO = (u8FMdata[2] >> 7);
u8FM_IF = (u8FMdata[2] & 0x7F);
u8FM_LEV = (u8FMdata[3] >> 4);
if((u8FM_IF>0x31)&&(u8FM_IF<0x3e)&&(u8FM_LEV>=5)&&(bFM_STEREO))
{
init_volume();
bSetFmFrequency(u16RadioFrequency);
delay(5000);
close_volume();
return TRUE;
}
else
return FALSE;
C51 COMPILER V7.09 FM_TEA5767 05/22/2008 10:13:58 PAGE 5
}
// bSetFmFrequency(u16RadioFrequency);
return FALSE;
#endif
243
244 }
C51 COMPILATION COMPLETE. 1 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -