source: svn/newcon3bcm2_21bu/dst/dhl/src/devices/dtqs22ddp101b/SemcoMxL601.c @ 22

Last change on this file since 22 was 22, checked in by phkim, 11 years ago
  1. phkim
  2. newcon3sk 를 kctv 로 브랜치 함
  • Property svn:executable set to *
File size: 9.7 KB
Line 
1/********************************************************************
2* SemcoMxL601.c
3* MxL601 Functions
4* By WillowAndi 2011/11/14
5*********************************************************************/
6
7#include "UserDefinedIIC2.h"
8#include "SemcoMxL601.h"
9
10static int nGlobalSelIF;
11static int nGlobalMode;
12static int nGlobalGainLevel;
13
14MXL_STATUS status;
15MXL_COMMAND_T apiCmd;
16
17/* Initialize MxL601 */
18/* nMode :
19                  ANA_NTSC_MODE = 0x0,
20                  ANA_PAL_BG,
21                  ANA_PAL_I,
22                  ANA_PAL_D,
23                  ANA_SECAM_I,
24                  ANA_SECAM_L,
25                  DIG_DVB_C,
26                  DIG_ISDBT_ATSC,
27                  DIG_DVB_T,
28                  DIG_J83B
29*/
30/* nIF :
31  IF_3_65MHz  = 0,
32  IF_4MHz     = 1,
33  IF_4_1MHz   = 2,
34  IF_4_15MHz  = 3,
35  IF_4_5MHz   = 4,
36  IF_4_57MHz  = 5,
37  IF_5MHz     = 6,
38  IF_5_38MHz  = 7,
39  IF_6MHz     = 8,
40  IF_6_28MHz  = 9,
41  IF_7_2MHz   = 10,
42  IF_8_25MHz  = 11,
43  IF_35_25MHz = 12,
44  IF_36MHz    = 13,
45  IF_36_15MHz = 14,
46  IF_36_65MHz = 15,
47  IF_44MHz    = 16
48*/
49int SemcoMxL601_Init(int nUnit, int nMode, int nXtalCap, int nIF, int nGainLevel)
50{
51
52        /* Soft Reset */
53        SemcoMxL601_SoftReset(nUnit);
54
55        /* Overwrite Default */
56        apiCmd.commandId = MXL_DEV_OVERWRITE_DEFAULT_CFG;
57        apiCmd.MxLIf.cmdOverwriteDefault.I2cSlaveAddr = MXL601_ADDRESS;
58        apiCmd.MxLIf.cmdOverwriteDefault.SingleSupply_3_3V = MXL_ENABLE;
59        status = MxLWare601_API_ConfigDevice(&apiCmd);
60        if(status != MXL_TRUE)
61                return 1;
62
63        /* Xtal Setting : 16MHz */
64        apiCmd.commandId = MXL_DEV_XTAL_SET_CFG;
65        apiCmd.MxLIf.cmdXtalCfg.I2cSlaveAddr = MXL601_ADDRESS;
66        apiCmd.MxLIf.cmdXtalCfg.XtalFreqSel = XTAL_16MHz;
67        apiCmd.MxLIf.cmdXtalCfg.XtalCap = nXtalCap;
68        apiCmd.MxLIf.cmdXtalCfg.ClkOutEnable = MXL_ENABLE;
69        apiCmd.MxLIf.cmdXtalCfg.ClkOutDiv = MXL_DISABLE;
70        apiCmd.MxLIf.cmdXtalCfg.SingleSupply_3_3V = MXL_ENABLE; //MXL_DISABLE => 1.8v
71        apiCmd.MxLIf.cmdXtalCfg.XtalSharingMode = MXL_DISABLE;
72        status = MxLWare601_API_ConfigDevice(&apiCmd);
73
74        /* Power up setting */
75        apiCmd.commandId = MXL_TUNER_POWER_UP_CFG;
76        apiCmd.MxLIf.cmdTunerPoweUpCfg.I2cSlaveAddr = MXL601_ADDRESS;
77        apiCmd.MxLIf.cmdTunerPoweUpCfg.Enable       = MXL_ENABLE;
78        status = MxLWare601_API_ConfigTuner(&apiCmd);
79        if(status != MXL_TRUE)
80                return 1;
81
82
83        // Set IF
84        if(SemcoMxL601_SetIF(nUnit,nIF, nGainLevel)) // IF 6MHz
85                return 1;
86
87        // Set AGC
88        //if(SemcoMxL601_SetAGC(nUnit, AGC_EXTERNAL, nMode)) //AGC_SELF
89        //      return 1;
90
91        // Set Mode
92        if(SemcoMxL601_SetMode(nUnit,nMode)) 
93           return 1;
94
95       
96        // Set AGC for test
97        if(SemcoMxL601_SetAGC(nUnit, AGC_EXTERNAL, nMode)) //AGC_SELF
98                return 1;
99        return 0;
100       
101}
102
103/* Soft Reset */
104void SemcoMxL601_SoftReset(int nUnit)
105{
106
107        /* Soft Reset MxL601 */
108        apiCmd.commandId = MXL_DEV_SOFT_RESET_CFG;
109        apiCmd.MxLIf.cmdResetCfg.I2cSlaveAddr = MXL601_ADDRESS;
110        MxLWare601_API_ConfigDevice(&apiCmd);
111}
112
113/* Set IF */
114/*
115  nSelIF :
116                  IF_3_65MHz  = 0,
117                  IF_4MHz     = 1,
118                  IF_4_1MHz   = 2,
119                  IF_4_15MHz  = 3,
120                  IF_4_5MHz   = 4,
121                  IF_4_57MHz  = 5,
122                  IF_5MHz     = 6,
123                  IF_5_38MHz  = 7,
124                  IF_6MHz     = 8,
125                  IF_6_28MHz  = 9,
126                  IF_7_2MHz   = 10,
127                  IF_8_25MHz  = 11,
128                  IF_35_25MHz = 12,
129                  IF_36MHz    = 13,
130                  IF_36_15MHz = 14,
131                  IF_36_65MHz = 15,
132                  IF_44MHz    = 16
133*/
134int SemcoMxL601_SetIF(int nUnit, int nSelIF, int nGainLevel)
135{
136        /* IF Out setting */
137        apiCmd.commandId = MXL_DEV_IF_OUT_CFG;
138        apiCmd.MxLIf.cmdIfOutCfg.I2cSlaveAddr = MXL601_ADDRESS;
139        apiCmd.MxLIf.cmdIfOutCfg.IFOutFreq = nSelIF;
140        apiCmd.MxLIf.cmdIfOutCfg.ManualFreqSet = MXL_DISABLE;
141        apiCmd.MxLIf.cmdIfOutCfg.IFInversion = MXL_ENABLE; //MXL_DISABLE;
142        apiCmd.MxLIf.cmdIfOutCfg.GainLevel = nGainLevel;
143        apiCmd.MxLIf.cmdIfOutCfg.PathSel = IF_PATH1;
144        status = MxLWare601_API_ConfigDevice(&apiCmd);
145
146        nGlobalSelIF = SemcoMxL601_SelIF(nSelIF);
147
148        nGlobalGainLevel = nGainLevel;
149
150        if(status != MXL_TRUE)
151                return 1;
152
153        return 0;
154}
155
156//Return IF
157int SemcoMxL601_SelIF(int nSelIF)
158{
159        int nIF = 0; //Unit: KHz
160        if(nSelIF == IF_3_65MHz)                        //  IF_3_65MHz  = 0,
161                nIF = 3650;
162        else if(nSelIF == IF_4MHz)      //  IF_4MHz     = 1,
163                nIF = 4000;
164        else if(nSelIF == IF_4_1MHz)    //  IF_4_1MHz   = 2,
165                nIF = 4100;
166        else if(nSelIF == IF_4_15MHz)   //  IF_4_15MHz  = 3,
167                nIF = 4150;
168        else if(nSelIF == IF_4_5MHz)    //  IF_4_5MHz   = 4,
169                nIF = 4500;
170        else if(nSelIF == IF_4_57MHz)   //  IF_4_57MHz  = 5,
171                nIF = 4570;
172        else if(nSelIF == IF_5MHz)      //  IF_5MHz     = 6,
173                nIF = 5000;
174        else if(nSelIF == IF_5_38MHz)   //  IF_5_38MHz  = 7,
175                nIF = 5380;
176        else if(nSelIF == IF_6MHz)      //  IF_6MHz     = 8,
177                nIF = 6000;
178        else if(nSelIF == IF_6_28MHz)   //  IF_6_28MHz  = 9,
179                nIF = 6280;
180        else if(nSelIF == IF_7_2MHz)    //  IF_7_2MHz   = 10,
181                nIF = 7200;
182        else if(nSelIF == IF_8_25MHz)   //  IF_8_25MHz  = 11,
183                nIF = 8250;
184        else if(nSelIF == IF_35_25MHz)  //  IF_35_25MHz = 12,
185                nIF = 35250;
186        else if(nSelIF == IF_36MHz)     //  IF_36MHz    = 13,
187                nIF = 36000;
188        else if(nSelIF == IF_36_15MHz)  //  IF_36_15MHz = 14,
189                nIF = 36150;
190        else if(nSelIF == IF_36_65MHz)  //  IF_36_65MHz = 15,
191                nIF = 36650;
192        else if(nSelIF == IF_44MHz)     //  IF_44MHz    = 16,
193                nIF = 44000;
194        else
195                nIF = 5000;
196        return nIF;
197}
198
199/* Set AGC */
200/* nType :   AGC_SELF = 0, AGC_EXTERNAL = 1 */
201int SemcoMxL601_SetAGC(int nUnit,int nType, int nMode)
202{
203        /* AGC Setting */
204        apiCmd.commandId = MXL_TUNER_AGC_CFG;
205        apiCmd.MxLIf.cmdAgcSetCfg.I2cSlaveAddr = MXL601_ADDRESS;
206        apiCmd.MxLIf.cmdAgcSetCfg.AgcSel = AGC1;
207
208        apiCmd.MxLIf.cmdAgcSetCfg.AgcType = nType;
209
210        if(nMode == DIG_DVB_C)//20120614 CSM change
211                apiCmd.MxLIf.cmdAgcSetCfg.SetPoint = 58; // DVB_C AGC TOP
212        else
213                apiCmd.MxLIf.cmdAgcSetCfg.SetPoint = 66; // DVB_T, ATSC, J83B AGC TOP
214
215    apiCmd.MxLIf.cmdAgcSetCfg.AgcPolarityInverstion = MXL_DISABLE; //MXL_DISABLE;  // New Added in V2 - 2011.12.27
216
217        status = MxLWare601_API_ConfigTuner(&apiCmd);
218
219        if(status != MXL_TRUE)
220                return 1;
221
222        return 0;
223}
224
225/* Set Application Mode */
226/* nMode :
227                  ANA_NTSC_MODE = 0x0,
228                  ANA_PAL_BG,
229                  ANA_PAL_I,
230                  ANA_PAL_D,
231                  ANA_SECAM_I,
232                  ANA_SECAM_L,
233                  DIG_DVB_C,
234                  DIG_ISDBT_ATSC,
235                  DIG_DVB_T,
236                  DIG_J83B
237*/
238int SemcoMxL601_SetMode(int nUnit,int nMode)
239{
240        /* Application Mode setting */
241        apiCmd.commandId = MXL_TUNER_MODE_CFG;
242        apiCmd.MxLIf.cmdModeCfg.I2cSlaveAddr = MXL601_ADDRESS;
243        apiCmd.MxLIf.cmdModeCfg.SignalMode = nMode;
244        apiCmd.MxLIf.cmdModeCfg.IFOutFreqinKHz = nGlobalSelIF;//unsigned int °ª ÇÊ¿ä.
245    apiCmd.MxLIf.cmdModeCfg.XtalFreqSel = XTAL_16MHz;          // New Added in V2 - 2011.12.27
246    apiCmd.MxLIf.cmdModeCfg.IFOutGainLevel = nGlobalGainLevel; // New Added in V2 - 2011.12.27
247        status = MxLWare601_API_ConfigTuner(&apiCmd);
248
249        nGlobalMode = nMode;
250
251        if(status != MXL_TRUE)
252                return 1;
253
254        return 0;
255}
256
257/* Set Frequency */
258/* nBandWidth :
259                          ANA_TV_DIG_CABLE_BW_6MHz = 0x00,    // Analog TV and Digital Cable Mode 6MHz 
260                          ANA_TV_DIG_CABLE_BW_7MHz = 0x01,    // Analog TV and Digital Cable Mode 7MHz
261                          ANA_TV_DIG_CABLE_BW_8MHz = 0x02,    // Analog TV and Digital Cable Mode 8MHz
262                          DIG_TERR_BW_6MHz = 0x20,            // Digital Terrestrial Mode 6MHz
263                          DIG_TERR_BW_7MHz = 0x21,            // Digital Terrestrial Mode 7MHz
264                          DIG_TERR_BW_8MHz = 0x22             // Digital Terrestrial Mode 8MHz
265*/
266int SemcoMxL601_SetFrequency(int nUnit, unsigned int nFreq_Hz, int nBandWidth)
267{
268        /* Channel frequency & bandwidth setting */
269        apiCmd.commandId = MXL_TUNER_CHAN_TUNE_CFG;
270        apiCmd.MxLIf.cmdChanTuneCfg.I2cSlaveAddr = MXL601_ADDRESS;
271        apiCmd.MxLIf.cmdChanTuneCfg.TuneType = VIEW_MODE;
272        apiCmd.MxLIf.cmdChanTuneCfg.BandWidth = nBandWidth;
273        apiCmd.MxLIf.cmdChanTuneCfg.FreqInHz = nFreq_Hz;
274        apiCmd.MxLIf.cmdChanTuneCfg.SignalMode = nGlobalMode;
275        apiCmd.MxLIf.cmdChanTuneCfg.XtalFreqSel = XTAL_16MHz;
276        apiCmd.MxLIf.cmdChanTuneCfg.IFOutFreqinKHz = nGlobalSelIF;//csm add
277        status = MxLWare601_API_ConfigTuner(&apiCmd);
278        if(status != MXL_TRUE)
279                return 1;
280/*
281        // Sequencer setting
282        apiCmd.commandId = MXL_TUNER_START_TUNE_CFG;
283        apiCmd.MxLIf.cmdStartTuneCfg.I2cSlaveAddr = MXL601_ADDRESS;
284        apiCmd.MxLIf.cmdStartTuneCfg.StartTune = MXL_DISABLE;
285        status = MxLWare601_API_ConfigTuner(&apiCmd);
286        if(status != MXL_TRUE)
287                return 1;
288*/
289        // Sequencer setting
290        apiCmd.commandId = MXL_TUNER_START_TUNE_CFG;
291        apiCmd.MxLIf.cmdStartTuneCfg.I2cSlaveAddr = MXL601_ADDRESS;
292        apiCmd.MxLIf.cmdStartTuneCfg.StartTune = MXL_ENABLE;
293        status = MxLWare601_API_ConfigTuner(&apiCmd);
294        if(status != MXL_TRUE)
295                return 1;
296
297        // Wait 100ms
298        MxL_Sleep(100);
299
300        return 0;
301
302}
303
304
305/* Get Lock Status */
306/* return : 1-lock, 0-unlock */
307unsigned char SemcoMxL601_GetLock(int nUnit)
308{
309        unsigned char bLock;
310
311        bLock = 0;
312
313        // Read back Tuner lock status
314        apiCmd.commandId = MXL_TUNER_LOCK_STATUS_REQ;
315        apiCmd.MxLIf.cmdTunerLockReq.I2cSlaveAddr = MXL601_ADDRESS;
316        if (MXL_TRUE == MxLWare601_API_GetTunerStatus(&apiCmd))
317        {
318                if (MXL_LOCKED == apiCmd.MxLIf.cmdTunerLockReq.RfSynLock &&     MXL_LOCKED == apiCmd.MxLIf.cmdTunerLockReq.RefSynLock)
319                {
320                   bLock = 1;
321                }
322        }
323
324        return bLock;
325
326}
327
328/* Get Power Level */
329float SemcoMxL601_GetPowerLevel(int nUnit)
330{
331        float nPowerLevel;
332
333        // Read back Tuner lock status
334        apiCmd.commandId = MXL_TUNER_LOCK_STATUS_REQ;
335        apiCmd.MxLIf.cmdTunerLockReq.I2cSlaveAddr = MXL601_ADDRESS;
336        if(MXL_TRUE == MxLWare601_API_GetTunerStatus(&apiCmd))
337        {
338      nPowerLevel = apiCmd.MxLIf.cmdTunerPwrReq.RxPwr;
339        }else{
340       return 1;
341        }
342
343        return nPowerLevel;
344
345}
346
347/* Get Chip Information */
348void SemcoMxL601_GetChipInfo(int nUnit, int *lpChipId, int *lpChipVer)
349{
350        apiCmd.commandId = MXL_DEV_ID_VERSION_REQ;
351        apiCmd.MxLIf.cmdTunerLockReq.I2cSlaveAddr = MXL601_ADDRESS;
352
353        MxLWare601_API_GetDeviceStatus(&apiCmd);
354
355        *lpChipId  = (int)apiCmd.MxLIf.cmdDevInfoReq.ChipId;
356        *lpChipVer = (int)apiCmd.MxLIf.cmdDevInfoReq.ChipVersion;
357}
Note: See TracBrowser for help on using the repository browser.