1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi // Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi // No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi // modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi // supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi // Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi // Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi // obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi // such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi // MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi // confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi // third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi // kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi // without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi // intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi // and in conformity with any international standard. You agree to waive any
38*53ee8cc1Swenshuai.xi // claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi // incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi // In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi // consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi // revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi // You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi // even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi // request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi // parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi // services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi // MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi // ("Services").
52*53ee8cc1Swenshuai.xi // You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi // writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi // disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi // or otherwise:
58*53ee8cc1Swenshuai.xi // (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi // mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi // (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi // including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi // of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi // (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi // of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi // Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi // settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi // Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi // with the said Rules.
72*53ee8cc1Swenshuai.xi // The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi // be English.
74*53ee8cc1Swenshuai.xi // The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2006-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // (!��MStar Confidential Information!�L) by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi
95*53ee8cc1Swenshuai.xi
96*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
97*53ee8cc1Swenshuai.xi // Include Files
98*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
99*53ee8cc1Swenshuai.xi
100*53ee8cc1Swenshuai.xi #include <stdio.h>
101*53ee8cc1Swenshuai.xi #include <math.h>
102*53ee8cc1Swenshuai.xi
103*53ee8cc1Swenshuai.xi #include "drvDMD_ATSC.h"
104*53ee8cc1Swenshuai.xi
105*53ee8cc1Swenshuai.xi #include "MsTypes.h"
106*53ee8cc1Swenshuai.xi #if DMD_ATSC_UTOPIA_EN || DMD_ATSC_UTOPIA2_EN
107*53ee8cc1Swenshuai.xi #include "drvDMD_common.h"
108*53ee8cc1Swenshuai.xi #endif
109*53ee8cc1Swenshuai.xi
110*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
111*53ee8cc1Swenshuai.xi // Driver Compiler Options
112*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
113*53ee8cc1Swenshuai.xi
114*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_GALILEO 0x01
115*53ee8cc1Swenshuai.xi
116*53ee8cc1Swenshuai.xi #if defined(galileo)
117*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_VERSION DMD_ATSC_CHIP_GALILEO
118*53ee8cc1Swenshuai.xi #endif
119*53ee8cc1Swenshuai.xi
120*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
121*53ee8cc1Swenshuai.xi // Local Defines
122*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
123*53ee8cc1Swenshuai.xi
124*53ee8cc1Swenshuai.xi #define HAL_EXTERN_ATSC_DBINFO(y) y
125*53ee8cc1Swenshuai.xi
126*53ee8cc1Swenshuai.xi #define REG_IIC_BYPASS 0x0910
127*53ee8cc1Swenshuai.xi #define SRAM_BASE 0x8000
128*53ee8cc1Swenshuai.xi #define REG_MCU_RST 0x0B32
129*53ee8cc1Swenshuai.xi #define ATSC_OUTER_REG_BASE 0x2600
130*53ee8cc1Swenshuai.xi
131*53ee8cc1Swenshuai.xi #define LOAD_CODE_I2C_BLOCK_NUM 0x80
132*53ee8cc1Swenshuai.xi
133*53ee8cc1Swenshuai.xi #define EXTERN_ATSC_OUTER_STATE 0x80
134*53ee8cc1Swenshuai.xi #define EXTERN_ATSC_VSB_TRAIN_SNR_LIMIT 0x05
135*53ee8cc1Swenshuai.xi #define EXTERN_ATSC_FEC_ENABLE 0x1F
136*53ee8cc1Swenshuai.xi
137*53ee8cc1Swenshuai.xi #define VSB_ATSC 0x04
138*53ee8cc1Swenshuai.xi #define QAM256_ATSC 0x02
139*53ee8cc1Swenshuai.xi
140*53ee8cc1Swenshuai.xi #define I2C_SLAVE_ID ((pRes->sDMD_ATSC_InitData.u8I2CSlaveBus<<8) | pRes->sDMD_ATSC_InitData.u8I2CSlaveAddr)
141*53ee8cc1Swenshuai.xi
142*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
143*53ee8cc1Swenshuai.xi // Local Variables
144*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
145*53ee8cc1Swenshuai.xi
146*53ee8cc1Swenshuai.xi const MS_U8 EXTERN_ATSC_table[] = {
147*53ee8cc1Swenshuai.xi #include "DMD_EXTERN_ATSC.dat"
148*53ee8cc1Swenshuai.xi };
149*53ee8cc1Swenshuai.xi
150*53ee8cc1Swenshuai.xi static MS_U16 u16Lib_size = sizeof(EXTERN_ATSC_table);
151*53ee8cc1Swenshuai.xi
152*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
153*53ee8cc1Swenshuai.xi // Global Variables
154*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
155*53ee8cc1Swenshuai.xi
156*53ee8cc1Swenshuai.xi extern MS_U8 u8DMD_ATSC_DMD_ID;
157*53ee8cc1Swenshuai.xi
158*53ee8cc1Swenshuai.xi extern DMD_ATSC_ResData *psDMD_ATSC_ResData;
159*53ee8cc1Swenshuai.xi
160*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
161*53ee8cc1Swenshuai.xi // Local Functions
162*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
_I2C_READ_BYTE(MS_U16 u16Addr,MS_U8 * pu8Data)163*53ee8cc1Swenshuai.xi static MS_BOOL _I2C_READ_BYTE(MS_U16 u16Addr, MS_U8 *pu8Data)
164*53ee8cc1Swenshuai.xi {
165*53ee8cc1Swenshuai.xi DMD_ATSC_ResData *pRes = psDMD_ATSC_ResData + u8DMD_ATSC_DMD_ID;
166*53ee8cc1Swenshuai.xi
167*53ee8cc1Swenshuai.xi MS_BOOL bRet = TRUE;
168*53ee8cc1Swenshuai.xi MS_U8 u8MsbData[6] = {0};
169*53ee8cc1Swenshuai.xi
170*53ee8cc1Swenshuai.xi u8MsbData[0] = 0x10;
171*53ee8cc1Swenshuai.xi u8MsbData[1] = 0x00;
172*53ee8cc1Swenshuai.xi u8MsbData[2] = 0x00;
173*53ee8cc1Swenshuai.xi u8MsbData[3] = (u16Addr >> 8) &0xff;
174*53ee8cc1Swenshuai.xi u8MsbData[4] = u16Addr &0xff;
175*53ee8cc1Swenshuai.xi
176*53ee8cc1Swenshuai.xi u8MsbData[0] = 0x35;
177*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, 0, 1, u8MsbData);
178*53ee8cc1Swenshuai.xi
179*53ee8cc1Swenshuai.xi u8MsbData[0] = 0x10;
180*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, 0, 5, u8MsbData);
181*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_ReadBytes(I2C_SLAVE_ID, 0, 0, 1, pu8Data);
182*53ee8cc1Swenshuai.xi
183*53ee8cc1Swenshuai.xi u8MsbData[0] = 0x34;
184*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, 0, 1, u8MsbData);
185*53ee8cc1Swenshuai.xi
186*53ee8cc1Swenshuai.xi return bRet;
187*53ee8cc1Swenshuai.xi }
188*53ee8cc1Swenshuai.xi
_I2C_WRITE_BYTE(MS_U16 u16Addr,MS_U8 u8Data)189*53ee8cc1Swenshuai.xi static MS_BOOL _I2C_WRITE_BYTE(MS_U16 u16Addr, MS_U8 u8Data)
190*53ee8cc1Swenshuai.xi {
191*53ee8cc1Swenshuai.xi DMD_ATSC_ResData *pRes = psDMD_ATSC_ResData + u8DMD_ATSC_DMD_ID;
192*53ee8cc1Swenshuai.xi
193*53ee8cc1Swenshuai.xi MS_BOOL bRet = TRUE;
194*53ee8cc1Swenshuai.xi MS_U8 u8MsbData[6] = {0};
195*53ee8cc1Swenshuai.xi
196*53ee8cc1Swenshuai.xi u8MsbData[0] = 0x10;
197*53ee8cc1Swenshuai.xi u8MsbData[1] = 0x00;
198*53ee8cc1Swenshuai.xi u8MsbData[2] = 0x00;
199*53ee8cc1Swenshuai.xi u8MsbData[3] = (u16Addr >> 8) &0xff;
200*53ee8cc1Swenshuai.xi u8MsbData[4] = u16Addr &0xff;
201*53ee8cc1Swenshuai.xi u8MsbData[5] = u8Data;
202*53ee8cc1Swenshuai.xi
203*53ee8cc1Swenshuai.xi u8MsbData[0] = 0x35;
204*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, 0, 1, u8MsbData);
205*53ee8cc1Swenshuai.xi u8MsbData[0] = 0x10;
206*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, 0, 6, u8MsbData);
207*53ee8cc1Swenshuai.xi u8MsbData[0] = 0x34;
208*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, 0, 1, u8MsbData);
209*53ee8cc1Swenshuai.xi
210*53ee8cc1Swenshuai.xi return bRet;
211*53ee8cc1Swenshuai.xi }
212*53ee8cc1Swenshuai.xi
_I2C_WRITE_BYTES(MS_U16 u16Addr,MS_U8 * u8Data,MS_U8 u8Len)213*53ee8cc1Swenshuai.xi static MS_BOOL _I2C_WRITE_BYTES(MS_U16 u16Addr, MS_U8 *u8Data, MS_U8 u8Len)
214*53ee8cc1Swenshuai.xi {
215*53ee8cc1Swenshuai.xi DMD_ATSC_ResData *pRes = psDMD_ATSC_ResData + u8DMD_ATSC_DMD_ID;
216*53ee8cc1Swenshuai.xi
217*53ee8cc1Swenshuai.xi MS_BOOL bRet = TRUE;
218*53ee8cc1Swenshuai.xi MS_U16 index;
219*53ee8cc1Swenshuai.xi MS_U8 Data[0x80+5];
220*53ee8cc1Swenshuai.xi
221*53ee8cc1Swenshuai.xi Data[0] = 0x10;
222*53ee8cc1Swenshuai.xi Data[1] = 0x00;
223*53ee8cc1Swenshuai.xi Data[2] = 0x00;
224*53ee8cc1Swenshuai.xi Data[3] = (u16Addr >> 8) &0xff;
225*53ee8cc1Swenshuai.xi Data[4] = u16Addr &0xff;
226*53ee8cc1Swenshuai.xi
227*53ee8cc1Swenshuai.xi for(index = 0; index < u8Len ; index++)
228*53ee8cc1Swenshuai.xi {
229*53ee8cc1Swenshuai.xi Data[5+index] = u8Data[index];
230*53ee8cc1Swenshuai.xi }
231*53ee8cc1Swenshuai.xi
232*53ee8cc1Swenshuai.xi Data[0] = 0x35;
233*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, 0, 1, Data);
234*53ee8cc1Swenshuai.xi Data[0] = 0x10;
235*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, 0, 1, Data);
236*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, 0, (5 + u8Len), Data);
237*53ee8cc1Swenshuai.xi Data[0] = 0x34;
238*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, 0, 1, Data);
239*53ee8cc1Swenshuai.xi
240*53ee8cc1Swenshuai.xi return bRet;
241*53ee8cc1Swenshuai.xi }
242*53ee8cc1Swenshuai.xi
_I2C_Channel_Set(MS_U8 ch_num)243*53ee8cc1Swenshuai.xi static MS_BOOL _I2C_Channel_Set(MS_U8 ch_num)
244*53ee8cc1Swenshuai.xi {
245*53ee8cc1Swenshuai.xi DMD_ATSC_ResData *pRes = psDMD_ATSC_ResData + u8DMD_ATSC_DMD_ID;
246*53ee8cc1Swenshuai.xi
247*53ee8cc1Swenshuai.xi MS_BOOL bRet = TRUE;
248*53ee8cc1Swenshuai.xi MS_U8 Data[5] = {0x53, 0x45, 0x52, 0x44, 0x42};
249*53ee8cc1Swenshuai.xi
250*53ee8cc1Swenshuai.xi //Exit
251*53ee8cc1Swenshuai.xi Data[0] = 0x34;
252*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, NULL, 1, Data);
253*53ee8cc1Swenshuai.xi Data[0]=(ch_num & 0x01)? 0x36 : 0x45;
254*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, NULL, 1, Data);
255*53ee8cc1Swenshuai.xi
256*53ee8cc1Swenshuai.xi //Init
257*53ee8cc1Swenshuai.xi Data[0] = 0x53;
258*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, NULL, 5, Data);
259*53ee8cc1Swenshuai.xi Data[0]=(ch_num & 0x04)? 0x80 : 0x81;
260*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, NULL, 1, Data);
261*53ee8cc1Swenshuai.xi
262*53ee8cc1Swenshuai.xi if ((ch_num==4)||(ch_num==5)||(ch_num==1))
263*53ee8cc1Swenshuai.xi Data[0] = 0x82;
264*53ee8cc1Swenshuai.xi else
265*53ee8cc1Swenshuai.xi Data[0] = 0x83;
266*53ee8cc1Swenshuai.xi
267*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, NULL, 1, Data);
268*53ee8cc1Swenshuai.xi
269*53ee8cc1Swenshuai.xi if ((ch_num==4)||(ch_num==5))
270*53ee8cc1Swenshuai.xi Data[0]=0x85;
271*53ee8cc1Swenshuai.xi else
272*53ee8cc1Swenshuai.xi Data[0] = 0x84;
273*53ee8cc1Swenshuai.xi
274*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, NULL, 1, Data);
275*53ee8cc1Swenshuai.xi Data[0]=(ch_num & 0x01)? 0x51 : 0x53;
276*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, NULL, 1, Data);
277*53ee8cc1Swenshuai.xi Data[0]=(ch_num & 0x01)? 0x37 : 0x7F;
278*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, NULL, 1, Data);
279*53ee8cc1Swenshuai.xi Data[0] = 0x35;
280*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, NULL, 1, Data);
281*53ee8cc1Swenshuai.xi Data[0] = 0x71;
282*53ee8cc1Swenshuai.xi bRet &= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, NULL, 1, Data);
283*53ee8cc1Swenshuai.xi
284*53ee8cc1Swenshuai.xi return bRet;
285*53ee8cc1Swenshuai.xi }
286*53ee8cc1Swenshuai.xi
_I2C_Channel_Change(MS_U8 ch_num)287*53ee8cc1Swenshuai.xi static MS_BOOL _I2C_Channel_Change(MS_U8 ch_num)
288*53ee8cc1Swenshuai.xi {
289*53ee8cc1Swenshuai.xi DMD_ATSC_ResData *pRes = psDMD_ATSC_ResData + u8DMD_ATSC_DMD_ID;
290*53ee8cc1Swenshuai.xi
291*53ee8cc1Swenshuai.xi MS_BOOL bRet = TRUE;
292*53ee8cc1Swenshuai.xi MS_U8 Data[5] = {0x53, 0x45, 0x52, 0x44, 0x42};
293*53ee8cc1Swenshuai.xi
294*53ee8cc1Swenshuai.xi Data[0] = (ch_num & 0x01)? 0x81 : 0x80;
295*53ee8cc1Swenshuai.xi bRet&= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, 0, 1, Data);
296*53ee8cc1Swenshuai.xi Data[0] = (ch_num & 0x02)? 0x83 : 0x82;
297*53ee8cc1Swenshuai.xi bRet&= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, 0, 1, Data);
298*53ee8cc1Swenshuai.xi Data[0] = (ch_num & 0x04)? 0x85 : 0x84;
299*53ee8cc1Swenshuai.xi bRet&= pRes->sDMD_ATSC_InitData.I2C_WriteBytes(I2C_SLAVE_ID, 0, 0, 1, Data);
300*53ee8cc1Swenshuai.xi
301*53ee8cc1Swenshuai.xi return bRet;
302*53ee8cc1Swenshuai.xi }
303*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_InitClk(void)304*53ee8cc1Swenshuai.xi static void _HAL_EXTERN_ATSC_InitClk(void)
305*53ee8cc1Swenshuai.xi {
306*53ee8cc1Swenshuai.xi _I2C_Channel_Set(0);
307*53ee8cc1Swenshuai.xi
308*53ee8cc1Swenshuai.xi _I2C_Channel_Change(3);
309*53ee8cc1Swenshuai.xi }
310*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_Download(void)311*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_Download(void)
312*53ee8cc1Swenshuai.xi {
313*53ee8cc1Swenshuai.xi DMD_ATSC_ResData *pRes = psDMD_ATSC_ResData + u8DMD_ATSC_DMD_ID;
314*53ee8cc1Swenshuai.xi
315*53ee8cc1Swenshuai.xi MS_BOOL bRet = TRUE;
316*53ee8cc1Swenshuai.xi MS_U16 index;
317*53ee8cc1Swenshuai.xi MS_U16 SRAM_Address;
318*53ee8cc1Swenshuai.xi #if DMD_ATSC_UTOPIA_EN || DMD_ATSC_UTOPIA2_EN
319*53ee8cc1Swenshuai.xi MS_U32 SRAM_SSPI_Address;
320*53ee8cc1Swenshuai.xi #endif
321*53ee8cc1Swenshuai.xi MS_U8 u8TmpData;
322*53ee8cc1Swenshuai.xi MS_U16 u16AddressOffset = 0x6B80;
323*53ee8cc1Swenshuai.xi MS_U8 u8OrgSPISetting = 0x00;
324*53ee8cc1Swenshuai.xi
325*53ee8cc1Swenshuai.xi if (pRes->sDMD_ATSC_PriData.bDownloaded)
326*53ee8cc1Swenshuai.xi {
327*53ee8cc1Swenshuai.xi // Enable MCU Reset
328*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(REG_MCU_RST, 0x03);
329*53ee8cc1Swenshuai.xi
330*53ee8cc1Swenshuai.xi // Disable MCU Reset
331*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(REG_MCU_RST, 0x00);
332*53ee8cc1Swenshuai.xi
333*53ee8cc1Swenshuai.xi #if DMD_ATSC_UTOPIA_EN || DMD_ATSC_UTOPIA2_EN
334*53ee8cc1Swenshuai.xi MsOS_DelayTask(20);
335*53ee8cc1Swenshuai.xi #else
336*53ee8cc1Swenshuai.xi pRes->sDMD_ATSC_InitData.DelayMS(20);
337*53ee8cc1Swenshuai.xi #endif
338*53ee8cc1Swenshuai.xi
339*53ee8cc1Swenshuai.xi return bRet;
340*53ee8cc1Swenshuai.xi }
341*53ee8cc1Swenshuai.xi
342*53ee8cc1Swenshuai.xi // Enable MCU Reset
343*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(REG_MCU_RST, 0x03);
344*53ee8cc1Swenshuai.xi
345*53ee8cc1Swenshuai.xi bRet&=_I2C_Channel_Change(0);
346*53ee8cc1Swenshuai.xi
347*53ee8cc1Swenshuai.xi // Disable Watch-Dog
348*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x3008, 0x00);
349*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x3009, 0x00);
350*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x300A, 0x00);
351*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x300B, 0x00);
352*53ee8cc1Swenshuai.xi
353*53ee8cc1Swenshuai.xi bRet&=_I2C_Channel_Change(3);
354*53ee8cc1Swenshuai.xi
355*53ee8cc1Swenshuai.xi // Enable SRAM XDATA mapping
356*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x10E1, 0x20); // Start address
357*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x10E0, 0x3F); // End address
358*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x10E6, 0x08);
359*53ee8cc1Swenshuai.xi
360*53ee8cc1Swenshuai.xi if (pRes->sDMD_ATSC_InitData.bIsUseSspiLoadCode == TRUE)
361*53ee8cc1Swenshuai.xi {
362*53ee8cc1Swenshuai.xi #if DMD_ATSC_UTOPIA_EN || DMD_ATSC_UTOPIA2_EN
363*53ee8cc1Swenshuai.xi //turn on all pad in
364*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x0950, 0x00);
365*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x0951, 0x00);
366*53ee8cc1Swenshuai.xi
367*53ee8cc1Swenshuai.xi if (pRes->sDMD_ATSC_InitData.bIsSspiUseTsPin == TRUE)
368*53ee8cc1Swenshuai.xi {
369*53ee8cc1Swenshuai.xi printf("##### MSPI USE TS PIN : ENABLE #####\n");
370*53ee8cc1Swenshuai.xi bRet = _I2C_READ_BYTE(0x0976, &u8TmpData);
371*53ee8cc1Swenshuai.xi u8OrgSPISetting = u8TmpData;
372*53ee8cc1Swenshuai.xi u8TmpData &= ~0x03;
373*53ee8cc1Swenshuai.xi u8TmpData |= 0x02;
374*53ee8cc1Swenshuai.xi bRet = _I2C_WRITE_BYTE(0x0976, u8TmpData);
375*53ee8cc1Swenshuai.xi }
376*53ee8cc1Swenshuai.xi #endif
377*53ee8cc1Swenshuai.xi }
378*53ee8cc1Swenshuai.xi
379*53ee8cc1Swenshuai.xi bRet&=_I2C_Channel_Change(0);
380*53ee8cc1Swenshuai.xi
381*53ee8cc1Swenshuai.xi if (pRes->sDMD_ATSC_InitData.bIsUseSspiLoadCode == FALSE)
382*53ee8cc1Swenshuai.xi {
383*53ee8cc1Swenshuai.xi for (index = 0; index < u16Lib_size; )
384*53ee8cc1Swenshuai.xi {
385*53ee8cc1Swenshuai.xi SRAM_Address = SRAM_BASE + index;
386*53ee8cc1Swenshuai.xi if (index+LOAD_CODE_I2C_BLOCK_NUM-1<u16Lib_size)
387*53ee8cc1Swenshuai.xi {
388*53ee8cc1Swenshuai.xi bRet&= _I2C_WRITE_BYTES(SRAM_Address, (MS_U8 *)(EXTERN_ATSC_table+index), LOAD_CODE_I2C_BLOCK_NUM);
389*53ee8cc1Swenshuai.xi index=index+LOAD_CODE_I2C_BLOCK_NUM-1;
390*53ee8cc1Swenshuai.xi }
391*53ee8cc1Swenshuai.xi else
392*53ee8cc1Swenshuai.xi {
393*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTES(SRAM_Address, (MS_U8 *)(EXTERN_ATSC_table+index), u16Lib_size-index);
394*53ee8cc1Swenshuai.xi index=u16Lib_size;
395*53ee8cc1Swenshuai.xi }
396*53ee8cc1Swenshuai.xi }
397*53ee8cc1Swenshuai.xi
398*53ee8cc1Swenshuai.xi HAL_EXTERN_ATSC_DBINFO(printf("ATSC firmware code size = 0x[%x]\n", u16Lib_size));
399*53ee8cc1Swenshuai.xi
400*53ee8cc1Swenshuai.xi if(u16Lib_size >= 0x6b80)
401*53ee8cc1Swenshuai.xi {
402*53ee8cc1Swenshuai.xi HAL_EXTERN_ATSC_DBINFO(printf("Firmware code size over 0x6B80!!!\n"));
403*53ee8cc1Swenshuai.xi bRet = FALSE;
404*53ee8cc1Swenshuai.xi }
405*53ee8cc1Swenshuai.xi }
406*53ee8cc1Swenshuai.xi #if DMD_ATSC_UTOPIA_EN || DMD_ATSC_UTOPIA2_EN
407*53ee8cc1Swenshuai.xi else
408*53ee8cc1Swenshuai.xi {
409*53ee8cc1Swenshuai.xi printf("##### _HAL_EXTERN_ATSC_Download by MSPI #####\n");
410*53ee8cc1Swenshuai.xi
411*53ee8cc1Swenshuai.xi MDrv_DMD_SSPI_Init(0);
412*53ee8cc1Swenshuai.xi
413*53ee8cc1Swenshuai.xi SRAM_SSPI_Address = 0x80000000;
414*53ee8cc1Swenshuai.xi
415*53ee8cc1Swenshuai.xi MDrv_DMD_SSPI_RIU_Read8(0x0974, &u8TmpData);
416*53ee8cc1Swenshuai.xi u8TmpData |= 0x10;
417*53ee8cc1Swenshuai.xi MDrv_DMD_SSPI_RIU_Write8(0x0974, u8TmpData);
418*53ee8cc1Swenshuai.xi
419*53ee8cc1Swenshuai.xi MDrv_DMD_SSPI_MIU_Writes(SRAM_SSPI_Address, (MS_U8 *)EXTERN_ATSC_table, u16Lib_size);
420*53ee8cc1Swenshuai.xi
421*53ee8cc1Swenshuai.xi MDrv_DMD_SSPI_RIU_Read8(0x0974, &u8TmpData);
422*53ee8cc1Swenshuai.xi u8TmpData &= ~0x10;
423*53ee8cc1Swenshuai.xi MDrv_DMD_SSPI_RIU_Write8(0x0974, u8TmpData);
424*53ee8cc1Swenshuai.xi }
425*53ee8cc1Swenshuai.xi #endif
426*53ee8cc1Swenshuai.xi
427*53ee8cc1Swenshuai.xi //Set IF value
428*53ee8cc1Swenshuai.xi SRAM_Address = SRAM_BASE + u16AddressOffset + 0x0F;//BACKEND_IF_KHZ_0
429*53ee8cc1Swenshuai.xi u8TmpData = (pRes->sDMD_ATSC_InitData.u16IF_KHZ) & 0xFF;
430*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(SRAM_Address, u8TmpData);
431*53ee8cc1Swenshuai.xi
432*53ee8cc1Swenshuai.xi SRAM_Address = SRAM_BASE + u16AddressOffset + 0x10;//BACKEND_IF_KHZ_1
433*53ee8cc1Swenshuai.xi u8TmpData = (pRes->sDMD_ATSC_InitData.u16IF_KHZ) >> 8;
434*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(SRAM_Address, u8TmpData);
435*53ee8cc1Swenshuai.xi
436*53ee8cc1Swenshuai.xi //Set TS mode
437*53ee8cc1Swenshuai.xi SRAM_Address = SRAM_BASE + u16AddressOffset + 0x0C;//TS_SERIAL MODE
438*53ee8cc1Swenshuai.xi u8TmpData = (pRes->sDMD_ATSC_InitData.u5TsConfigByte_DivNum << 3) |
439*53ee8cc1Swenshuai.xi (pRes->sDMD_ATSC_InitData.u1TsConfigByte_ClockInv << 2) |
440*53ee8cc1Swenshuai.xi (pRes->sDMD_ATSC_InitData.u1TsConfigByte_DataSwap << 1) |
441*53ee8cc1Swenshuai.xi (pRes->sDMD_ATSC_InitData.u1TsConfigByte_SerialMode);
442*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(SRAM_Address, u8TmpData);
443*53ee8cc1Swenshuai.xi //Set IQSwap mode
444*53ee8cc1Swenshuai.xi SRAM_Address = SRAM_BASE + u16AddressOffset + 0x0E;//BACKEND_DMD_IQ_SWAP
445*53ee8cc1Swenshuai.xi u8TmpData = pRes->sDMD_ATSC_InitData.bIQSwap;
446*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(SRAM_Address, u8TmpData);
447*53ee8cc1Swenshuai.xi
448*53ee8cc1Swenshuai.xi bRet&=_I2C_Channel_Change(3);
449*53ee8cc1Swenshuai.xi
450*53ee8cc1Swenshuai.xi //Set I&Q pad
451*53ee8cc1Swenshuai.xi if (pRes->sDMD_ATSC_InitData.bIsQPad)
452*53ee8cc1Swenshuai.xi {
453*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0A33, 0x2E);
454*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0A2E, 0x01);
455*53ee8cc1Swenshuai.xi
456*53ee8cc1Swenshuai.xi HAL_EXTERN_ATSC_DBINFO(printf("select Q pad source\n"));
457*53ee8cc1Swenshuai.xi }
458*53ee8cc1Swenshuai.xi else
459*53ee8cc1Swenshuai.xi {
460*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0A33, 0x1E);
461*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0A2E, 0x00);
462*53ee8cc1Swenshuai.xi
463*53ee8cc1Swenshuai.xi HAL_EXTERN_ATSC_DBINFO(printf("select I pad source\n"));
464*53ee8cc1Swenshuai.xi }
465*53ee8cc1Swenshuai.xi
466*53ee8cc1Swenshuai.xi if (pRes->sDMD_ATSC_InitData.bIsUseSspiLoadCode == TRUE)
467*53ee8cc1Swenshuai.xi {
468*53ee8cc1Swenshuai.xi #if DMD_ATSC_UTOPIA_EN || DMD_ATSC_UTOPIA2_EN
469*53ee8cc1Swenshuai.xi if (pRes->sDMD_ATSC_InitData.bIsSspiUseTsPin == TRUE)
470*53ee8cc1Swenshuai.xi {
471*53ee8cc1Swenshuai.xi printf("##### MSPI USE TS PIN : DISABLE #####\n");
472*53ee8cc1Swenshuai.xi bRet = _I2C_READ_BYTE(0x0976, &u8TmpData);
473*53ee8cc1Swenshuai.xi u8TmpData = u8OrgSPISetting;
474*53ee8cc1Swenshuai.xi bRet = _I2C_WRITE_BYTE(0x0976, u8TmpData);
475*53ee8cc1Swenshuai.xi }
476*53ee8cc1Swenshuai.xi #endif
477*53ee8cc1Swenshuai.xi }
478*53ee8cc1Swenshuai.xi
479*53ee8cc1Swenshuai.xi // Disable SRAM XDATA mapping
480*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x10E6, 0x00);
481*53ee8cc1Swenshuai.xi
482*53ee8cc1Swenshuai.xi // Set program SRAM start address
483*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x1004, 0x00);
484*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x1005, 0x00);
485*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x1000, 0x00);
486*53ee8cc1Swenshuai.xi
487*53ee8cc1Swenshuai.xi // Set program SRAM end address
488*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x1006, 0x7F);
489*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x1007, 0xFF);
490*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x1002, 0x00);
491*53ee8cc1Swenshuai.xi
492*53ee8cc1Swenshuai.xi // Boot from SRAM
493*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(0x1018, 0x01);
494*53ee8cc1Swenshuai.xi
495*53ee8cc1Swenshuai.xi // Disable MCU Reset
496*53ee8cc1Swenshuai.xi bRet&=_I2C_WRITE_BYTE(REG_MCU_RST, 0x00);
497*53ee8cc1Swenshuai.xi
498*53ee8cc1Swenshuai.xi pRes->sDMD_ATSC_PriData.bDownloaded = true;
499*53ee8cc1Swenshuai.xi
500*53ee8cc1Swenshuai.xi #if DMD_ATSC_UTOPIA_EN || DMD_ATSC_UTOPIA2_EN
501*53ee8cc1Swenshuai.xi MsOS_DelayTask(20);
502*53ee8cc1Swenshuai.xi #else
503*53ee8cc1Swenshuai.xi pRes->sDMD_ATSC_InitData.DelayMS(20);
504*53ee8cc1Swenshuai.xi #endif
505*53ee8cc1Swenshuai.xi
506*53ee8cc1Swenshuai.xi return TRUE;
507*53ee8cc1Swenshuai.xi }
508*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_FWVERSION(void)509*53ee8cc1Swenshuai.xi static void _HAL_EXTERN_ATSC_FWVERSION(void)
510*53ee8cc1Swenshuai.xi {
511*53ee8cc1Swenshuai.xi MS_U8 data1,data2,data3;
512*53ee8cc1Swenshuai.xi
513*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0995, &data1);//REG_BASE[DMDTOP_WR_DBG_04]
514*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0B54, &data2);//REG_BASE[DMDTOP_WR_DBG_15]
515*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0B55, &data3);//REG_BASE[DMDTOP_WR_DBG_16]
516*53ee8cc1Swenshuai.xi
517*53ee8cc1Swenshuai.xi HAL_EXTERN_ATSC_DBINFO(printf("EXTERN_ATSC_FW_VERSION:%x.%x.%x\n", data1, data2, data3));
518*53ee8cc1Swenshuai.xi }
519*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_Exit(void)520*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_Exit(void)
521*53ee8cc1Swenshuai.xi {
522*53ee8cc1Swenshuai.xi MS_BOOL bRet = TRUE;
523*53ee8cc1Swenshuai.xi MS_U8 u8Data = 0xFF;
524*53ee8cc1Swenshuai.xi
525*53ee8cc1Swenshuai.xi //Reset FSM
526*53ee8cc1Swenshuai.xi if (_I2C_WRITE_BYTE(0x0990, 0x00)==FALSE) return FALSE;
527*53ee8cc1Swenshuai.xi
528*53ee8cc1Swenshuai.xi while (!u8Data)
529*53ee8cc1Swenshuai.xi {
530*53ee8cc1Swenshuai.xi if (_I2C_READ_BYTE(0x0992, &u8Data)==FALSE) return FALSE;
531*53ee8cc1Swenshuai.xi }
532*53ee8cc1Swenshuai.xi
533*53ee8cc1Swenshuai.xi // Disable TS pad
534*53ee8cc1Swenshuai.xi bRet = _I2C_READ_BYTE(0x095A, &u8Data);
535*53ee8cc1Swenshuai.xi u8Data = 0x00;
536*53ee8cc1Swenshuai.xi bRet = _I2C_WRITE_BYTE(0x095A, u8Data);
537*53ee8cc1Swenshuai.xi
538*53ee8cc1Swenshuai.xi // [0][4] ifagc/rfagc disable
539*53ee8cc1Swenshuai.xi bRet = _I2C_READ_BYTE(0x0a30, &u8Data);
540*53ee8cc1Swenshuai.xi u8Data &= ~0x11;
541*53ee8cc1Swenshuai.xi bRet = _I2C_WRITE_BYTE(0x0a30, u8Data);
542*53ee8cc1Swenshuai.xi
543*53ee8cc1Swenshuai.xi return bRet;
544*53ee8cc1Swenshuai.xi }
545*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_SoftReset(void)546*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_SoftReset(void)
547*53ee8cc1Swenshuai.xi {
548*53ee8cc1Swenshuai.xi MS_U8 u8Data = 0xFF;
549*53ee8cc1Swenshuai.xi
550*53ee8cc1Swenshuai.xi //Reset FSM
551*53ee8cc1Swenshuai.xi if (_I2C_WRITE_BYTE(0x0990, 0x00)==FALSE) return FALSE;
552*53ee8cc1Swenshuai.xi
553*53ee8cc1Swenshuai.xi while (u8Data != 0x0)
554*53ee8cc1Swenshuai.xi {
555*53ee8cc1Swenshuai.xi if (_I2C_READ_BYTE(0x0992, &u8Data)==FALSE) return FALSE;
556*53ee8cc1Swenshuai.xi }
557*53ee8cc1Swenshuai.xi
558*53ee8cc1Swenshuai.xi //Execute demod top reset
559*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0B20, &u8Data);
560*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0B20, (u8Data|0x01));
561*53ee8cc1Swenshuai.xi return _I2C_WRITE_BYTE(0x0B20, (u8Data&(~0x01)));
562*53ee8cc1Swenshuai.xi }
563*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_SetVsbMode(void)564*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_SetVsbMode(void)
565*53ee8cc1Swenshuai.xi {
566*53ee8cc1Swenshuai.xi return _I2C_WRITE_BYTE(0x0990, 0x08);
567*53ee8cc1Swenshuai.xi }
568*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_Set64QamMode(void)569*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_Set64QamMode(void)
570*53ee8cc1Swenshuai.xi {
571*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0C1B, 0x00); // Clear QAM&SR force mode
572*53ee8cc1Swenshuai.xi
573*53ee8cc1Swenshuai.xi if (_I2C_WRITE_BYTE(0x0994, 0x00)==FALSE) return FALSE;
574*53ee8cc1Swenshuai.xi return _I2C_WRITE_BYTE(0x0990, 0x04);
575*53ee8cc1Swenshuai.xi }
576*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_Set256QamMode(void)577*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_Set256QamMode(void)
578*53ee8cc1Swenshuai.xi {
579*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0C1B, 0x00); // Clear QAM&SR force mode
580*53ee8cc1Swenshuai.xi
581*53ee8cc1Swenshuai.xi if (_I2C_WRITE_BYTE(0x0994, 0x01)==FALSE) return FALSE;
582*53ee8cc1Swenshuai.xi return _I2C_WRITE_BYTE(0x0990, 0x04);
583*53ee8cc1Swenshuai.xi }
584*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_SetModeClean(void)585*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_SetModeClean(void)
586*53ee8cc1Swenshuai.xi {
587*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0C1B, 0x00); // Clear QAM&SR force mode
588*53ee8cc1Swenshuai.xi
589*53ee8cc1Swenshuai.xi return _I2C_WRITE_BYTE(0x0990, 0x00);
590*53ee8cc1Swenshuai.xi }
591*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_Set_QAM_SR(void)592*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_Set_QAM_SR(void)
593*53ee8cc1Swenshuai.xi {
594*53ee8cc1Swenshuai.xi DMD_ATSC_ResData *pRes = psDMD_ATSC_ResData + u8DMD_ATSC_DMD_ID;
595*53ee8cc1Swenshuai.xi
596*53ee8cc1Swenshuai.xi MS_U8 data1,data2,data3;
597*53ee8cc1Swenshuai.xi
598*53ee8cc1Swenshuai.xi data1 = (pRes->sDMD_ATSC_PriData.eLastType-1) | 0x80;
599*53ee8cc1Swenshuai.xi data2 = pRes->sDMD_ATSC_PriData.u16SymRate & 0xFF;
600*53ee8cc1Swenshuai.xi data3 = (pRes->sDMD_ATSC_PriData.u16SymRate>>8) & 0xFF;
601*53ee8cc1Swenshuai.xi
602*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0C1B, data1);
603*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0C1C, data2);
604*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0C1D, data3);
605*53ee8cc1Swenshuai.xi
606*53ee8cc1Swenshuai.xi printf("QAM type 0x%x SR %d\n",pRes->sDMD_ATSC_PriData.eLastType-1,pRes->sDMD_ATSC_PriData.u16SymRate);
607*53ee8cc1Swenshuai.xi
608*53ee8cc1Swenshuai.xi return _I2C_WRITE_BYTE(0x0990, 0x04);
609*53ee8cc1Swenshuai.xi }
610*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_Check8VSB64_256QAM(void)611*53ee8cc1Swenshuai.xi static DMD_ATSC_DEMOD_TYPE _HAL_EXTERN_ATSC_Check8VSB64_256QAM(void)
612*53ee8cc1Swenshuai.xi {
613*53ee8cc1Swenshuai.xi MS_U8 mode=0;
614*53ee8cc1Swenshuai.xi
615*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x2900, &mode); //mode check
616*53ee8cc1Swenshuai.xi
617*53ee8cc1Swenshuai.xi if ((mode&VSB_ATSC) == VSB_ATSC) return DMD_ATSC_DEMOD_ATSC_VSB;
618*53ee8cc1Swenshuai.xi else if ((mode & QAM256_ATSC) == QAM256_ATSC) return DMD_ATSC_DEMOD_ATSC_256QAM;
619*53ee8cc1Swenshuai.xi else return DMD_ATSC_DEMOD_ATSC_64QAM;
620*53ee8cc1Swenshuai.xi }
621*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_Vsb_QAM_AGCLock(void)622*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_Vsb_QAM_AGCLock(void)
623*53ee8cc1Swenshuai.xi {
624*53ee8cc1Swenshuai.xi MS_U8 data1 = 0;
625*53ee8cc1Swenshuai.xi
626*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x3E1D, &data1);//AGC_LOCK
627*53ee8cc1Swenshuai.xi
628*53ee8cc1Swenshuai.xi if (data1&0x01)
629*53ee8cc1Swenshuai.xi {
630*53ee8cc1Swenshuai.xi return TRUE;
631*53ee8cc1Swenshuai.xi }
632*53ee8cc1Swenshuai.xi else
633*53ee8cc1Swenshuai.xi {
634*53ee8cc1Swenshuai.xi return FALSE;
635*53ee8cc1Swenshuai.xi }
636*53ee8cc1Swenshuai.xi }
637*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_Vsb_PreLock(void)638*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_Vsb_PreLock(void)
639*53ee8cc1Swenshuai.xi {
640*53ee8cc1Swenshuai.xi MS_U8 data1 = 0;
641*53ee8cc1Swenshuai.xi
642*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0993, &data1);
643*53ee8cc1Swenshuai.xi
644*53ee8cc1Swenshuai.xi if ((data1&0x02) == 0x02)
645*53ee8cc1Swenshuai.xi {
646*53ee8cc1Swenshuai.xi return TRUE;
647*53ee8cc1Swenshuai.xi }
648*53ee8cc1Swenshuai.xi else
649*53ee8cc1Swenshuai.xi {
650*53ee8cc1Swenshuai.xi return FALSE;
651*53ee8cc1Swenshuai.xi }
652*53ee8cc1Swenshuai.xi }
653*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_Vsb_FSync_Lock(void)654*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_Vsb_FSync_Lock(void)
655*53ee8cc1Swenshuai.xi {
656*53ee8cc1Swenshuai.xi MS_U8 data1 = 0;
657*53ee8cc1Swenshuai.xi
658*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x2824, &data1);
659*53ee8cc1Swenshuai.xi
660*53ee8cc1Swenshuai.xi if ((data1&0x10) == 0x10)
661*53ee8cc1Swenshuai.xi {
662*53ee8cc1Swenshuai.xi return TRUE;
663*53ee8cc1Swenshuai.xi }
664*53ee8cc1Swenshuai.xi else
665*53ee8cc1Swenshuai.xi {
666*53ee8cc1Swenshuai.xi return FALSE;
667*53ee8cc1Swenshuai.xi }
668*53ee8cc1Swenshuai.xi }
669*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_Vsb_CE_Lock(void)670*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_Vsb_CE_Lock(void)
671*53ee8cc1Swenshuai.xi {
672*53ee8cc1Swenshuai.xi MS_U8 data1 = 0;
673*53ee8cc1Swenshuai.xi
674*53ee8cc1Swenshuai.xi if((data1&0x10) == 0)
675*53ee8cc1Swenshuai.xi {
676*53ee8cc1Swenshuai.xi return TRUE;
677*53ee8cc1Swenshuai.xi }
678*53ee8cc1Swenshuai.xi else
679*53ee8cc1Swenshuai.xi {
680*53ee8cc1Swenshuai.xi return FALSE;
681*53ee8cc1Swenshuai.xi }
682*53ee8cc1Swenshuai.xi }
683*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_Vsb_FEC_Lock(void)684*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_Vsb_FEC_Lock(void)
685*53ee8cc1Swenshuai.xi {
686*53ee8cc1Swenshuai.xi MS_U8 data1 = 0, data2 = 0, data3 = 0, data4 = 0, data5 = 0;
687*53ee8cc1Swenshuai.xi MS_U8 data6 = 0, data7 = 0;
688*53ee8cc1Swenshuai.xi
689*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0992, &data1);
690*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x1917, &data2);//AD_NOISE_PWR_TRAIN1
691*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0993, &data3);
692*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x2601, &data4);//FEC_EN_CTL
693*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x2767, &data5);//EQEXT_REG_BASE//addy
694*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0D01, &data6);
695*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0D40, &data7);
696*53ee8cc1Swenshuai.xi
697*53ee8cc1Swenshuai.xi if (data1==EXTERN_ATSC_OUTER_STATE && (data2<=EXTERN_ATSC_VSB_TRAIN_SNR_LIMIT || data5 <= EXTERN_ATSC_VSB_TRAIN_SNR_LIMIT) &&
698*53ee8cc1Swenshuai.xi (data3&0x02)==0x02 && (data4&EXTERN_ATSC_FEC_ENABLE)==EXTERN_ATSC_FEC_ENABLE && ((data6&0x10) == 0x10) && ((data7&0x01) == 0x01))
699*53ee8cc1Swenshuai.xi {
700*53ee8cc1Swenshuai.xi return TRUE;
701*53ee8cc1Swenshuai.xi }
702*53ee8cc1Swenshuai.xi else
703*53ee8cc1Swenshuai.xi {
704*53ee8cc1Swenshuai.xi return FALSE;
705*53ee8cc1Swenshuai.xi }
706*53ee8cc1Swenshuai.xi }
707*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_QAM_PreLock(void)708*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_QAM_PreLock(void)
709*53ee8cc1Swenshuai.xi {
710*53ee8cc1Swenshuai.xi MS_U8 data1=0;
711*53ee8cc1Swenshuai.xi
712*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x1415, &data1);//TR_LOCK
713*53ee8cc1Swenshuai.xi
714*53ee8cc1Swenshuai.xi if((data1&0x10) == 0x10)
715*53ee8cc1Swenshuai.xi {
716*53ee8cc1Swenshuai.xi HAL_EXTERN_ATSC_DBINFO(printf(" QAM preLock OK \n"));
717*53ee8cc1Swenshuai.xi return TRUE;
718*53ee8cc1Swenshuai.xi }
719*53ee8cc1Swenshuai.xi else
720*53ee8cc1Swenshuai.xi {
721*53ee8cc1Swenshuai.xi HAL_EXTERN_ATSC_DBINFO(printf(" QAM preLock NOT OK \n"));
722*53ee8cc1Swenshuai.xi return FALSE;
723*53ee8cc1Swenshuai.xi }
724*53ee8cc1Swenshuai.xi }
725*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_QAM_Main_Lock(void)726*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_QAM_Main_Lock(void)
727*53ee8cc1Swenshuai.xi {
728*53ee8cc1Swenshuai.xi MS_U8 data1 = 0, data4 = 0, data5 = 0, data6 = 0;
729*53ee8cc1Swenshuai.xi MS_U8 data2 = 0, data3 = 0;
730*53ee8cc1Swenshuai.xi
731*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0992, &data1);
732*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x2601, &data4);//FEC_EN_CTL
733*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0D01, &data5);
734*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0D40, &data6);
735*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x1415, &data3);//TR_LOCK
736*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x2618, &data2);//boundary detected
737*53ee8cc1Swenshuai.xi
738*53ee8cc1Swenshuai.xi if (data1==EXTERN_ATSC_OUTER_STATE && (data2&0x01)==0x01 &&
739*53ee8cc1Swenshuai.xi data4==EXTERN_ATSC_FEC_ENABLE && (data3&0x10)==0x10 &&
740*53ee8cc1Swenshuai.xi ((data5&0x10) == 0x10) && ((data6&0x01) == 0x01))
741*53ee8cc1Swenshuai.xi {
742*53ee8cc1Swenshuai.xi return TRUE;
743*53ee8cc1Swenshuai.xi }
744*53ee8cc1Swenshuai.xi else
745*53ee8cc1Swenshuai.xi {
746*53ee8cc1Swenshuai.xi return FALSE;
747*53ee8cc1Swenshuai.xi }
748*53ee8cc1Swenshuai.xi }
749*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_ReadIFAGC(void)750*53ee8cc1Swenshuai.xi static MS_U8 _HAL_EXTERN_ATSC_ReadIFAGC(void)
751*53ee8cc1Swenshuai.xi {
752*53ee8cc1Swenshuai.xi MS_U8 data = 0;
753*53ee8cc1Swenshuai.xi
754*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x13FD, &data);
755*53ee8cc1Swenshuai.xi
756*53ee8cc1Swenshuai.xi return data;
757*53ee8cc1Swenshuai.xi }
758*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_CheckSignalCondition(DMD_ATSC_SIGNAL_CONDITION * pstatus)759*53ee8cc1Swenshuai.xi static void _HAL_EXTERN_ATSC_CheckSignalCondition(DMD_ATSC_SIGNAL_CONDITION* pstatus)
760*53ee8cc1Swenshuai.xi {
761*53ee8cc1Swenshuai.xi DMD_ATSC_DEMOD_TYPE eMode;
762*53ee8cc1Swenshuai.xi MS_U8 u8NoisePowerH=0;
763*53ee8cc1Swenshuai.xi static MS_U8 u8NoisePowerH_Last = 0xff;
764*53ee8cc1Swenshuai.xi
765*53ee8cc1Swenshuai.xi eMode = _HAL_EXTERN_ATSC_Check8VSB64_256QAM();
766*53ee8cc1Swenshuai.xi
767*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x1915, &u8NoisePowerH);
768*53ee8cc1Swenshuai.xi
769*53ee8cc1Swenshuai.xi if (eMode == DMD_ATSC_DEMOD_ATSC_VSB) //VSB mode//SNR=10*log10((1344<<10)/noisepower)
770*53ee8cc1Swenshuai.xi {
771*53ee8cc1Swenshuai.xi if (!_HAL_EXTERN_ATSC_Vsb_FEC_Lock()) u8NoisePowerH=0xFF;
772*53ee8cc1Swenshuai.xi else if (abs(u8NoisePowerH_Last-u8NoisePowerH) > 5)
773*53ee8cc1Swenshuai.xi u8NoisePowerH_Last = u8NoisePowerH;
774*53ee8cc1Swenshuai.xi else u8NoisePowerH = u8NoisePowerH_Last;
775*53ee8cc1Swenshuai.xi
776*53ee8cc1Swenshuai.xi if (u8NoisePowerH > 0xBE) //SNR<14.5
777*53ee8cc1Swenshuai.xi *pstatus=DMD_ATSC_SIGNAL_NO;
778*53ee8cc1Swenshuai.xi else if (u8NoisePowerH > 0x4D) //SNR<18.4
779*53ee8cc1Swenshuai.xi *pstatus=DMD_ATSC_SIGNAL_WEAK;
780*53ee8cc1Swenshuai.xi else if (u8NoisePowerH > 0x23) //SNR<21.8
781*53ee8cc1Swenshuai.xi *pstatus=DMD_ATSC_SIGNAL_MODERATE;
782*53ee8cc1Swenshuai.xi else if (u8NoisePowerH > 0x0A) //SNR<26.9
783*53ee8cc1Swenshuai.xi *pstatus=DMD_ATSC_SIGNAL_STRONG;
784*53ee8cc1Swenshuai.xi else
785*53ee8cc1Swenshuai.xi *pstatus=DMD_ATSC_SIGNAL_VERY_STRONG;
786*53ee8cc1Swenshuai.xi }
787*53ee8cc1Swenshuai.xi else //QAM MODE
788*53ee8cc1Swenshuai.xi {
789*53ee8cc1Swenshuai.xi if (!_HAL_EXTERN_ATSC_QAM_Main_Lock()) u8NoisePowerH=0xFF;
790*53ee8cc1Swenshuai.xi else if (abs(u8NoisePowerH_Last-u8NoisePowerH) > 5)
791*53ee8cc1Swenshuai.xi u8NoisePowerH_Last = u8NoisePowerH;
792*53ee8cc1Swenshuai.xi else u8NoisePowerH = u8NoisePowerH_Last;
793*53ee8cc1Swenshuai.xi
794*53ee8cc1Swenshuai.xi if (eMode == DMD_ATSC_DEMOD_ATSC_256QAM) //256QAM//SNR=10*log10((2720<<10)/noisepower)
795*53ee8cc1Swenshuai.xi {
796*53ee8cc1Swenshuai.xi if (u8NoisePowerH > 0x13) //SNR<27.5
797*53ee8cc1Swenshuai.xi *pstatus=DMD_ATSC_SIGNAL_NO;
798*53ee8cc1Swenshuai.xi else if (u8NoisePowerH > 0x08) //SNR<31.2
799*53ee8cc1Swenshuai.xi *pstatus=DMD_ATSC_SIGNAL_WEAK;
800*53ee8cc1Swenshuai.xi else if (u8NoisePowerH > 0x06) //SNR<32.4
801*53ee8cc1Swenshuai.xi *pstatus=DMD_ATSC_SIGNAL_MODERATE;
802*53ee8cc1Swenshuai.xi else if (u8NoisePowerH > 0x04) //SNR<34.2
803*53ee8cc1Swenshuai.xi *pstatus=DMD_ATSC_SIGNAL_STRONG;
804*53ee8cc1Swenshuai.xi else
805*53ee8cc1Swenshuai.xi *pstatus=DMD_ATSC_SIGNAL_VERY_STRONG;
806*53ee8cc1Swenshuai.xi }
807*53ee8cc1Swenshuai.xi else //64QAM//SNR=10*log10((2688<<10)/noisepower)
808*53ee8cc1Swenshuai.xi {
809*53ee8cc1Swenshuai.xi if (u8NoisePowerH > 0x4C) //SNR<21.5
810*53ee8cc1Swenshuai.xi *pstatus=DMD_ATSC_SIGNAL_NO;
811*53ee8cc1Swenshuai.xi else if (u8NoisePowerH > 0x1F) //SNR<25.4
812*53ee8cc1Swenshuai.xi *pstatus=DMD_ATSC_SIGNAL_WEAK;
813*53ee8cc1Swenshuai.xi else if (u8NoisePowerH > 0x11) //SNR<27.8
814*53ee8cc1Swenshuai.xi *pstatus=DMD_ATSC_SIGNAL_MODERATE;
815*53ee8cc1Swenshuai.xi else if (u8NoisePowerH > 0x07) //SNR<31.4
816*53ee8cc1Swenshuai.xi *pstatus=DMD_ATSC_SIGNAL_STRONG;
817*53ee8cc1Swenshuai.xi else
818*53ee8cc1Swenshuai.xi *pstatus=DMD_ATSC_SIGNAL_VERY_STRONG;
819*53ee8cc1Swenshuai.xi }
820*53ee8cc1Swenshuai.xi }
821*53ee8cc1Swenshuai.xi }
822*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_ReadSNRPercentage(void)823*53ee8cc1Swenshuai.xi static MS_U8 _HAL_EXTERN_ATSC_ReadSNRPercentage(void)
824*53ee8cc1Swenshuai.xi {
825*53ee8cc1Swenshuai.xi DMD_ATSC_DEMOD_TYPE eMode;
826*53ee8cc1Swenshuai.xi MS_U8 u8NoisePowerH = 0, u8NoisePowerL = 0;
827*53ee8cc1Swenshuai.xi MS_U16 u16NoisePower;
828*53ee8cc1Swenshuai.xi
829*53ee8cc1Swenshuai.xi eMode = _HAL_EXTERN_ATSC_Check8VSB64_256QAM();
830*53ee8cc1Swenshuai.xi
831*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x1914, &u8NoisePowerL);
832*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x1915, &u8NoisePowerH);
833*53ee8cc1Swenshuai.xi
834*53ee8cc1Swenshuai.xi u16NoisePower = (u8NoisePowerH<<8) | u8NoisePowerL;
835*53ee8cc1Swenshuai.xi
836*53ee8cc1Swenshuai.xi if(eMode == DMD_ATSC_DEMOD_ATSC_VSB) //VSB mode//SNR=10*log10((1344<<10)/noisepower)
837*53ee8cc1Swenshuai.xi {
838*53ee8cc1Swenshuai.xi if (!_HAL_EXTERN_ATSC_Vsb_FEC_Lock())
839*53ee8cc1Swenshuai.xi return 0;//SNR=0;
840*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x008A)//SNR>=40dB
841*53ee8cc1Swenshuai.xi return 100;//SNR=MAX_SNR;
842*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0097)//SNR>=39.6dB
843*53ee8cc1Swenshuai.xi return 99;//
844*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x00A5)//SNR>=39.2dB
845*53ee8cc1Swenshuai.xi return 98;//
846*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x00B5)//SNR>=38.8dB
847*53ee8cc1Swenshuai.xi return 97;//
848*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x00C7)//SNR>=38.4dB
849*53ee8cc1Swenshuai.xi return 96;//
850*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x00DA)//SNR>=38.0dB
851*53ee8cc1Swenshuai.xi return 95;//
852*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x00EF)//SNR>=37.6dB
853*53ee8cc1Swenshuai.xi return 94;//
854*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0106)//SNR>=37.2dB
855*53ee8cc1Swenshuai.xi return 93;//
856*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0120)//SNR>=36.8dB
857*53ee8cc1Swenshuai.xi return 92;//
858*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x013B)//SNR>=36.4dB
859*53ee8cc1Swenshuai.xi return 91;//
860*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x015A)//SNR>=36.0dB
861*53ee8cc1Swenshuai.xi return 90;//
862*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x017B)//SNR>=35.6dB
863*53ee8cc1Swenshuai.xi return 89;//
864*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x01A0)//SNR>=35.2dB
865*53ee8cc1Swenshuai.xi return 88;//
866*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x01C8)//SNR>=34.8dB
867*53ee8cc1Swenshuai.xi return 87;//
868*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x01F4)//SNR>=34.4dB
869*53ee8cc1Swenshuai.xi return 86;//
870*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0224)//SNR>=34.0dB
871*53ee8cc1Swenshuai.xi return 85;//
872*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0259)//SNR>=33.6dB
873*53ee8cc1Swenshuai.xi return 84;//
874*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0293)//SNR>=33.2dB
875*53ee8cc1Swenshuai.xi return 83;//
876*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x02D2)//SNR>=32.8dB
877*53ee8cc1Swenshuai.xi return 82;//
878*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0318)//SNR>=32.4dB
879*53ee8cc1Swenshuai.xi return 81;//
880*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0364)//SNR>=32.0dB
881*53ee8cc1Swenshuai.xi return 80;//
882*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x03B8)//SNR>=31.6dB
883*53ee8cc1Swenshuai.xi return 79;//
884*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0414)//SNR>=31.2dB
885*53ee8cc1Swenshuai.xi return 78;//
886*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0479)//SNR>=30.8dB
887*53ee8cc1Swenshuai.xi return 77;//
888*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x04E7)//SNR>=30.4dB
889*53ee8cc1Swenshuai.xi return 76;//
890*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0560)//SNR>=30.0dB
891*53ee8cc1Swenshuai.xi return 75;//
892*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x05E5)//SNR>=29.6dB
893*53ee8cc1Swenshuai.xi return 74;//
894*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0677)//SNR>=29.2dB
895*53ee8cc1Swenshuai.xi return 73;//
896*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0716)//SNR>=28.8dB
897*53ee8cc1Swenshuai.xi return 72;//
898*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x07C5)//SNR>=28.4dB
899*53ee8cc1Swenshuai.xi return 71;//
900*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0885)//SNR>=28.0dB
901*53ee8cc1Swenshuai.xi return 70;//
902*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0958)//SNR>=27.6dB
903*53ee8cc1Swenshuai.xi return 69;//
904*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0A3E)//SNR>=27.2dB
905*53ee8cc1Swenshuai.xi return 68;//
906*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0B3B)//SNR>=26.8dB
907*53ee8cc1Swenshuai.xi return 67;//
908*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0C51)//SNR>=26.4dB
909*53ee8cc1Swenshuai.xi return 66;//
910*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0D81)//SNR>=26.0dB
911*53ee8cc1Swenshuai.xi return 65;//
912*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0ECF)//SNR>=25.6dB
913*53ee8cc1Swenshuai.xi return 64;//
914*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x103C)//SNR>=25.2dB
915*53ee8cc1Swenshuai.xi return 63;//
916*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x11CD)//SNR>=24.8dB
917*53ee8cc1Swenshuai.xi return 62;//
918*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x1385)//SNR>=24.4dB
919*53ee8cc1Swenshuai.xi return 61;//
920*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x1567)//SNR>=24.0dB
921*53ee8cc1Swenshuai.xi return 60;//
922*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x1778)//SNR>=23.6dB
923*53ee8cc1Swenshuai.xi return 59;//
924*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x19BB)//SNR>=23.2dB
925*53ee8cc1Swenshuai.xi return 58;//
926*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x1C37)//SNR>=22.8dB
927*53ee8cc1Swenshuai.xi return 57;//
928*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x1EF0)//SNR>=22.4dB
929*53ee8cc1Swenshuai.xi return 56;//
930*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x21EC)//SNR>=22.0dB
931*53ee8cc1Swenshuai.xi return 55;//
932*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x2531)//SNR>=21.6dB
933*53ee8cc1Swenshuai.xi return 54;//
934*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x28C8)//SNR>=21.2dB
935*53ee8cc1Swenshuai.xi return 53;//
936*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x2CB7)//SNR>=20.8dB
937*53ee8cc1Swenshuai.xi return 52;//
938*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x3108)//SNR>=20.4dB
939*53ee8cc1Swenshuai.xi return 51;//
940*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x35C3)//SNR>=20.0dB
941*53ee8cc1Swenshuai.xi return 50;//
942*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x3AF2)//SNR>=19.6dB
943*53ee8cc1Swenshuai.xi return 49;//
944*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x40A2)//SNR>=19.2dB
945*53ee8cc1Swenshuai.xi return 48;//
946*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x46DF)//SNR>=18.8dB
947*53ee8cc1Swenshuai.xi return 47;//
948*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x4DB5)//SNR>=18.4dB
949*53ee8cc1Swenshuai.xi return 46;//
950*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x5534)//SNR>=18.0dB
951*53ee8cc1Swenshuai.xi return 45;//
952*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x5D6D)//SNR>=17.6dB
953*53ee8cc1Swenshuai.xi return 44;//
954*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x6670)//SNR>=17.2dB
955*53ee8cc1Swenshuai.xi return 43;//
956*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x7052)//SNR>=16.8dB
957*53ee8cc1Swenshuai.xi return 42;//
958*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x7B28)//SNR>=16.4dB
959*53ee8cc1Swenshuai.xi return 41;//
960*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x870A)//SNR>=16.0dB
961*53ee8cc1Swenshuai.xi return 40;//
962*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x9411)//SNR>=15.6dB
963*53ee8cc1Swenshuai.xi return 39;//
964*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0xA25A)//SNR>=15.2dB
965*53ee8cc1Swenshuai.xi return 38;//
966*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0xB204)//SNR>=14.8dB
967*53ee8cc1Swenshuai.xi return 37;//
968*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0xC331)//SNR>=14.4dB
969*53ee8cc1Swenshuai.xi return 36;//
970*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0xD606)//SNR>=14.0dB
971*53ee8cc1Swenshuai.xi return 35;//
972*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0xEAAC)//SNR>=13.6dB
973*53ee8cc1Swenshuai.xi return 34;//
974*53ee8cc1Swenshuai.xi else// if (u16NoisePower>=0xEAAC)//SNR<13.6dB
975*53ee8cc1Swenshuai.xi return 33;//
976*53ee8cc1Swenshuai.xi }
977*53ee8cc1Swenshuai.xi else //QAM MODE
978*53ee8cc1Swenshuai.xi {
979*53ee8cc1Swenshuai.xi if(eMode == DMD_ATSC_DEMOD_ATSC_256QAM) //256QAM//SNR=10*log10((2720<<10)/noisepower)
980*53ee8cc1Swenshuai.xi {
981*53ee8cc1Swenshuai.xi if (!_HAL_EXTERN_ATSC_QAM_Main_Lock())
982*53ee8cc1Swenshuai.xi return 0;//SNR=0;
983*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0117)//SNR>=40dB
984*53ee8cc1Swenshuai.xi return 100;//
985*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0131)//SNR>=39.6dB
986*53ee8cc1Swenshuai.xi return 99;//
987*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x014F)//SNR>=39.2dB
988*53ee8cc1Swenshuai.xi return 98;//
989*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x016F)//SNR>=38.8dB
990*53ee8cc1Swenshuai.xi return 97;//
991*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0193)//SNR>=38.4dB
992*53ee8cc1Swenshuai.xi return 96;//
993*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x01B9)//SNR>=38.0dB
994*53ee8cc1Swenshuai.xi return 95;//
995*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x01E4)//SNR>=37.6dB
996*53ee8cc1Swenshuai.xi return 94;//
997*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0213)//SNR>=37.2dB
998*53ee8cc1Swenshuai.xi return 93;//
999*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0246)//SNR>=36.8dB
1000*53ee8cc1Swenshuai.xi return 92;//
1001*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x027E)//SNR>=36.4dB
1002*53ee8cc1Swenshuai.xi return 91;//
1003*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x02BC)//SNR>=36.0dB
1004*53ee8cc1Swenshuai.xi return 90;//
1005*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x02FF)//SNR>=35.6dB
1006*53ee8cc1Swenshuai.xi return 89;//
1007*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0349)//SNR>=35.2dB
1008*53ee8cc1Swenshuai.xi return 88;//
1009*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x039A)//SNR>=34.8dB
1010*53ee8cc1Swenshuai.xi return 87;//
1011*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x03F3)//SNR>=34.4dB
1012*53ee8cc1Swenshuai.xi return 86;//
1013*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0455)//SNR>=34.0dB
1014*53ee8cc1Swenshuai.xi return 85;//
1015*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x04C0)//SNR>=33.6dB
1016*53ee8cc1Swenshuai.xi return 84;//
1017*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0535)//SNR>=33.2dB
1018*53ee8cc1Swenshuai.xi return 83;//
1019*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x05B6)//SNR>=32.8dB
1020*53ee8cc1Swenshuai.xi return 82;//
1021*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0643)//SNR>=32.4dB
1022*53ee8cc1Swenshuai.xi return 81;//
1023*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x06DD)//SNR>=32.0dB
1024*53ee8cc1Swenshuai.xi return 80;//
1025*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0787)//SNR>=31.6dB
1026*53ee8cc1Swenshuai.xi return 79;//
1027*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0841)//SNR>=31.2dB
1028*53ee8cc1Swenshuai.xi return 78;//
1029*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x090D)//SNR>=30.8dB
1030*53ee8cc1Swenshuai.xi return 77;//
1031*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x09EC)//SNR>=30.4dB
1032*53ee8cc1Swenshuai.xi return 76;//
1033*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0AE1)//SNR>=30.0dB
1034*53ee8cc1Swenshuai.xi return 75;//
1035*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0BEE)//SNR>=29.6dB
1036*53ee8cc1Swenshuai.xi return 74;//
1037*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0D15)//SNR>=29.2dB
1038*53ee8cc1Swenshuai.xi return 73;//
1039*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0E58)//SNR>=28.8dB
1040*53ee8cc1Swenshuai.xi return 72;//
1041*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0FBA)//SNR>=28.4dB
1042*53ee8cc1Swenshuai.xi return 71;//
1043*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x113E)//SNR>=28.0dB
1044*53ee8cc1Swenshuai.xi return 70;//
1045*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x12E8)//SNR>=27.6dB
1046*53ee8cc1Swenshuai.xi return 69;//
1047*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x14BB)//SNR>=27.2dB
1048*53ee8cc1Swenshuai.xi return 68;//
1049*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x16BB)//SNR>=26.8dB
1050*53ee8cc1Swenshuai.xi return 67;//
1051*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x18ED)//SNR>=26.4dB
1052*53ee8cc1Swenshuai.xi return 66;//
1053*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x1B54)//SNR>=26.0dB
1054*53ee8cc1Swenshuai.xi return 65;//
1055*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x1DF7)//SNR>=25.6dB
1056*53ee8cc1Swenshuai.xi return 64;//
1057*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x20DB)//SNR>=25.2dB
1058*53ee8cc1Swenshuai.xi return 63;//
1059*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x2407)//SNR>=24.8dB
1060*53ee8cc1Swenshuai.xi return 62;//
1061*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x2781)//SNR>=24.4dB
1062*53ee8cc1Swenshuai.xi return 61;//
1063*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x2B50)//SNR>=24.0dB
1064*53ee8cc1Swenshuai.xi return 60;//
1065*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x2F7E)//SNR>=23.6dB
1066*53ee8cc1Swenshuai.xi return 59;//
1067*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x3413)//SNR>=23.2dB
1068*53ee8cc1Swenshuai.xi return 58;//
1069*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x3919)//SNR>=22.8dB
1070*53ee8cc1Swenshuai.xi return 57;//
1071*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x3E9C)//SNR>=22.4dB
1072*53ee8cc1Swenshuai.xi return 56;//
1073*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x44A6)//SNR>=22.0dB
1074*53ee8cc1Swenshuai.xi return 55;//
1075*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x4B45)//SNR>=21.6dB
1076*53ee8cc1Swenshuai.xi return 54;//
1077*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x5289)//SNR>=21.2dB
1078*53ee8cc1Swenshuai.xi return 53;//
1079*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x5A7F)//SNR>=20.8dB
1080*53ee8cc1Swenshuai.xi return 52;//
1081*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x633A)//SNR>=20.4dB
1082*53ee8cc1Swenshuai.xi return 51;//
1083*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x6CCD)//SNR>=20.0dB
1084*53ee8cc1Swenshuai.xi return 50;//
1085*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x774C)//SNR>=19.6dB
1086*53ee8cc1Swenshuai.xi return 49;//
1087*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x82CE)//SNR>=19.2dB
1088*53ee8cc1Swenshuai.xi return 48;//
1089*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x8F6D)//SNR>=18.8dB
1090*53ee8cc1Swenshuai.xi return 47;//
1091*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x9D44)//SNR>=18.4dB
1092*53ee8cc1Swenshuai.xi return 46;//
1093*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0xAC70)//SNR>=18.0dB
1094*53ee8cc1Swenshuai.xi return 45;//
1095*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0xBD13)//SNR>=17.6dB
1096*53ee8cc1Swenshuai.xi return 44;//
1097*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0xCF50)//SNR>=17.2dB
1098*53ee8cc1Swenshuai.xi return 43;//
1099*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0xE351)//SNR>=16.8dB
1100*53ee8cc1Swenshuai.xi return 42;//
1101*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0xF93F)//SNR>=16.4dB
1102*53ee8cc1Swenshuai.xi return 41;//
1103*53ee8cc1Swenshuai.xi else// if (u16NoisePower>=0xF93F)//SNR<16.4dB
1104*53ee8cc1Swenshuai.xi return 40;//
1105*53ee8cc1Swenshuai.xi }
1106*53ee8cc1Swenshuai.xi else //64QAM//SNR=10*log10((2688<<10)/noisepower)
1107*53ee8cc1Swenshuai.xi {
1108*53ee8cc1Swenshuai.xi if (!_HAL_EXTERN_ATSC_QAM_Main_Lock())
1109*53ee8cc1Swenshuai.xi return 0;//SNR=0;
1110*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0113)//SNR>=40dB
1111*53ee8cc1Swenshuai.xi return 100;//
1112*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x012E)//SNR>=39.6dB
1113*53ee8cc1Swenshuai.xi return 99;//
1114*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x014B)//SNR>=39.2dB
1115*53ee8cc1Swenshuai.xi return 98;//
1116*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x016B)//SNR>=38.8dB
1117*53ee8cc1Swenshuai.xi return 97;//
1118*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x018E)//SNR>=38.4dB
1119*53ee8cc1Swenshuai.xi return 96;//
1120*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x01B4)//SNR>=38.0dB
1121*53ee8cc1Swenshuai.xi return 95;//
1122*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x01DE)//SNR>=37.6dB
1123*53ee8cc1Swenshuai.xi return 94;//
1124*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x020C)//SNR>=37.2dB
1125*53ee8cc1Swenshuai.xi return 93;//
1126*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x023F)//SNR>=36.8dB
1127*53ee8cc1Swenshuai.xi return 92;//
1128*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0277)//SNR>=36.4dB
1129*53ee8cc1Swenshuai.xi return 91;//
1130*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x02B3)//SNR>=36.0dB
1131*53ee8cc1Swenshuai.xi return 90;//
1132*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x02F6)//SNR>=35.6dB
1133*53ee8cc1Swenshuai.xi return 89;//
1134*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x033F)//SNR>=35.2dB
1135*53ee8cc1Swenshuai.xi return 88;//
1136*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x038F)//SNR>=34.8dB
1137*53ee8cc1Swenshuai.xi return 87;//
1138*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x03E7)//SNR>=34.4dB
1139*53ee8cc1Swenshuai.xi return 86;//
1140*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0448)//SNR>=34.0dB
1141*53ee8cc1Swenshuai.xi return 85;//
1142*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x04B2)//SNR>=33.6dB
1143*53ee8cc1Swenshuai.xi return 84;//
1144*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0525)//SNR>=33.2dB
1145*53ee8cc1Swenshuai.xi return 83;//
1146*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x05A5)//SNR>=32.8dB
1147*53ee8cc1Swenshuai.xi return 82;//
1148*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0630)//SNR>=32.4dB
1149*53ee8cc1Swenshuai.xi return 81;//
1150*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x06C9)//SNR>=32.0dB
1151*53ee8cc1Swenshuai.xi return 80;//
1152*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0770)//SNR>=31.6dB
1153*53ee8cc1Swenshuai.xi return 79;//
1154*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0828)//SNR>=31.2dB
1155*53ee8cc1Swenshuai.xi return 78;//
1156*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x08F1)//SNR>=30.8dB
1157*53ee8cc1Swenshuai.xi return 77;//
1158*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x09CE)//SNR>=30.4dB
1159*53ee8cc1Swenshuai.xi return 76;//
1160*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0AC1)//SNR>=30.0dB
1161*53ee8cc1Swenshuai.xi return 75;//
1162*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0BCA)//SNR>=29.6dB
1163*53ee8cc1Swenshuai.xi return 74;//
1164*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0CED)//SNR>=29.2dB
1165*53ee8cc1Swenshuai.xi return 73;//
1166*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0E2D)//SNR>=28.8dB
1167*53ee8cc1Swenshuai.xi return 72;//
1168*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x0F8B)//SNR>=28.4dB
1169*53ee8cc1Swenshuai.xi return 71;//
1170*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x110A)//SNR>=28.0dB
1171*53ee8cc1Swenshuai.xi return 70;//
1172*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x12AF)//SNR>=27.6dB
1173*53ee8cc1Swenshuai.xi return 69;//
1174*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x147D)//SNR>=27.2dB
1175*53ee8cc1Swenshuai.xi return 68;//
1176*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x1677)//SNR>=26.8dB
1177*53ee8cc1Swenshuai.xi return 67;//
1178*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x18A2)//SNR>=26.4dB
1179*53ee8cc1Swenshuai.xi return 66;//
1180*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x1B02)//SNR>=26.0dB
1181*53ee8cc1Swenshuai.xi return 65;//
1182*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x1D9D)//SNR>=25.6dB
1183*53ee8cc1Swenshuai.xi return 64;//
1184*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x2078)//SNR>=25.2dB
1185*53ee8cc1Swenshuai.xi return 63;//
1186*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x239A)//SNR>=24.8dB
1187*53ee8cc1Swenshuai.xi return 62;//
1188*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x270A)//SNR>=24.4dB
1189*53ee8cc1Swenshuai.xi return 61;//
1190*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x2ACE)//SNR>=24.0dB
1191*53ee8cc1Swenshuai.xi return 60;//
1192*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x2EEF)//SNR>=23.6dB
1193*53ee8cc1Swenshuai.xi return 59;//
1194*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x3376)//SNR>=23.2dB
1195*53ee8cc1Swenshuai.xi return 58;//
1196*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x386D)//SNR>=22.8dB
1197*53ee8cc1Swenshuai.xi return 57;//
1198*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x3DDF)//SNR>=22.4dB
1199*53ee8cc1Swenshuai.xi return 56;//
1200*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x43D7)//SNR>=22.0dB
1201*53ee8cc1Swenshuai.xi return 55;//
1202*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x4A63)//SNR>=21.6dB
1203*53ee8cc1Swenshuai.xi return 54;//
1204*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x5190)//SNR>=21.2dB
1205*53ee8cc1Swenshuai.xi return 53;//
1206*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x596E)//SNR>=20.8dB
1207*53ee8cc1Swenshuai.xi return 52;//
1208*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x620F)//SNR>=20.4dB
1209*53ee8cc1Swenshuai.xi return 51;//
1210*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x6B85)//SNR>=20.0dB
1211*53ee8cc1Swenshuai.xi return 50;//
1212*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x75E5)//SNR>=19.6dB
1213*53ee8cc1Swenshuai.xi return 49;//
1214*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x8144)//SNR>=19.2dB
1215*53ee8cc1Swenshuai.xi return 48;//
1216*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x8DBD)//SNR>=18.8dB
1217*53ee8cc1Swenshuai.xi return 47;//
1218*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0x9B6A)//SNR>=18.4dB
1219*53ee8cc1Swenshuai.xi return 46;//
1220*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0xAA68)//SNR>=18.0dB
1221*53ee8cc1Swenshuai.xi return 45;//
1222*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0xBAD9)//SNR>=17.6dB
1223*53ee8cc1Swenshuai.xi return 44;//
1224*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0xCCE0)//SNR>=17.2dB
1225*53ee8cc1Swenshuai.xi return 43;//
1226*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0xE0A4)//SNR>=16.8dB
1227*53ee8cc1Swenshuai.xi return 42;//
1228*53ee8cc1Swenshuai.xi else if (u16NoisePower<=0xF650)//SNR>=16.4dB
1229*53ee8cc1Swenshuai.xi return 41;//
1230*53ee8cc1Swenshuai.xi else// if (u16NoisePower>=0xF650)//SNR<16.4dB
1231*53ee8cc1Swenshuai.xi return 40;//
1232*53ee8cc1Swenshuai.xi }
1233*53ee8cc1Swenshuai.xi }
1234*53ee8cc1Swenshuai.xi }
1235*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_ReadPKTERR(void)1236*53ee8cc1Swenshuai.xi static MS_U16 _HAL_EXTERN_ATSC_ReadPKTERR(void)
1237*53ee8cc1Swenshuai.xi {
1238*53ee8cc1Swenshuai.xi MS_U16 data = 0;
1239*53ee8cc1Swenshuai.xi MS_U8 reg = 0, reg_frz = 0;
1240*53ee8cc1Swenshuai.xi DMD_ATSC_DEMOD_TYPE eMode;
1241*53ee8cc1Swenshuai.xi
1242*53ee8cc1Swenshuai.xi eMode = _HAL_EXTERN_ATSC_Check8VSB64_256QAM();
1243*53ee8cc1Swenshuai.xi
1244*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0D03, ®_frz);
1245*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0D03, reg_frz|0x03);
1246*53ee8cc1Swenshuai.xi
1247*53ee8cc1Swenshuai.xi if (eMode == DMD_ATSC_DEMOD_ATSC_VSB)
1248*53ee8cc1Swenshuai.xi {
1249*53ee8cc1Swenshuai.xi if (!_HAL_EXTERN_ATSC_Vsb_FEC_Lock()) data = 0;
1250*53ee8cc1Swenshuai.xi else
1251*53ee8cc1Swenshuai.xi {
1252*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0D67, ®);
1253*53ee8cc1Swenshuai.xi data = reg;
1254*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0D66, ®);
1255*53ee8cc1Swenshuai.xi data = (data << 8) | reg;
1256*53ee8cc1Swenshuai.xi }
1257*53ee8cc1Swenshuai.xi }
1258*53ee8cc1Swenshuai.xi else
1259*53ee8cc1Swenshuai.xi {
1260*53ee8cc1Swenshuai.xi if (!_HAL_EXTERN_ATSC_QAM_Main_Lock()) data = 0;
1261*53ee8cc1Swenshuai.xi else
1262*53ee8cc1Swenshuai.xi {
1263*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0D67, ®);
1264*53ee8cc1Swenshuai.xi data = reg;
1265*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0D66, ®);
1266*53ee8cc1Swenshuai.xi data = (data << 8) | reg;
1267*53ee8cc1Swenshuai.xi }
1268*53ee8cc1Swenshuai.xi }
1269*53ee8cc1Swenshuai.xi
1270*53ee8cc1Swenshuai.xi reg_frz=reg_frz&(~0x03);
1271*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0D03, reg_frz);
1272*53ee8cc1Swenshuai.xi
1273*53ee8cc1Swenshuai.xi return data;
1274*53ee8cc1Swenshuai.xi }
1275*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_ReadBER(float * pBer)1276*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_ReadBER(float *pBer)
1277*53ee8cc1Swenshuai.xi {
1278*53ee8cc1Swenshuai.xi MS_BOOL status = true;
1279*53ee8cc1Swenshuai.xi MS_U8 reg = 0, reg_frz = 0;
1280*53ee8cc1Swenshuai.xi MS_U16 BitErrPeriod;
1281*53ee8cc1Swenshuai.xi MS_U32 BitErr;
1282*53ee8cc1Swenshuai.xi DMD_ATSC_DEMOD_TYPE eMode;
1283*53ee8cc1Swenshuai.xi
1284*53ee8cc1Swenshuai.xi eMode = _HAL_EXTERN_ATSC_Check8VSB64_256QAM();
1285*53ee8cc1Swenshuai.xi
1286*53ee8cc1Swenshuai.xi if (eMode == DMD_ATSC_DEMOD_ATSC_VSB)
1287*53ee8cc1Swenshuai.xi {
1288*53ee8cc1Swenshuai.xi if (!_HAL_EXTERN_ATSC_Vsb_FEC_Lock()) *pBer = 0;
1289*53ee8cc1Swenshuai.xi else
1290*53ee8cc1Swenshuai.xi {
1291*53ee8cc1Swenshuai.xi // bank 0D 0x03 [1:0] reg_bit_err_num_freeze
1292*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0D03, ®_frz);
1293*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0D03, reg_frz|0x03);
1294*53ee8cc1Swenshuai.xi
1295*53ee8cc1Swenshuai.xi // bank 0D 0x46 [7:0] reg_bit_err_sblprd_7_0
1296*53ee8cc1Swenshuai.xi // 0x47 [15:8] reg_bit_err_sblprd_15_8
1297*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0D47, ®);
1298*53ee8cc1Swenshuai.xi BitErrPeriod = reg;
1299*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0D46, ®);
1300*53ee8cc1Swenshuai.xi BitErrPeriod = (BitErrPeriod << 8)|reg;
1301*53ee8cc1Swenshuai.xi
1302*53ee8cc1Swenshuai.xi // bank 0D 0x6a [7:0] reg_bit_err_num_7_0
1303*53ee8cc1Swenshuai.xi // 0x6b [15:8] reg_bit_err_num_15_8
1304*53ee8cc1Swenshuai.xi // bank 0D 0x6c [7:0] reg_bit_err_num_23_16
1305*53ee8cc1Swenshuai.xi // 0x6d [15:8] reg_bit_err_num_31_24
1306*53ee8cc1Swenshuai.xi status &= _I2C_READ_BYTE(0x0D6d, ®);
1307*53ee8cc1Swenshuai.xi BitErr = reg;
1308*53ee8cc1Swenshuai.xi status &= _I2C_READ_BYTE(0x0D6c, ®);
1309*53ee8cc1Swenshuai.xi BitErr = (BitErr << 8)|reg;
1310*53ee8cc1Swenshuai.xi status &= _I2C_READ_BYTE(0x0D6b, ®);
1311*53ee8cc1Swenshuai.xi BitErr = (BitErr << 8)|reg;
1312*53ee8cc1Swenshuai.xi status &= _I2C_READ_BYTE(0x0D6a, ®);
1313*53ee8cc1Swenshuai.xi BitErr = (BitErr << 8)|reg;
1314*53ee8cc1Swenshuai.xi
1315*53ee8cc1Swenshuai.xi // bank 0D 0x03 [1:0] reg_bit_err_num_freeze
1316*53ee8cc1Swenshuai.xi reg_frz=reg_frz&(~0x03);
1317*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0D03, reg_frz);
1318*53ee8cc1Swenshuai.xi
1319*53ee8cc1Swenshuai.xi if (BitErrPeriod == 0 ) //protect 0
1320*53ee8cc1Swenshuai.xi BitErrPeriod = 1;
1321*53ee8cc1Swenshuai.xi if (BitErr <=0 )
1322*53ee8cc1Swenshuai.xi *pBer = 0.5f / ((float)BitErrPeriod*8*187*128);
1323*53ee8cc1Swenshuai.xi else
1324*53ee8cc1Swenshuai.xi *pBer = (float)BitErr / ((float)BitErrPeriod*8*187*128);
1325*53ee8cc1Swenshuai.xi }
1326*53ee8cc1Swenshuai.xi }
1327*53ee8cc1Swenshuai.xi else
1328*53ee8cc1Swenshuai.xi {
1329*53ee8cc1Swenshuai.xi if (!_HAL_EXTERN_ATSC_QAM_Main_Lock()) *pBer = 0;
1330*53ee8cc1Swenshuai.xi else
1331*53ee8cc1Swenshuai.xi {
1332*53ee8cc1Swenshuai.xi // bank 0D 0x03 [1:0] reg_bit_err_num_freeze
1333*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0D03, ®_frz);
1334*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0D03, reg_frz|0x03);
1335*53ee8cc1Swenshuai.xi
1336*53ee8cc1Swenshuai.xi // bank 0D 0x46 [7:0] reg_bit_err_sblprd_7_0
1337*53ee8cc1Swenshuai.xi // 0x47 [15:8] reg_bit_err_sblprd_15_8
1338*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0D47, ®);
1339*53ee8cc1Swenshuai.xi BitErrPeriod = reg;
1340*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x0D46, ®);
1341*53ee8cc1Swenshuai.xi BitErrPeriod = (BitErrPeriod << 8)|reg;
1342*53ee8cc1Swenshuai.xi
1343*53ee8cc1Swenshuai.xi // bank 0D 0x6a [7:0] reg_bit_err_num_7_0
1344*53ee8cc1Swenshuai.xi // 0x6b [15:8] reg_bit_err_num_15_8
1345*53ee8cc1Swenshuai.xi // bank 0D 0x6c [7:0] reg_bit_err_num_23_16
1346*53ee8cc1Swenshuai.xi // 0x6d [15:8] reg_bit_err_num_31_24
1347*53ee8cc1Swenshuai.xi status &= _I2C_READ_BYTE(0x0D6d, ®);
1348*53ee8cc1Swenshuai.xi BitErr = reg;
1349*53ee8cc1Swenshuai.xi status &= _I2C_READ_BYTE(0x0D6c, ®);
1350*53ee8cc1Swenshuai.xi BitErr = (BitErr << 8)|reg;
1351*53ee8cc1Swenshuai.xi status &= _I2C_READ_BYTE(0x0D6b, ®);
1352*53ee8cc1Swenshuai.xi BitErr = (BitErr << 8)|reg;
1353*53ee8cc1Swenshuai.xi status &= _I2C_READ_BYTE(0x0D6a, ®);
1354*53ee8cc1Swenshuai.xi BitErr = (BitErr << 8)|reg;
1355*53ee8cc1Swenshuai.xi
1356*53ee8cc1Swenshuai.xi // bank 0D 0x03 [1:0] reg_bit_err_num_freeze
1357*53ee8cc1Swenshuai.xi reg_frz=reg_frz&(~0x03);
1358*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0D03, reg_frz);
1359*53ee8cc1Swenshuai.xi
1360*53ee8cc1Swenshuai.xi if (BitErrPeriod == 0 ) //protect 0
1361*53ee8cc1Swenshuai.xi BitErrPeriod = 1;
1362*53ee8cc1Swenshuai.xi if (BitErr <=0 )
1363*53ee8cc1Swenshuai.xi *pBer = 0.5f / ((float)BitErrPeriod*7*122*128);
1364*53ee8cc1Swenshuai.xi else
1365*53ee8cc1Swenshuai.xi *pBer = (float)BitErr / ((float)BitErrPeriod*7*122*128);
1366*53ee8cc1Swenshuai.xi }
1367*53ee8cc1Swenshuai.xi }
1368*53ee8cc1Swenshuai.xi
1369*53ee8cc1Swenshuai.xi return status;
1370*53ee8cc1Swenshuai.xi }
1371*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_ReadFrequencyOffset(void)1372*53ee8cc1Swenshuai.xi static MS_S16 _HAL_EXTERN_ATSC_ReadFrequencyOffset(void)
1373*53ee8cc1Swenshuai.xi {
1374*53ee8cc1Swenshuai.xi DMD_ATSC_DEMOD_TYPE eMode;
1375*53ee8cc1Swenshuai.xi MS_U8 u8PTK_LOOP_FF_R3=0, u8PTK_LOOP_FF_R2=0;
1376*53ee8cc1Swenshuai.xi MS_U8 u8PTK_RATE_2=0;
1377*53ee8cc1Swenshuai.xi MS_U8 u8AD_CRL_LOOP_VALUE0=0, u8AD_CRL_LOOP_VALUE1=0;
1378*53ee8cc1Swenshuai.xi MS_U8 u8MIX_RATE_0=0, u8MIX_RATE_1=0, u8MIX_RATE_2=0;
1379*53ee8cc1Swenshuai.xi MS_S16 PTK_LOOP_FF;
1380*53ee8cc1Swenshuai.xi MS_S16 AD_CRL_LOOP_VALUE;
1381*53ee8cc1Swenshuai.xi MS_S16 MIX_RATE;
1382*53ee8cc1Swenshuai.xi MS_S16 FreqOffset = 0; //kHz
1383*53ee8cc1Swenshuai.xi
1384*53ee8cc1Swenshuai.xi eMode = _HAL_EXTERN_ATSC_Check8VSB64_256QAM();
1385*53ee8cc1Swenshuai.xi
1386*53ee8cc1Swenshuai.xi if (eMode == DMD_ATSC_DEMOD_ATSC_VSB) //VSB mode//
1387*53ee8cc1Swenshuai.xi {
1388*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x297E, 0x01);
1389*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x29E6, 0xff);
1390*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x297C, &u8PTK_LOOP_FF_R2);
1391*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x297D, &u8PTK_LOOP_FF_R3);
1392*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x297E, 0x00);
1393*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x29E6, 0xff);
1394*53ee8cc1Swenshuai.xi
1395*53ee8cc1Swenshuai.xi PTK_LOOP_FF = (u8PTK_LOOP_FF_R3<<8) | u8PTK_LOOP_FF_R2;
1396*53ee8cc1Swenshuai.xi FreqOffset = (float)(-PTK_LOOP_FF*0.04768);
1397*53ee8cc1Swenshuai.xi
1398*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x2982, &u8PTK_RATE_2);
1399*53ee8cc1Swenshuai.xi
1400*53ee8cc1Swenshuai.xi if (u8PTK_RATE_2 == 0x07)
1401*53ee8cc1Swenshuai.xi FreqOffset = FreqOffset-100;
1402*53ee8cc1Swenshuai.xi else if (u8PTK_RATE_2 == 0x08)
1403*53ee8cc1Swenshuai.xi FreqOffset = FreqOffset-500;
1404*53ee8cc1Swenshuai.xi }
1405*53ee8cc1Swenshuai.xi else //QAM MODE
1406*53ee8cc1Swenshuai.xi {
1407*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x2C04, &u8AD_CRL_LOOP_VALUE0);
1408*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x2C05, &u8AD_CRL_LOOP_VALUE1);
1409*53ee8cc1Swenshuai.xi
1410*53ee8cc1Swenshuai.xi AD_CRL_LOOP_VALUE = (u8AD_CRL_LOOP_VALUE1<<8) | u8AD_CRL_LOOP_VALUE0;
1411*53ee8cc1Swenshuai.xi
1412*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x2904, &u8MIX_RATE_0);
1413*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x2905, &u8MIX_RATE_1);
1414*53ee8cc1Swenshuai.xi _I2C_READ_BYTE(0x2906, &u8MIX_RATE_2);
1415*53ee8cc1Swenshuai.xi
1416*53ee8cc1Swenshuai.xi MIX_RATE = (u8MIX_RATE_2<<12)|(u8MIX_RATE_1<<4)|(u8MIX_RATE_0>>4);
1417*53ee8cc1Swenshuai.xi
1418*53ee8cc1Swenshuai.xi if (eMode == DMD_ATSC_DEMOD_ATSC_256QAM) //256QAM//
1419*53ee8cc1Swenshuai.xi {
1420*53ee8cc1Swenshuai.xi FreqOffset = (float)(AD_CRL_LOOP_VALUE*0.0025561); //5.360537E6/2^21*1000
1421*53ee8cc1Swenshuai.xi }
1422*53ee8cc1Swenshuai.xi else if (eMode == DMD_ATSC_DEMOD_ATSC_64QAM)//64QAM//
1423*53ee8cc1Swenshuai.xi {
1424*53ee8cc1Swenshuai.xi FreqOffset = (float)(AD_CRL_LOOP_VALUE*0.00241134); //5.056941E6/2^21*1000
1425*53ee8cc1Swenshuai.xi }
1426*53ee8cc1Swenshuai.xi
1427*53ee8cc1Swenshuai.xi FreqOffset = FreqOffset+(float)(MIX_RATE-0x3D70)/2.62144; //(0.001/25*2^20/16)
1428*53ee8cc1Swenshuai.xi }
1429*53ee8cc1Swenshuai.xi
1430*53ee8cc1Swenshuai.xi return FreqOffset;
1431*53ee8cc1Swenshuai.xi }
1432*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_SetSerialControl(MS_U8 u8TsConfigData)1433*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_SetSerialControl(MS_U8 u8TsConfigData)
1434*53ee8cc1Swenshuai.xi {
1435*53ee8cc1Swenshuai.xi return TRUE;
1436*53ee8cc1Swenshuai.xi }
1437*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_IIC_Bypass_Mode(MS_BOOL bEnable)1438*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_IIC_Bypass_Mode(MS_BOOL bEnable)
1439*53ee8cc1Swenshuai.xi {
1440*53ee8cc1Swenshuai.xi MS_U8 u8Retry = 10;
1441*53ee8cc1Swenshuai.xi MS_BOOL bRet = FALSE;
1442*53ee8cc1Swenshuai.xi
1443*53ee8cc1Swenshuai.xi while ((u8Retry--) && (bRet == FALSE))
1444*53ee8cc1Swenshuai.xi {
1445*53ee8cc1Swenshuai.xi if (bEnable)
1446*53ee8cc1Swenshuai.xi {
1447*53ee8cc1Swenshuai.xi bRet = _I2C_WRITE_BYTE(REG_IIC_BYPASS, 0x10);// IIC by-pass mode on
1448*53ee8cc1Swenshuai.xi }
1449*53ee8cc1Swenshuai.xi else
1450*53ee8cc1Swenshuai.xi {
1451*53ee8cc1Swenshuai.xi bRet = _I2C_WRITE_BYTE(REG_IIC_BYPASS, 0x00);// IIC by-pass mode off
1452*53ee8cc1Swenshuai.xi }
1453*53ee8cc1Swenshuai.xi
1454*53ee8cc1Swenshuai.xi }
1455*53ee8cc1Swenshuai.xi
1456*53ee8cc1Swenshuai.xi return bRet;
1457*53ee8cc1Swenshuai.xi }
1458*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_SW_SSPI_GPIO(MS_BOOL bEnable)1459*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_SW_SSPI_GPIO(MS_BOOL bEnable)
1460*53ee8cc1Swenshuai.xi {
1461*53ee8cc1Swenshuai.xi MS_BOOL bRet = TRUE;
1462*53ee8cc1Swenshuai.xi MS_U8 u8Data;
1463*53ee8cc1Swenshuai.xi
1464*53ee8cc1Swenshuai.xi if(bEnable == TRUE) //switch to GPIO
1465*53ee8cc1Swenshuai.xi {
1466*53ee8cc1Swenshuai.xi bRet = _I2C_READ_BYTE(0x0951, &u8Data);
1467*53ee8cc1Swenshuai.xi u8Data &= ~0x01;
1468*53ee8cc1Swenshuai.xi bRet = _I2C_WRITE_BYTE(0x0951, u8Data); // [8] reg_turn_off_pad = 0
1469*53ee8cc1Swenshuai.xi
1470*53ee8cc1Swenshuai.xi
1471*53ee8cc1Swenshuai.xi bRet = _I2C_READ_BYTE(0x0976, &u8Data);
1472*53ee8cc1Swenshuai.xi u8Data &= ~0x01;
1473*53ee8cc1Swenshuai.xi bRet = _I2C_WRITE_BYTE(0x0976, u8Data); // [0] reg_en_sspi_pad = 0
1474*53ee8cc1Swenshuai.xi }
1475*53ee8cc1Swenshuai.xi else
1476*53ee8cc1Swenshuai.xi {
1477*53ee8cc1Swenshuai.xi bRet = _I2C_READ_BYTE(0x0951, &u8Data);
1478*53ee8cc1Swenshuai.xi u8Data |= 0x01;
1479*53ee8cc1Swenshuai.xi bRet = _I2C_WRITE_BYTE(0x0951, u8Data); // [8] reg_turn_off_pad = 1
1480*53ee8cc1Swenshuai.xi
1481*53ee8cc1Swenshuai.xi
1482*53ee8cc1Swenshuai.xi bRet = _I2C_READ_BYTE(0x0976, &u8Data);
1483*53ee8cc1Swenshuai.xi u8Data |= 0x01;
1484*53ee8cc1Swenshuai.xi bRet = _I2C_WRITE_BYTE(0x0976, u8Data); // [0] reg_en_sspi_pad = 1
1485*53ee8cc1Swenshuai.xi }
1486*53ee8cc1Swenshuai.xi
1487*53ee8cc1Swenshuai.xi return bRet;
1488*53ee8cc1Swenshuai.xi }
1489*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_GPIO_GET_LEVEL(MS_U8 u8Pin,MS_BOOL * bLevel)1490*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_GPIO_GET_LEVEL(MS_U8 u8Pin, MS_BOOL *bLevel)
1491*53ee8cc1Swenshuai.xi {
1492*53ee8cc1Swenshuai.xi MS_BOOL bRet = TRUE;
1493*53ee8cc1Swenshuai.xi MS_U8 u8Data;
1494*53ee8cc1Swenshuai.xi
1495*53ee8cc1Swenshuai.xi bRet = _I2C_READ_BYTE(0x09CA, &u8Data);
1496*53ee8cc1Swenshuai.xi if (u8Pin == 0)
1497*53ee8cc1Swenshuai.xi {
1498*53ee8cc1Swenshuai.xi if ((u8Data & 0x01) == 0x01)
1499*53ee8cc1Swenshuai.xi *bLevel = TRUE;
1500*53ee8cc1Swenshuai.xi else
1501*53ee8cc1Swenshuai.xi *bLevel = FALSE;
1502*53ee8cc1Swenshuai.xi }
1503*53ee8cc1Swenshuai.xi else if(u8Pin == 1)
1504*53ee8cc1Swenshuai.xi {
1505*53ee8cc1Swenshuai.xi if ((u8Data & 0x02) == 0x02)
1506*53ee8cc1Swenshuai.xi *bLevel = TRUE;
1507*53ee8cc1Swenshuai.xi else
1508*53ee8cc1Swenshuai.xi *bLevel = FALSE;
1509*53ee8cc1Swenshuai.xi }
1510*53ee8cc1Swenshuai.xi else if(u8Pin == 2)
1511*53ee8cc1Swenshuai.xi {
1512*53ee8cc1Swenshuai.xi if ((u8Data & 0x04) == 0x04)
1513*53ee8cc1Swenshuai.xi *bLevel = TRUE;
1514*53ee8cc1Swenshuai.xi else
1515*53ee8cc1Swenshuai.xi *bLevel = FALSE;
1516*53ee8cc1Swenshuai.xi }
1517*53ee8cc1Swenshuai.xi else if(u8Pin == 5)
1518*53ee8cc1Swenshuai.xi {
1519*53ee8cc1Swenshuai.xi if ((u8Data & 0x20) == 0x20)
1520*53ee8cc1Swenshuai.xi *bLevel = TRUE;
1521*53ee8cc1Swenshuai.xi else
1522*53ee8cc1Swenshuai.xi *bLevel = FALSE;
1523*53ee8cc1Swenshuai.xi }
1524*53ee8cc1Swenshuai.xi else
1525*53ee8cc1Swenshuai.xi {
1526*53ee8cc1Swenshuai.xi HAL_EXTERN_ATSC_DBINFO(printf("Can not use this pin as GPIO[%d]\n", u8Pin));
1527*53ee8cc1Swenshuai.xi
1528*53ee8cc1Swenshuai.xi bRet = FALSE;
1529*53ee8cc1Swenshuai.xi
1530*53ee8cc1Swenshuai.xi return bRet;
1531*53ee8cc1Swenshuai.xi }
1532*53ee8cc1Swenshuai.xi
1533*53ee8cc1Swenshuai.xi return bRet;
1534*53ee8cc1Swenshuai.xi }
1535*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_GPIO_SET_LEVEL(MS_U8 u8Pin,MS_BOOL bLevel)1536*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_GPIO_SET_LEVEL(MS_U8 u8Pin, MS_BOOL bLevel)
1537*53ee8cc1Swenshuai.xi {
1538*53ee8cc1Swenshuai.xi MS_BOOL bRet = TRUE;
1539*53ee8cc1Swenshuai.xi MS_U8 u8Data;
1540*53ee8cc1Swenshuai.xi
1541*53ee8cc1Swenshuai.xi bRet = _I2C_READ_BYTE(0x09C6, &u8Data);
1542*53ee8cc1Swenshuai.xi if (u8Pin == 0)
1543*53ee8cc1Swenshuai.xi {
1544*53ee8cc1Swenshuai.xi if (bLevel == FALSE)
1545*53ee8cc1Swenshuai.xi u8Data &= ~0x01;
1546*53ee8cc1Swenshuai.xi else
1547*53ee8cc1Swenshuai.xi u8Data |= 0x01;
1548*53ee8cc1Swenshuai.xi }
1549*53ee8cc1Swenshuai.xi else if (u8Pin == 1)
1550*53ee8cc1Swenshuai.xi {
1551*53ee8cc1Swenshuai.xi if (bLevel == FALSE)
1552*53ee8cc1Swenshuai.xi u8Data &= ~0x02;
1553*53ee8cc1Swenshuai.xi else
1554*53ee8cc1Swenshuai.xi u8Data |= 0x02;
1555*53ee8cc1Swenshuai.xi }
1556*53ee8cc1Swenshuai.xi else if (u8Pin == 2)
1557*53ee8cc1Swenshuai.xi {
1558*53ee8cc1Swenshuai.xi if (bLevel == FALSE)
1559*53ee8cc1Swenshuai.xi u8Data &= ~0x04;
1560*53ee8cc1Swenshuai.xi else
1561*53ee8cc1Swenshuai.xi u8Data |= 0x04;
1562*53ee8cc1Swenshuai.xi }
1563*53ee8cc1Swenshuai.xi else if (u8Pin == 5)
1564*53ee8cc1Swenshuai.xi {
1565*53ee8cc1Swenshuai.xi if (bLevel == FALSE)
1566*53ee8cc1Swenshuai.xi u8Data &= ~0x20;
1567*53ee8cc1Swenshuai.xi else
1568*53ee8cc1Swenshuai.xi u8Data |= 0x20;
1569*53ee8cc1Swenshuai.xi }
1570*53ee8cc1Swenshuai.xi else
1571*53ee8cc1Swenshuai.xi {
1572*53ee8cc1Swenshuai.xi HAL_EXTERN_ATSC_DBINFO(printf("Can not use this pin as GPIO[%d]\n", u8Pin));
1573*53ee8cc1Swenshuai.xi
1574*53ee8cc1Swenshuai.xi bRet = FALSE;
1575*53ee8cc1Swenshuai.xi
1576*53ee8cc1Swenshuai.xi return bRet;
1577*53ee8cc1Swenshuai.xi }
1578*53ee8cc1Swenshuai.xi
1579*53ee8cc1Swenshuai.xi bRet = _I2C_WRITE_BYTE(0x09C6, u8Data);
1580*53ee8cc1Swenshuai.xi
1581*53ee8cc1Swenshuai.xi return bRet;
1582*53ee8cc1Swenshuai.xi }
1583*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_GPIO_OUT_ENABLE(MS_U8 u8Pin,MS_BOOL bEnableOut)1584*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_GPIO_OUT_ENABLE(MS_U8 u8Pin, MS_BOOL bEnableOut)
1585*53ee8cc1Swenshuai.xi {
1586*53ee8cc1Swenshuai.xi MS_BOOL bRet = TRUE;
1587*53ee8cc1Swenshuai.xi MS_U8 u8Data;
1588*53ee8cc1Swenshuai.xi
1589*53ee8cc1Swenshuai.xi bRet = _I2C_READ_BYTE(0x09C8, &u8Data);
1590*53ee8cc1Swenshuai.xi if (u8Pin == 0)
1591*53ee8cc1Swenshuai.xi {
1592*53ee8cc1Swenshuai.xi if (bEnableOut == TRUE)
1593*53ee8cc1Swenshuai.xi u8Data &= ~0x01;
1594*53ee8cc1Swenshuai.xi else
1595*53ee8cc1Swenshuai.xi u8Data |= 0x01;
1596*53ee8cc1Swenshuai.xi }
1597*53ee8cc1Swenshuai.xi else if (u8Pin == 1)
1598*53ee8cc1Swenshuai.xi {
1599*53ee8cc1Swenshuai.xi if (bEnableOut == TRUE)
1600*53ee8cc1Swenshuai.xi u8Data &= ~0x02;
1601*53ee8cc1Swenshuai.xi else
1602*53ee8cc1Swenshuai.xi u8Data |= 0x02;
1603*53ee8cc1Swenshuai.xi }
1604*53ee8cc1Swenshuai.xi else if (u8Pin == 2)
1605*53ee8cc1Swenshuai.xi {
1606*53ee8cc1Swenshuai.xi if (bEnableOut == TRUE)
1607*53ee8cc1Swenshuai.xi u8Data &= ~0x04;
1608*53ee8cc1Swenshuai.xi else
1609*53ee8cc1Swenshuai.xi u8Data |= 0x04;
1610*53ee8cc1Swenshuai.xi }
1611*53ee8cc1Swenshuai.xi else if (u8Pin == 5)
1612*53ee8cc1Swenshuai.xi {
1613*53ee8cc1Swenshuai.xi if (bEnableOut == TRUE)
1614*53ee8cc1Swenshuai.xi u8Data &= ~0x20;
1615*53ee8cc1Swenshuai.xi else
1616*53ee8cc1Swenshuai.xi u8Data |= 0x20;
1617*53ee8cc1Swenshuai.xi }
1618*53ee8cc1Swenshuai.xi else
1619*53ee8cc1Swenshuai.xi {
1620*53ee8cc1Swenshuai.xi HAL_EXTERN_ATSC_DBINFO(printf("Can not use this pin as GPIO[%d]\n", u8Pin));
1621*53ee8cc1Swenshuai.xi
1622*53ee8cc1Swenshuai.xi bRet = FALSE;
1623*53ee8cc1Swenshuai.xi
1624*53ee8cc1Swenshuai.xi return bRet;
1625*53ee8cc1Swenshuai.xi }
1626*53ee8cc1Swenshuai.xi
1627*53ee8cc1Swenshuai.xi bRet = _I2C_WRITE_BYTE(0x09C8, u8Data);
1628*53ee8cc1Swenshuai.xi
1629*53ee8cc1Swenshuai.xi return bRet;
1630*53ee8cc1Swenshuai.xi }
1631*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_GetReg(MS_U16 u16Addr,MS_U8 * pu8Data)1632*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_GetReg(MS_U16 u16Addr, MS_U8 *pu8Data)
1633*53ee8cc1Swenshuai.xi {
1634*53ee8cc1Swenshuai.xi return _I2C_READ_BYTE(u16Addr, pu8Data);
1635*53ee8cc1Swenshuai.xi }
1636*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_SetReg(MS_U16 u16Addr,MS_U8 u8Data)1637*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_SetReg(MS_U16 u16Addr, MS_U8 u8Data)
1638*53ee8cc1Swenshuai.xi {
1639*53ee8cc1Swenshuai.xi return _I2C_WRITE_BYTE(u16Addr, u8Data);
1640*53ee8cc1Swenshuai.xi }
1641*53ee8cc1Swenshuai.xi
_HAL_EXTERN_ATSC_DoIQSwap(MS_BOOL bIsQPad)1642*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_EXTERN_ATSC_DoIQSwap(MS_BOOL bIsQPad)
1643*53ee8cc1Swenshuai.xi {
1644*53ee8cc1Swenshuai.xi DMD_ATSC_ResData *pRes = psDMD_ATSC_ResData + u8DMD_ATSC_DMD_ID;
1645*53ee8cc1Swenshuai.xi
1646*53ee8cc1Swenshuai.xi pRes->sDMD_ATSC_InitData.bIsQPad = bIsQPad;
1647*53ee8cc1Swenshuai.xi
1648*53ee8cc1Swenshuai.xi //Set I&Q pad
1649*53ee8cc1Swenshuai.xi if (pRes->sDMD_ATSC_InitData.bIsQPad)
1650*53ee8cc1Swenshuai.xi {
1651*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0A33, 0x2E);
1652*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0A2E, 0x01);
1653*53ee8cc1Swenshuai.xi
1654*53ee8cc1Swenshuai.xi HAL_EXTERN_ATSC_DBINFO(printf("select Q pad source\n"));
1655*53ee8cc1Swenshuai.xi }
1656*53ee8cc1Swenshuai.xi else
1657*53ee8cc1Swenshuai.xi {
1658*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0A33, 0x1E);
1659*53ee8cc1Swenshuai.xi _I2C_WRITE_BYTE(0x0A2E, 0x00);
1660*53ee8cc1Swenshuai.xi
1661*53ee8cc1Swenshuai.xi HAL_EXTERN_ATSC_DBINFO(printf("select I pad source\n"));
1662*53ee8cc1Swenshuai.xi }
1663*53ee8cc1Swenshuai.xi
1664*53ee8cc1Swenshuai.xi return TRUE;
1665*53ee8cc1Swenshuai.xi }
1666*53ee8cc1Swenshuai.xi
1667*53ee8cc1Swenshuai.xi
1668*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1669*53ee8cc1Swenshuai.xi // Global Functions
1670*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
HAL_EXTERN_ATSC_IOCTL_CMD(DMD_ATSC_HAL_COMMAND eCmd,void * pArgs)1671*53ee8cc1Swenshuai.xi MS_BOOL HAL_EXTERN_ATSC_IOCTL_CMD(DMD_ATSC_HAL_COMMAND eCmd, void *pArgs)
1672*53ee8cc1Swenshuai.xi {
1673*53ee8cc1Swenshuai.xi MS_BOOL bResult = TRUE;
1674*53ee8cc1Swenshuai.xi
1675*53ee8cc1Swenshuai.xi switch(eCmd)
1676*53ee8cc1Swenshuai.xi {
1677*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_Exit:
1678*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_Exit();
1679*53ee8cc1Swenshuai.xi break;
1680*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_InitClk:
1681*53ee8cc1Swenshuai.xi _HAL_EXTERN_ATSC_InitClk();
1682*53ee8cc1Swenshuai.xi break;
1683*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_Download:
1684*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_Download();
1685*53ee8cc1Swenshuai.xi break;
1686*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_FWVERSION:
1687*53ee8cc1Swenshuai.xi _HAL_EXTERN_ATSC_FWVERSION();
1688*53ee8cc1Swenshuai.xi break;
1689*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_SoftReset:
1690*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_SoftReset();
1691*53ee8cc1Swenshuai.xi break;
1692*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_SetVsbMode:
1693*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_SetVsbMode();
1694*53ee8cc1Swenshuai.xi break;
1695*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_Set64QamMode:
1696*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_Set64QamMode();
1697*53ee8cc1Swenshuai.xi break;
1698*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_Set256QamMode:
1699*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_Set256QamMode();
1700*53ee8cc1Swenshuai.xi break;
1701*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_SetModeClean:
1702*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_SetModeClean();
1703*53ee8cc1Swenshuai.xi break;
1704*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_Set_QAM_SR:
1705*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_Set_QAM_SR();
1706*53ee8cc1Swenshuai.xi break;
1707*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_Active:
1708*53ee8cc1Swenshuai.xi break;
1709*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_Check8VSB64_256QAM:
1710*53ee8cc1Swenshuai.xi *((DMD_ATSC_DEMOD_TYPE *)pArgs) = _HAL_EXTERN_ATSC_Check8VSB64_256QAM();
1711*53ee8cc1Swenshuai.xi break;
1712*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_AGCLock:
1713*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_Vsb_QAM_AGCLock();
1714*53ee8cc1Swenshuai.xi break;
1715*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_Vsb_PreLock:
1716*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_Vsb_PreLock();
1717*53ee8cc1Swenshuai.xi break;
1718*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_Vsb_FSync_Lock:
1719*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_Vsb_FSync_Lock();
1720*53ee8cc1Swenshuai.xi break;
1721*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_Vsb_CE_Lock:
1722*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_Vsb_CE_Lock();
1723*53ee8cc1Swenshuai.xi break;
1724*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_Vsb_FEC_Lock:
1725*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_Vsb_FEC_Lock();
1726*53ee8cc1Swenshuai.xi break;
1727*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_QAM_PreLock:
1728*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_QAM_PreLock();
1729*53ee8cc1Swenshuai.xi break;
1730*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_QAM_Main_Lock:
1731*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_QAM_Main_Lock();
1732*53ee8cc1Swenshuai.xi break;
1733*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_ReadIFAGC:
1734*53ee8cc1Swenshuai.xi *((MS_U16 *)pArgs) = _HAL_EXTERN_ATSC_ReadIFAGC();
1735*53ee8cc1Swenshuai.xi break;
1736*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_CheckSignalCondition:
1737*53ee8cc1Swenshuai.xi _HAL_EXTERN_ATSC_CheckSignalCondition((DMD_ATSC_SIGNAL_CONDITION *)pArgs);
1738*53ee8cc1Swenshuai.xi break;
1739*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_ReadSNRPercentage:
1740*53ee8cc1Swenshuai.xi *((MS_U8 *)pArgs) = _HAL_EXTERN_ATSC_ReadSNRPercentage();
1741*53ee8cc1Swenshuai.xi break;
1742*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_ReadPKTERR:
1743*53ee8cc1Swenshuai.xi *((MS_U16 *)pArgs) = _HAL_EXTERN_ATSC_ReadPKTERR();
1744*53ee8cc1Swenshuai.xi break;
1745*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_GetPreViterbiBer:
1746*53ee8cc1Swenshuai.xi break;
1747*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_GetPostViterbiBer:
1748*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_ReadBER((float *)pArgs);
1749*53ee8cc1Swenshuai.xi break;
1750*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_ReadFrequencyOffset:
1751*53ee8cc1Swenshuai.xi *((MS_S16 *)pArgs) = _HAL_EXTERN_ATSC_ReadFrequencyOffset();
1752*53ee8cc1Swenshuai.xi break;
1753*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_TS_INTERFACE_CONFIG:
1754*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_SetSerialControl(*((MS_U8 *)pArgs));
1755*53ee8cc1Swenshuai.xi break;
1756*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_IIC_Bypass_Mode:
1757*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_IIC_Bypass_Mode(*((MS_BOOL *)pArgs));
1758*53ee8cc1Swenshuai.xi break;
1759*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_SSPI_TO_GPIO:
1760*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_SW_SSPI_GPIO(*((MS_BOOL *)pArgs));
1761*53ee8cc1Swenshuai.xi break;
1762*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_GPIO_GET_LEVEL:
1763*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_GPIO_GET_LEVEL((*((DMD_ATSC_GPIO_PIN_DATA *)pArgs)).u8Pin, &((*((DMD_ATSC_GPIO_PIN_DATA *)pArgs)).bLevel));
1764*53ee8cc1Swenshuai.xi break;
1765*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_GPIO_SET_LEVEL:
1766*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_GPIO_SET_LEVEL((*((DMD_ATSC_GPIO_PIN_DATA *)pArgs)).u8Pin, (*((DMD_ATSC_GPIO_PIN_DATA *)pArgs)).bLevel);
1767*53ee8cc1Swenshuai.xi break;
1768*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_GPIO_OUT_ENABLE:
1769*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_GPIO_OUT_ENABLE((*((DMD_ATSC_GPIO_PIN_DATA *)pArgs)).u8Pin, (*((DMD_ATSC_GPIO_PIN_DATA *)pArgs)).bIsOut);
1770*53ee8cc1Swenshuai.xi break;
1771*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_GET_REG:
1772*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_GetReg((*((DMD_ATSC_REG_DATA *)pArgs)).u16Addr, &((*((DMD_ATSC_REG_DATA *)pArgs)).u8Data));
1773*53ee8cc1Swenshuai.xi break;
1774*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_SET_REG:
1775*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_SetReg((*((DMD_ATSC_REG_DATA *)pArgs)).u16Addr, (*((DMD_ATSC_REG_DATA *)pArgs)).u8Data);
1776*53ee8cc1Swenshuai.xi break;
1777*53ee8cc1Swenshuai.xi case DMD_ATSC_HAL_CMD_DoIQSwap:
1778*53ee8cc1Swenshuai.xi bResult = _HAL_EXTERN_ATSC_DoIQSwap(*((MS_BOOL *)pArgs));
1779*53ee8cc1Swenshuai.xi break;
1780*53ee8cc1Swenshuai.xi default:
1781*53ee8cc1Swenshuai.xi break;
1782*53ee8cc1Swenshuai.xi }
1783*53ee8cc1Swenshuai.xi
1784*53ee8cc1Swenshuai.xi return bResult;
1785*53ee8cc1Swenshuai.xi }
1786*53ee8cc1Swenshuai.xi
_DEFAULT_CMD(void)1787*53ee8cc1Swenshuai.xi static MS_U8 _DEFAULT_CMD(void)
1788*53ee8cc1Swenshuai.xi {
1789*53ee8cc1Swenshuai.xi return TRUE;
1790*53ee8cc1Swenshuai.xi }
1791*53ee8cc1Swenshuai.xi
1792*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_ATSC_Initial_Hal_Interface(void) __attribute__((weak, alias ("_DEFAULT_CMD")));
1793