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��) 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 /// @file INTERN_DVBT.c
98*53ee8cc1Swenshuai.xi /// @brief INTERN_DVBT DVBT
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor, Inc.
100*53ee8cc1Swenshuai.xi //
101*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
102*53ee8cc1Swenshuai.xi //0312
103*53ee8cc1Swenshuai.xi
104*53ee8cc1Swenshuai.xi #define _INTERN_DVBS_C_
105*53ee8cc1Swenshuai.xi #include <math.h>
106*53ee8cc1Swenshuai.xi #include "MsCommon.h"
107*53ee8cc1Swenshuai.xi #include "MsIRQ.h"
108*53ee8cc1Swenshuai.xi #include "MsOS.h"
109*53ee8cc1Swenshuai.xi //#include "apiPWS.h"
110*53ee8cc1Swenshuai.xi
111*53ee8cc1Swenshuai.xi #include "MsTypes.h"
112*53ee8cc1Swenshuai.xi #include "drvBDMA.h"
113*53ee8cc1Swenshuai.xi //#include "drvIIC.h"
114*53ee8cc1Swenshuai.xi //#include "msAPI_Tuner.h"
115*53ee8cc1Swenshuai.xi //#include "msAPI_MIU.h"
116*53ee8cc1Swenshuai.xi //#include "BinInfo.h"
117*53ee8cc1Swenshuai.xi //#include "halVif.h"
118*53ee8cc1Swenshuai.xi #include "drvDMD_INTERN_DVBS.h"
119*53ee8cc1Swenshuai.xi #include "halDMD_INTERN_DVBS.h"
120*53ee8cc1Swenshuai.xi #include "halDMD_INTERN_common.h"
121*53ee8cc1Swenshuai.xi
122*53ee8cc1Swenshuai.xi #include "drvMMIO.h"
123*53ee8cc1Swenshuai.xi //#include "TDAG4D01A_SSI_DVBT.c"
124*53ee8cc1Swenshuai.xi #include "drvDMD_VD_MBX.h"
125*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------
126*53ee8cc1Swenshuai.xi #define BIN_ID_INTERN_DVBS_DEMOD BIN_ID_INTERN_DVBS
127*53ee8cc1Swenshuai.xi
128*53ee8cc1Swenshuai.xi //For DVBS
129*53ee8cc1Swenshuai.xi //#define DVBT2FEC_REG_BASE 0x3300
130*53ee8cc1Swenshuai.xi #define DVBS2OPPRO_REG_BASE 0x3E00
131*53ee8cc1Swenshuai.xi #define TOP_REG_BASE 0x2000 //DMDTOP
132*53ee8cc1Swenshuai.xi #define REG_BACKEND 0x1F00//_REG_BACKEND
133*53ee8cc1Swenshuai.xi #define DVBSFEC_REG_BASE 0x3F00
134*53ee8cc1Swenshuai.xi #define DVBS2FEC_REG_BASE 0x3300
135*53ee8cc1Swenshuai.xi #define DVBS2_REG_BASE 0x3A00
136*53ee8cc1Swenshuai.xi #define DVBS2_INNER_REG_BASE 0x3B00
137*53ee8cc1Swenshuai.xi #define DVBS2_INNER_EXT_REG_BASE 0x3C00
138*53ee8cc1Swenshuai.xi #define DVBS2_INNER_EXT2_REG_BASE 0x3D00
139*53ee8cc1Swenshuai.xi //#define DVBSTFEC_REG_BASE 0x2300 //DVBTFEC
140*53ee8cc1Swenshuai.xi #define FRONTEND_REG_BASE 0x2800
141*53ee8cc1Swenshuai.xi #define FRONTENDEXT_REG_BASE 0x2900
142*53ee8cc1Swenshuai.xi #define FRONTENDEXT2_REG_BASE 0x2A00
143*53ee8cc1Swenshuai.xi #define DMDANA_REG_BASE 0x2E00 //DMDDTOP//reg_dmdana.xls
144*53ee8cc1Swenshuai.xi #define DVBTM_REG_BASE 0x3400
145*53ee8cc1Swenshuai.xi
146*53ee8cc1Swenshuai.xi #define SAMPLING_RATE_FS (144000)//(108000)//(96000)
147*53ee8cc1Swenshuai.xi #define INTERN_DVBS_DEMOD_WAIT_TIMEOUT (6000)
148*53ee8cc1Swenshuai.xi #define INTERN_DVBS_TUNER_WAIT_TIMEOUT (50)
149*53ee8cc1Swenshuai.xi
150*53ee8cc1Swenshuai.xi //#define DVBS2_Function (1)
151*53ee8cc1Swenshuai.xi //#define MSB131X_ADCPLL_IQ_SWAP 0
152*53ee8cc1Swenshuai.xi //#define INTERN_DVBS_TS_DATA_SWAP 0
153*53ee8cc1Swenshuai.xi
154*53ee8cc1Swenshuai.xi //#define MS_DEBUG //enable debug dump
155*53ee8cc1Swenshuai.xi
156*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
157*53ee8cc1Swenshuai.xi #define DBG_INTERN_DVBS(x) x
158*53ee8cc1Swenshuai.xi #define DBG_GET_SIGNAL_DVBS(x) x
159*53ee8cc1Swenshuai.xi #define DBG_INTERN_DVBS_TIME(x) x
160*53ee8cc1Swenshuai.xi #define DBG_INTERN_DVBS_LOCK(x) x
161*53ee8cc1Swenshuai.xi #define INTERN_DVBS_INTERNAL_DEBUG 1
162*53ee8cc1Swenshuai.xi #else
163*53ee8cc1Swenshuai.xi #define DBG_INTERN_DVBS(x) //x
164*53ee8cc1Swenshuai.xi #define DBG_GET_SIGNAL_DVBS(x) //x
165*53ee8cc1Swenshuai.xi #define DBG_INTERN_DVBS_TIME(x) //x
166*53ee8cc1Swenshuai.xi #define DBG_INTERN_DVBS_LOCK(x) //x
167*53ee8cc1Swenshuai.xi #define INTERN_DVBS_INTERNAL_DEBUG 0
168*53ee8cc1Swenshuai.xi #endif
169*53ee8cc1Swenshuai.xi //----------------------------------------------------------
170*53ee8cc1Swenshuai.xi #define DBG_DUMP_LOAD_DSP_TIME 0
171*53ee8cc1Swenshuai.xi
172*53ee8cc1Swenshuai.xi
173*53ee8cc1Swenshuai.xi #define SIGNAL_LEVEL_OFFSET 0.00f
174*53ee8cc1Swenshuai.xi #define TAKEOVERPOINT -60.0f
175*53ee8cc1Swenshuai.xi #define TAKEOVERRANGE 0.5f
176*53ee8cc1Swenshuai.xi #define LOG10_OFFSET -0.21f
177*53ee8cc1Swenshuai.xi #define INTERN_DVBS_USE_SAR_3_ENABLE 0
178*53ee8cc1Swenshuai.xi //extern MS_U32 msAPI_Timer_GetTime0(void);
179*53ee8cc1Swenshuai.xi //#define INTERN_DVBS_GET_TIME msAPI_Timer_GetTime0()
180*53ee8cc1Swenshuai.xi
181*53ee8cc1Swenshuai.xi
182*53ee8cc1Swenshuai.xi //Debug Info
183*53ee8cc1Swenshuai.xi //Lock/Done Flag
184*53ee8cc1Swenshuai.xi #define AGC_LOCK 0x28170100
185*53ee8cc1Swenshuai.xi #define DAGC0_LOCK 0x283B0001
186*53ee8cc1Swenshuai.xi #define DAGC1_LOCK 0x285B0001
187*53ee8cc1Swenshuai.xi #define DAGC2_LOCK 0x28620001 //ACIDAGC 1 2
188*53ee8cc1Swenshuai.xi #define DAGC3_LOCK 0x286E0001
189*53ee8cc1Swenshuai.xi #define DCR_LOCK 0x28220100
190*53ee8cc1Swenshuai.xi #define COARSE_SYMBOL_RATE_DONE 0x2A200001 //CSRD 1 2
191*53ee8cc1Swenshuai.xi #define FINE_SYMBOL_RATE_DONE 0x2A200008 //FSRD 1 2
192*53ee8cc1Swenshuai.xi #define POWER4CFO_DONE 0x29280100 //POWER4CFO 1 2
193*53ee8cc1Swenshuai.xi //#define CLOSE_COARSE_CFO_LOCK 0x244E0001
194*53ee8cc1Swenshuai.xi #define TR_LOCK 0x3B0E0100 //TR 1 2
195*53ee8cc1Swenshuai.xi #define PR_LOCK 0x3B401000
196*53ee8cc1Swenshuai.xi #define FRAME_SYNC_ACQUIRE 0x3B300001
197*53ee8cc1Swenshuai.xi #define EQ_LOCK 0x3B5A1000
198*53ee8cc1Swenshuai.xi #define P_SYNC_LOCK 0x22160002
199*53ee8cc1Swenshuai.xi #define IN_SYNC_LOCK 0x3F0D8000
200*53ee8cc1Swenshuai.xi
201*53ee8cc1Swenshuai.xi //AGC / DAGC
202*53ee8cc1Swenshuai.xi #define DEBUG_SEL_IF_AGC_GAIN 0x28260003
203*53ee8cc1Swenshuai.xi #define DEBUG_SEL_AGC_ERR 0x28260004
204*53ee8cc1Swenshuai.xi #define DEBUG_OUT_AGC 0x2828
205*53ee8cc1Swenshuai.xi
206*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC0_GAIN 0x28E80003
207*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC0_ERR 0x28E80001
208*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC0_PEAK_MEAN 0x28E80005
209*53ee8cc1Swenshuai.xi #define DEBUG_OUT_DAGC0 0x2878
210*53ee8cc1Swenshuai.xi
211*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC1_GAIN 0x28E80003//???
212*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC1_ERR 0x28E80001
213*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC1_PEAK_MEAN 0x28E80005
214*53ee8cc1Swenshuai.xi #define DEBUG_OUT_DAGC1 0x28B8
215*53ee8cc1Swenshuai.xi
216*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC2_GAIN 0x28E80003
217*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC2_ERR 0x28E80001
218*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC2_PEAK_MEAN 0x28E80005
219*53ee8cc1Swenshuai.xi #define DEBUG_OUT_DAGC2 0x28C4
220*53ee8cc1Swenshuai.xi
221*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC3_GAIN 0x29DA0003
222*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC3_ERR 0x29DA0001
223*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC3_PEAK_MEAN 0x29DA0005
224*53ee8cc1Swenshuai.xi #define DEBUG_OUT_DAGC3 0x29DC
225*53ee8cc1Swenshuai.xi
226*53ee8cc1Swenshuai.xi #define INNER_DEBUG_SEL_TR 0x24080D00 //TR
227*53ee8cc1Swenshuai.xi #define DEBUG_SEL_TR_SFO_CONVERGE 0x24080B00
228*53ee8cc1Swenshuai.xi #define DEBUG_SEL_TR_INPUT 0x24080F00
229*53ee8cc1Swenshuai.xi
230*53ee8cc1Swenshuai.xi #define FRONTEND_FREEZE_DUMP 0x27028000
231*53ee8cc1Swenshuai.xi #define INNER_FREEZE_DUMP 0x24080010
232*53ee8cc1Swenshuai.xi
233*53ee8cc1Swenshuai.xi #define DCR_OFFSET 0x2740
234*53ee8cc1Swenshuai.xi #define INNER_DEBUG_SEL 0x2408
235*53ee8cc1Swenshuai.xi #define INNEREXT_FINEFE_DBG_OUT0 0x2550
236*53ee8cc1Swenshuai.xi #define INNEREXT_FINEFE_DBG_OUT2 0x2552
237*53ee8cc1Swenshuai.xi #define INNEREXT_FINEFE_KI_FF0 0x2556
238*53ee8cc1Swenshuai.xi #define INNEREXT_FINEFE_KI_FF2 0x2558
239*53ee8cc1Swenshuai.xi #define INNEREXT_FINEFE_KI_FF4 0x255A
240*53ee8cc1Swenshuai.xi #define INNER_PR_DEBUG_OUT0 0x2486
241*53ee8cc1Swenshuai.xi #define INNER_PR_DEBUG_OUT2 0x2488
242*53ee8cc1Swenshuai.xi
243*53ee8cc1Swenshuai.xi #define IIS_COUNT0 0x2746
244*53ee8cc1Swenshuai.xi #define IIS_COUNT2 0x2748
245*53ee8cc1Swenshuai.xi #define IQB_PHASE 0x2766
246*53ee8cc1Swenshuai.xi #define IQB_GAIN 0x2768
247*53ee8cc1Swenshuai.xi #define TR_INDICATOR_FF0 0x2454
248*53ee8cc1Swenshuai.xi #define TR_INDICATOR_FF2 0x2456
249*53ee8cc1Swenshuai.xi #define INNER_TR_LOPF_VALUE_DEBUG0 0x2444
250*53ee8cc1Swenshuai.xi #define INNER_TR_LOPF_VALUE_DEBUG2 0x2446
251*53ee8cc1Swenshuai.xi #define INNER_TR_LOPF_VALUE_DEBUG4 0x2448
252*53ee8cc1Swenshuai.xi //------------------------------------------------------------
253*53ee8cc1Swenshuai.xi //Init Mailbox parameter.
254*53ee8cc1Swenshuai.xi #define INTERN_DVBS_TS_SERIAL_INVERSION 0
255*53ee8cc1Swenshuai.xi //For Parameter Init Setting
256*53ee8cc1Swenshuai.xi #define A_S2_ZIF_EN 0x01 //[0]
257*53ee8cc1Swenshuai.xi #define A_S2_RF_AGC_EN 0x00 //[0]
258*53ee8cc1Swenshuai.xi #define A_S2_DCR_EN 0x00 //[0] 0=Auto :1=Force
259*53ee8cc1Swenshuai.xi #define A_S2_IQB_EN 0x01 //[2]
260*53ee8cc1Swenshuai.xi #define A_S2_IIS_EN 0x00 //[0]
261*53ee8cc1Swenshuai.xi #define A_S2_CCI_EN 0x00 //[0] 0:1=Enable
262*53ee8cc1Swenshuai.xi #define A_S2_FORCE_ACI_SELECT 0xFF //[3:0] 0xFF=OFF(internal default)
263*53ee8cc1Swenshuai.xi #define A_S2_IQ_SWAP 0x01 //[0]
264*53ee8cc1Swenshuai.xi #define A_S2_AGC_REF_EXT_0 0x00 //[7:0] //0x00 0x90
265*53ee8cc1Swenshuai.xi #define A_S2_AGC_REF_EXT_1 0x02 //[11:8] //0x02 0x07
266*53ee8cc1Swenshuai.xi #define A_S2_AGC_K 0x07 //[15:12]
267*53ee8cc1Swenshuai.xi #define A_S2_ADCI_GAIN 0x0F //[4:0]
268*53ee8cc1Swenshuai.xi #define A_S2_ADCQ_GAIN 0x0F //[12:8]
269*53ee8cc1Swenshuai.xi #define A_S2_SRD_SIG_SRCH_RNG 0x6A //[7:0]
270*53ee8cc1Swenshuai.xi #define A_S2_SRD_DC_EXC_RNG 0x16 //[7:0]
271*53ee8cc1Swenshuai.xi //FRONTENDEXT_SRD_FRC_CFO
272*53ee8cc1Swenshuai.xi #define A_S2_FORCE_CFO_0 0x00 //[7:0]
273*53ee8cc1Swenshuai.xi #define A_S2_FORCE_CFO_1 0x00 //[11:8]
274*53ee8cc1Swenshuai.xi #define A_S2_DECIMATION_NUM 0x00 //[3:0] 00=(Internal Default)
275*53ee8cc1Swenshuai.xi #define A_S2_PSD_SMTH_TAP 0x29 //[6:0] Bit7 no define.
276*53ee8cc1Swenshuai.xi //CCI Parameter
277*53ee8cc1Swenshuai.xi //Set_Tuner_BW=(((U16)REG_BASE[DIG_SWUSE1FH]<<8)|REG_BASE[DIG_SWUSE1FL]);
278*53ee8cc1Swenshuai.xi #define A_S2_CCI_FREQN_0_L 0x00 //[7:0]
279*53ee8cc1Swenshuai.xi #define A_S2_CCI_FREQN_0_H 0x00 //[11:8]
280*53ee8cc1Swenshuai.xi #define A_S2_CCI_FREQN_1_L 0x00 //[7:0]
281*53ee8cc1Swenshuai.xi #define A_S2_CCI_FREQN_1_H 0x00 //[11:8]
282*53ee8cc1Swenshuai.xi #define A_S2_CCI_FREQN_2_L 0x00 //[7:0]
283*53ee8cc1Swenshuai.xi #define A_S2_CCI_FREQN_2_H 0x00 //[11:8]
284*53ee8cc1Swenshuai.xi //Inner TR Parameter
285*53ee8cc1Swenshuai.xi #define A_S2_TR_LOPF_KP 0x00 //[4:0] 00=(Internal Default)
286*53ee8cc1Swenshuai.xi #define A_S2_TR_LOPF_KI 0x00 //[4:0] 00=(Internal Default)
287*53ee8cc1Swenshuai.xi //Inner FineFE Parameter
288*53ee8cc1Swenshuai.xi #define A_S2_FINEFE_KI_SWITCH_0 0x00 //[15:12] 00=(Internal Default)
289*53ee8cc1Swenshuai.xi #define A_S2_FINEFE_KI_SWITCH_1 0x00 //[3:0] 00=(Internal Default)
290*53ee8cc1Swenshuai.xi #define A_S2_FINEFE_KI_SWITCH_2 0x00 //[7:4] 00=(Internal Default)
291*53ee8cc1Swenshuai.xi #define A_S2_FINEFE_KI_SWITCH_3 0x00 //[11:8] 00=(Internal Default)
292*53ee8cc1Swenshuai.xi #define A_S2_FINEFE_KI_SWITCH_4 0x00 //[15:12] 00=(Internal Default)
293*53ee8cc1Swenshuai.xi //Inner PR KP Parameter
294*53ee8cc1Swenshuai.xi #define A_S2_PR_KP_SWITCH_0 0x00 //[11:8] 00=(Internal Default)
295*53ee8cc1Swenshuai.xi #define A_S2_PR_KP_SWITCH_1 0x00 //[15:12] 00=(Internal Default)
296*53ee8cc1Swenshuai.xi #define A_S2_PR_KP_SWITCH_2 0x00 //[3:0] 00=(Internal Default)
297*53ee8cc1Swenshuai.xi #define A_S2_PR_KP_SWITCH_3 0x00 //[7:4] 00=(Internal Default)
298*53ee8cc1Swenshuai.xi #define A_S2_PR_KP_SWITCH_4 0x00 //[11:8] 00=(Internal Default)
299*53ee8cc1Swenshuai.xi //Inner FS Parameter
300*53ee8cc1Swenshuai.xi #define A_S2_FS_GAMMA 0x10 //[7:0]
301*53ee8cc1Swenshuai.xi #define A_S2_FS_ALPHA0 0x10 //[7:0]
302*53ee8cc1Swenshuai.xi #define A_S2_FS_ALPHA1 0x10 //[7:0]
303*53ee8cc1Swenshuai.xi #define A_S2_FS_ALPHA2 0x10 //[7:0]
304*53ee8cc1Swenshuai.xi #define A_S2_FS_ALPHA3 0x10 //[7:0]
305*53ee8cc1Swenshuai.xi
306*53ee8cc1Swenshuai.xi #define A_S2_FS_H_MODE_SEL 0x01 //[0]
307*53ee8cc1Swenshuai.xi #define A_S2_FS_OBSWIN 0x08 //[12:8]
308*53ee8cc1Swenshuai.xi #define A_S2_FS_PEAK_DET_TH_L 0x00 //[7:0]
309*53ee8cc1Swenshuai.xi #define A_S2_FS_PEAK_DET_TH_H 0x01 //[15:8]
310*53ee8cc1Swenshuai.xi #define A_S2_FS_CONFIRM_NUM 0x01 //[3:0]
311*53ee8cc1Swenshuai.xi //Inner EQ Parameter
312*53ee8cc1Swenshuai.xi #define A_S2_EQ_MU_FFE_DA 0x00 //[3:0] 00=(Internal Default)
313*53ee8cc1Swenshuai.xi #define A_S2_EQ_MU_FFE_DD 0x00 //[7:4] 00=(Internal Default)
314*53ee8cc1Swenshuai.xi #define A_S2_EQ_ALPHA_SNR_DA 0x00 //[7:4] 00=(Internal Default)
315*53ee8cc1Swenshuai.xi #define A_S2_EQ_ALPHA_SNR_DD 0x00 //[11:8] 00=(Internal Default)
316*53ee8cc1Swenshuai.xi //Outer FEC Parameter
317*53ee8cc1Swenshuai.xi #define A_S2_FEC_ALFA 0x00 //[12:8]
318*53ee8cc1Swenshuai.xi #define A_S2_FEC_BETA 0x01 //[7:4]
319*53ee8cc1Swenshuai.xi #define A_S2_FEC_SCALING_LLR 0x00 //[7:0] 00=(Internal Default)
320*53ee8cc1Swenshuai.xi //TS Parameter
321*53ee8cc1Swenshuai.xi #if INTERN_DVBS_TS_SERIAL_INVERSION
322*53ee8cc1Swenshuai.xi #define A_S2_TS_SERIAL 0x01 //[0]
323*53ee8cc1Swenshuai.xi #else
324*53ee8cc1Swenshuai.xi #define A_S2_TS_SERIAL 0x00 //[0]
325*53ee8cc1Swenshuai.xi #endif
326*53ee8cc1Swenshuai.xi #define A_S2_TS_CLK_RATE 0x00
327*53ee8cc1Swenshuai.xi #define A_S2_TS_OUT_INV 0x00 //[5]
328*53ee8cc1Swenshuai.xi #define A_S2_TS_DATA_SWAP 0x00 //[5]
329*53ee8cc1Swenshuai.xi //Rev Parameter
330*53ee8cc1Swenshuai.xi
331*53ee8cc1Swenshuai.xi #define A_S2_FW_VERSION_L 0x00 //From FW
332*53ee8cc1Swenshuai.xi #define A_S2_FW_VERSION_H 0x00 //From FW
333*53ee8cc1Swenshuai.xi #define A_S2_CHIP_VERSION 0x01
334*53ee8cc1Swenshuai.xi #define A_S2_FS_L 0x00
335*53ee8cc1Swenshuai.xi #define A_S2_FS_H 0x00
336*53ee8cc1Swenshuai.xi #define A_S2_MANUAL_TUNE_SYMBOLRATE_L 0x20
337*53ee8cc1Swenshuai.xi #define A_S2_MANUAL_TUNE_SYMBOLRATE_H 0x4E
338*53ee8cc1Swenshuai.xi
339*53ee8cc1Swenshuai.xi MS_U8 INTERN_DVBS_DSPREG[] =
340*53ee8cc1Swenshuai.xi {
341*53ee8cc1Swenshuai.xi A_S2_ZIF_EN, A_S2_RF_AGC_EN, A_S2_DCR_EN, A_S2_IQB_EN, A_S2_IIS_EN, A_S2_CCI_EN, A_S2_FORCE_ACI_SELECT, A_S2_IQ_SWAP, // 00H ~ 07H
342*53ee8cc1Swenshuai.xi A_S2_AGC_REF_EXT_0, A_S2_AGC_REF_EXT_1, A_S2_AGC_K, A_S2_ADCI_GAIN, A_S2_ADCQ_GAIN, A_S2_SRD_SIG_SRCH_RNG, A_S2_SRD_DC_EXC_RNG, A_S2_FORCE_CFO_0, // 08H ~ 0FH
343*53ee8cc1Swenshuai.xi A_S2_FORCE_CFO_1, A_S2_DECIMATION_NUM, A_S2_PSD_SMTH_TAP, A_S2_CCI_FREQN_0_L, A_S2_CCI_FREQN_0_H, A_S2_CCI_FREQN_1_L, A_S2_CCI_FREQN_1_H, A_S2_CCI_FREQN_2_L, // 10H ~ 17H
344*53ee8cc1Swenshuai.xi A_S2_CCI_FREQN_2_H, A_S2_TR_LOPF_KP, A_S2_TR_LOPF_KI, A_S2_FINEFE_KI_SWITCH_0, A_S2_FINEFE_KI_SWITCH_1, A_S2_FINEFE_KI_SWITCH_2, A_S2_FINEFE_KI_SWITCH_3, A_S2_FINEFE_KI_SWITCH_4, // 18H ~ 1FH
345*53ee8cc1Swenshuai.xi A_S2_PR_KP_SWITCH_0, A_S2_PR_KP_SWITCH_1, A_S2_PR_KP_SWITCH_2, A_S2_PR_KP_SWITCH_3, A_S2_PR_KP_SWITCH_4, A_S2_FS_GAMMA, A_S2_FS_ALPHA0, A_S2_FS_ALPHA1, // 20H ~ 27H
346*53ee8cc1Swenshuai.xi A_S2_FS_ALPHA2, A_S2_FS_ALPHA3, A_S2_FS_H_MODE_SEL, A_S2_FS_OBSWIN, A_S2_FS_PEAK_DET_TH_L, A_S2_FS_PEAK_DET_TH_H, A_S2_FS_CONFIRM_NUM, A_S2_EQ_MU_FFE_DA, // 28h ~ 2FH
347*53ee8cc1Swenshuai.xi A_S2_EQ_MU_FFE_DD, A_S2_EQ_ALPHA_SNR_DA, A_S2_EQ_ALPHA_SNR_DD, A_S2_FEC_ALFA, A_S2_FEC_BETA, A_S2_FEC_SCALING_LLR, A_S2_TS_SERIAL, A_S2_TS_CLK_RATE, // 30H ~ 37H
348*53ee8cc1Swenshuai.xi A_S2_TS_OUT_INV, A_S2_TS_DATA_SWAP, A_S2_FW_VERSION_L, A_S2_FW_VERSION_H, A_S2_CHIP_VERSION, A_S2_FS_L, A_S2_FS_H, A_S2_MANUAL_TUNE_SYMBOLRATE_L, // 38H ~ 3CH
349*53ee8cc1Swenshuai.xi A_S2_MANUAL_TUNE_SYMBOLRATE_H,
350*53ee8cc1Swenshuai.xi };
351*53ee8cc1Swenshuai.xi
352*53ee8cc1Swenshuai.xi /****************************************************************
353*53ee8cc1Swenshuai.xi *Local Variables *
354*53ee8cc1Swenshuai.xi ****************************************************************/
355*53ee8cc1Swenshuai.xi
356*53ee8cc1Swenshuai.xi
357*53ee8cc1Swenshuai.xi static MS_U16 _u16SignalLevel[185][2]=
358*53ee8cc1Swenshuai.xi {//AV2028 SR=22M, 2/3 CN=5.9
359*53ee8cc1Swenshuai.xi {255, 920},{255, 915},{255, 910},{255, 905},{255, 900},{255, 895},{255, 890},{255, 885},{255, 880},{255, 875},
360*53ee8cc1Swenshuai.xi {255, 870},{255, 865},{255, 860},{255, 855},{255, 850},{2121, 845},{3988, 840},{11629, 835},{19270, 830},{19744, 825},
361*53ee8cc1Swenshuai.xi {20218, 820},{20692, 815},{21166, 810},{21640, 805},{22114, 800},{22350, 795},{22587, 790},{22823, 785},{23059, 780},{23296, 775},
362*53ee8cc1Swenshuai.xi {23532, 770},{23790, 765},{24049, 760},{24307, 755},{24566, 750},{24777, 745},{24988, 740},{25198, 735},{25409, 730},{25548, 725},
363*53ee8cc1Swenshuai.xi {25687, 720},{25826, 715},{25965, 710},{26104, 705},{26242, 700},{26311, 695},{26380, 690},{26449, 685},{26517, 680},{26586, 675},
364*53ee8cc1Swenshuai.xi {26655, 670},{26723, 665},{26792, 660},{26861, 655},{26929, 650},{27079, 645},{27229, 640},{27379, 635},{27529, 630},{27733, 625},
365*53ee8cc1Swenshuai.xi {27937, 620},{28140, 615},{28344, 610},{28547, 605},{28751, 600},{28763, 595},{28775, 590},{28787, 585},{28800, 580},{28812, 575},
366*53ee8cc1Swenshuai.xi {28824, 570},{29001, 565},{29178, 560},{29354, 555},{29531, 550},{29603, 545},{29674, 540},{29746, 535},{29818, 530},{29890, 525},
367*53ee8cc1Swenshuai.xi {29961, 520},{30033, 515},{30105, 510},{30177, 505},{30248, 500},{30382, 495},{30497, 490},{30593, 485},{30718, 480},{30803, 475},
368*53ee8cc1Swenshuai.xi {30899, 470},{30981, 465},{31074, 460},{31150, 455},{31238, 450},{31320, 445},{31373, 440},{31459, 435},{31529, 430},{31610, 425},
369*53ee8cc1Swenshuai.xi {31696, 420},{31735, 415},{31794, 410},{31839, 405},{31901, 400},{31974, 395},{32040, 390},{32078, 385},{32156, 380},{32205, 375},
370*53ee8cc1Swenshuai.xi {32255, 370},{32305, 365},{32347, 360},{32389, 355},{32435, 350},{32452, 345},{32470, 340},{32540, 335},{32590, 330},{32650, 325},
371*53ee8cc1Swenshuai.xi {32710, 320},{32740, 315},{32790, 310},{32830, 305},{32870, 300},{32920, 295},{32950, 290},{32990, 285},{33040, 280},{33090, 275},
372*53ee8cc1Swenshuai.xi {33130, 270},{33160, 265},{33180, 260},{33230, 255},{33270, 250},{33300, 245},{33330, 240},{33390, 235},{33440, 230},{33470, 225},
373*53ee8cc1Swenshuai.xi {33480, 220},{33550, 215},{33610, 210},{33650, 205},{33710, 200},{33730, 195},{33790, 190},{33830, 185},{33900, 180},{33940, 175},
374*53ee8cc1Swenshuai.xi {34010, 170},{34050, 165},{34100, 160},{34140, 155},{34190, 150},{34250, 145},{34300, 140},{34390, 135},{34450, 130},{34510, 125},
375*53ee8cc1Swenshuai.xi {34550, 120},{34610, 115},{34670, 110},{34730, 105},{34770, 100},{34850, 95},{34920, 90},{34990, 85},{35040, 80},{35120, 75},
376*53ee8cc1Swenshuai.xi {35140, 70},{35210, 65},{35290, 60},{35320, 55},{35350, 50},{35420, 45},{35500, 40},{35530, 35},{35560, 30},{35600, 25},
377*53ee8cc1Swenshuai.xi {35670, 20},{35700, 15},{35720, 10},{35770, 5},{35780, 0}
378*53ee8cc1Swenshuai.xi };
379*53ee8cc1Swenshuai.xi
380*53ee8cc1Swenshuai.xi /*
381*53ee8cc1Swenshuai.xi {//AV2028 SR=22M, 2/3 CN=5.9
382*53ee8cc1Swenshuai.xi {32100, 920},{32200, 915},{32350, 910},{32390, 905},{32480, 900},{32550, 895},{32620, 890},{32680, 885},{32750, 880},{32830, 875},
383*53ee8cc1Swenshuai.xi {32930, 870},{33010, 865},{33100, 860},{33200, 855},{33310, 850},{33410, 845},{33520, 840},{33640, 835},{33770, 830},{33900, 825},
384*53ee8cc1Swenshuai.xi {34030, 820},{34150, 815},{34290, 810},{34390, 805},{34490, 800},{34580, 795},{34700, 790},{34800, 785},{34880, 780},{34940, 775},
385*53ee8cc1Swenshuai.xi {35030, 770},{35130, 765},{35180, 760},{35260, 755},{35310, 750},{35340, 745},{35380, 740},{35400, 735},{35450, 730},{35550, 725},
386*53ee8cc1Swenshuai.xi {35620, 720},{35700, 715},{35800, 710},{35890, 705},{36000, 700},{36120, 695},{36180, 690},{36280, 685},{36400, 680},{36570, 675},
387*53ee8cc1Swenshuai.xi {36730, 670},{36910, 665},{37060, 660},{37100, 655},{37260, 650},{37340, 645},{37410, 640},{37580, 635},{37670, 630},{37700, 625},
388*53ee8cc1Swenshuai.xi {37750, 620},{37800, 615},{37860, 610},{37980, 605},{38050, 600},{38170, 595},{38370, 590},{38540, 585},{38710, 580},{38870, 575},
389*53ee8cc1Swenshuai.xi {39020, 570},{39070, 565},{39100, 560},{39180, 555},{39280, 550},{39460, 545},{39510, 540},{39600, 535},{39620, 530},{39680, 525},
390*53ee8cc1Swenshuai.xi {39720, 520},{39830, 515},{39880, 510},{39930, 505},{39960, 500},{40000, 495},{40200, 490},{40360, 485},{40540, 480},{40730, 475},
391*53ee8cc1Swenshuai.xi {40880, 470},{41020, 465},{41150, 460},{41280, 455},{41410, 450},{41520, 445},{41620, 440},{41730, 435},{41840, 430},{41930, 425},
392*53ee8cc1Swenshuai.xi {42010, 420},{42100, 415},{42180, 410},{42260, 405},{42350, 400},{42440, 395},{42520, 390},{42580, 385},{42660, 380},{42730, 375},
393*53ee8cc1Swenshuai.xi {42800, 370},{42870, 365},{42940, 360},{43000, 355},{43060, 350},{43130, 345},{43180, 340},{43250, 335},{43310, 330},{43370, 325},
394*53ee8cc1Swenshuai.xi {43420, 320},{43460, 315},{43520, 310},{43570, 305},{43620, 300},{43660, 295},{43710, 290},{43750, 285},{43810, 280},{43860, 275},
395*53ee8cc1Swenshuai.xi {43910, 270},{43940, 265},{43990, 260},{44020, 255},{44060, 250},{44110, 245},{44140, 240},{44190, 235},{44230, 230},{44270, 225},
396*53ee8cc1Swenshuai.xi {44320, 220},{44370, 215},{44400, 210},{44450, 205},{44490, 200},{44530, 195},{44590, 190},{44630, 185},{44660, 180},{44720, 175},
397*53ee8cc1Swenshuai.xi {44750, 170},{44790, 165},{44830, 160},{44880, 155},{44910, 150},{44960, 145},{45000, 140},{45030, 135},{45070, 130},{45100, 125},
398*53ee8cc1Swenshuai.xi {45130, 120},{45160, 115},{45200, 110},{45240, 105},{45270, 100},{45300, 95},{45330, 90},{45360, 85},{45400, 80},{45430, 75},
399*53ee8cc1Swenshuai.xi {45460, 70},{45490, 65},{45530, 60},{45560, 55},{45590, 50},{45630, 45},{45670, 40},{45690, 35},{45740, 30},{45760, 25},
400*53ee8cc1Swenshuai.xi {45800, 20},{45830, 15},{45860, 10},{45880, 5},{45920, 0}
401*53ee8cc1Swenshuai.xi };
402*53ee8cc1Swenshuai.xi */
403*53ee8cc1Swenshuai.xi
404*53ee8cc1Swenshuai.xi MS_U8 u8DemodLockFlag;
405*53ee8cc1Swenshuai.xi MS_U8 modulation_order;
406*53ee8cc1Swenshuai.xi static MS_BOOL _bDemodType=FALSE;//DVBS:FALSE ; S2:TRUE
407*53ee8cc1Swenshuai.xi //static MS_BOOL TPSLock = 0;
408*53ee8cc1Swenshuai.xi static MS_U32 u32ChkScanTimeStartDVBS = 0;
409*53ee8cc1Swenshuai.xi static MS_U8 g_dvbs_lock = 0;
410*53ee8cc1Swenshuai.xi //static float intern_dvb_s_qam_ref[] = {3.0, 0.0, 0.0, 0.0, 0.0, 80.0}; //16q,32q,64q,128q,256q, and others
411*53ee8cc1Swenshuai.xi static MS_U8 _u8_DVBS2_CurrentCodeRate;
412*53ee8cc1Swenshuai.xi static float _fPostBer=0;
413*53ee8cc1Swenshuai.xi static float _f_DVBS_CurrentSNR=0;
414*53ee8cc1Swenshuai.xi static MS_U8 _u8ToneBurstFlag=0;
415*53ee8cc1Swenshuai.xi static MS_U16 _u16BlindScanStartFreq=0;
416*53ee8cc1Swenshuai.xi static MS_U16 _u16BlindScanEndFreq=0;
417*53ee8cc1Swenshuai.xi static MS_U16 _u16TunerCenterFreq=0;
418*53ee8cc1Swenshuai.xi static MS_U16 _u16ChannelInfoIndex=0;
419*53ee8cc1Swenshuai.xi //Debug Only+
420*53ee8cc1Swenshuai.xi static MS_U16 _u16NextCenterFreq=0;
421*53ee8cc1Swenshuai.xi static MS_U16 _u16LockedSymbolRate=0;
422*53ee8cc1Swenshuai.xi static MS_U16 _u16LockedCenterFreq=0;
423*53ee8cc1Swenshuai.xi static MS_U16 _u16PreLockedHB=0;
424*53ee8cc1Swenshuai.xi static MS_U16 _u16PreLockedLB=0;
425*53ee8cc1Swenshuai.xi static MS_U16 _u16CurrentSymbolRate=0;
426*53ee8cc1Swenshuai.xi static MS_S16 _s16CurrentCFO=0;
427*53ee8cc1Swenshuai.xi static MS_U16 _u16CurrentStepSize=0;
428*53ee8cc1Swenshuai.xi //Debug Only-
429*53ee8cc1Swenshuai.xi static MS_U16 _u16ChannelInfoArray[2][1000];
430*53ee8cc1Swenshuai.xi //static MS_U32 _u32CurrentSR=0;
431*53ee8cc1Swenshuai.xi static MS_BOOL _bSerialTS=FALSE;
432*53ee8cc1Swenshuai.xi static MS_BOOL _bTSDataSwap=FALSE;
433*53ee8cc1Swenshuai.xi
434*53ee8cc1Swenshuai.xi //Global Variables
435*53ee8cc1Swenshuai.xi S_CMDPKTREG gsCmdPacketDVBS;
436*53ee8cc1Swenshuai.xi //MS_U8 gCalIdacCh0, gCalIdacCh1;
437*53ee8cc1Swenshuai.xi static MS_BOOL bDMD_DVBS_NoChannelDetectedWithRFPower = FALSE;
438*53ee8cc1Swenshuai.xi static MS_U32 u32DMD_DVBS_NoChannelTimeAccWithRFPower = 0;
439*53ee8cc1Swenshuai.xi extern MS_U32 u32DMD_DVBS2_DJB_START_ADDR;
440*53ee8cc1Swenshuai.xi #ifdef INTERN_DVBS_LOAD_FW_FROM_CODE_MEMORY
441*53ee8cc1Swenshuai.xi MS_U8 INTERN_DVBS_table[] =
442*53ee8cc1Swenshuai.xi {
443*53ee8cc1Swenshuai.xi #include "fwDMD_INTERN_DVBS.dat"
444*53ee8cc1Swenshuai.xi };
445*53ee8cc1Swenshuai.xi
446*53ee8cc1Swenshuai.xi #endif
447*53ee8cc1Swenshuai.xi
448*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Show_Demod_Version(void);
449*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetCurrentModulationType(DMD_DVBS_MODULATION_TYPE *pQAMMode);
450*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetCurrentDemodType(DMD_DVBS_DEMOD_TYPE *pDemodType);
451*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetCurrentDemodCodeRate(DMD_DVBS_CODE_RATE_TYPE *pCodeRate);
452*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetCurrentSymbolRate(MS_U32 *u32SymbolRate);
453*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetCurrentSymbolRateOffset(MS_U16 *pData);
454*53ee8cc1Swenshuai.xi
455*53ee8cc1Swenshuai.xi #if (INTERN_DVBS_INTERNAL_DEBUG)
456*53ee8cc1Swenshuai.xi void INTERN_DVBS_info(void);
457*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Show_AGC_Info(void);
458*53ee8cc1Swenshuai.xi #endif
459*53ee8cc1Swenshuai.xi
460*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
461*53ee8cc1Swenshuai.xi // System Info Function
462*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
463*53ee8cc1Swenshuai.xi //=====================================================================================
INTERN_DVBS_DSPReg_Init(const MS_U8 * u8DVBS_DSPReg,MS_U8 u8Size)464*53ee8cc1Swenshuai.xi MS_U16 INTERN_DVBS_DSPReg_Init(const MS_U8 *u8DVBS_DSPReg, MS_U8 u8Size)
465*53ee8cc1Swenshuai.xi {
466*53ee8cc1Swenshuai.xi #if 0
467*53ee8cc1Swenshuai.xi MS_U8 idx = 0, u8RegRead = 0, u8RegWrite = 0, u8Mask = 0;
468*53ee8cc1Swenshuai.xi #endif
469*53ee8cc1Swenshuai.xi MS_U8 status = true;
470*53ee8cc1Swenshuai.xi #if 0
471*53ee8cc1Swenshuai.xi MS_U16 u16DspAddr = 0;
472*53ee8cc1Swenshuai.xi #endif
473*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_DSPReg_Init\n"));
474*53ee8cc1Swenshuai.xi
475*53ee8cc1Swenshuai.xi #if 0//def MS_DEBUG
476*53ee8cc1Swenshuai.xi {
477*53ee8cc1Swenshuai.xi MS_U8 u8buffer[256];
478*53ee8cc1Swenshuai.xi printf("INTERN_DVBS_DSPReg_Init Reset\n");
479*53ee8cc1Swenshuai.xi for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
480*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteDSPReg(idx, 0);
481*53ee8cc1Swenshuai.xi
482*53ee8cc1Swenshuai.xi for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
483*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(idx, &(u8buffer[idx]));
484*53ee8cc1Swenshuai.xi printf("INTERN_DVBS_DSPReg_Init ReadBack, should be all 0\n");
485*53ee8cc1Swenshuai.xi for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
486*53ee8cc1Swenshuai.xi printf("%x ", u8buffer[idx]);
487*53ee8cc1Swenshuai.xi printf("\n");
488*53ee8cc1Swenshuai.xi
489*53ee8cc1Swenshuai.xi printf("INTERN_DVBS_DSPReg_Init Value\n");
490*53ee8cc1Swenshuai.xi for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
491*53ee8cc1Swenshuai.xi printf("%x ", INTERN_DVBS_DSPREG[idx]);
492*53ee8cc1Swenshuai.xi printf("\n");
493*53ee8cc1Swenshuai.xi }
494*53ee8cc1Swenshuai.xi #endif
495*53ee8cc1Swenshuai.xi
496*53ee8cc1Swenshuai.xi //for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
497*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(idx, INTERN_DVBS_DSPREG[idx]);
498*53ee8cc1Swenshuai.xi
499*53ee8cc1Swenshuai.xi // readback to confirm.
500*53ee8cc1Swenshuai.xi // ~read this to check mailbox initial values
501*53ee8cc1Swenshuai.xi #if 0
502*53ee8cc1Swenshuai.xi for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
503*53ee8cc1Swenshuai.xi {
504*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(idx, &u8RegRead);
505*53ee8cc1Swenshuai.xi if (u8RegRead != INTERN_DVBS_DSPREG[idx])
506*53ee8cc1Swenshuai.xi {
507*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("[Error]INTERN_DVBS_DSPReg_Init, idx=%d, drv_val=0x%x, firmware_val=0x%x\n",idx,INTERN_DVBS_DSPREG[idx],u8RegRead));
508*53ee8cc1Swenshuai.xi }
509*53ee8cc1Swenshuai.xi }
510*53ee8cc1Swenshuai.xi #endif
511*53ee8cc1Swenshuai.xi #if 0
512*53ee8cc1Swenshuai.xi if (u8DVBS_DSPReg != NULL)
513*53ee8cc1Swenshuai.xi {
514*53ee8cc1Swenshuai.xi if (1 == u8DVBS_DSPReg[0])
515*53ee8cc1Swenshuai.xi {
516*53ee8cc1Swenshuai.xi u8DVBS_DSPReg+=2;
517*53ee8cc1Swenshuai.xi for (idx = 0; idx<u8Size; idx++)
518*53ee8cc1Swenshuai.xi {
519*53ee8cc1Swenshuai.xi u16DspAddr = *u8DVBS_DSPReg;
520*53ee8cc1Swenshuai.xi u8DVBS_DSPReg++;
521*53ee8cc1Swenshuai.xi u16DspAddr = (u16DspAddr) + ((*u8DVBS_DSPReg)<<8);
522*53ee8cc1Swenshuai.xi u8DVBS_DSPReg++;
523*53ee8cc1Swenshuai.xi u8Mask = *u8DVBS_DSPReg;
524*53ee8cc1Swenshuai.xi u8DVBS_DSPReg++;
525*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(u16DspAddr, &u8RegRead);
526*53ee8cc1Swenshuai.xi u8RegWrite = (u8RegRead & (~u8Mask)) | ((*u8DVBS_DSPReg) & (u8Mask));
527*53ee8cc1Swenshuai.xi u8DVBS_DSPReg++;
528*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("DSP addr:%x mask:%x read:%x write:%x\n", u16DspAddr, u8Mask, u8RegRead, u8RegWrite));
529*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(u16DspAddr, u8RegWrite);
530*53ee8cc1Swenshuai.xi }
531*53ee8cc1Swenshuai.xi }
532*53ee8cc1Swenshuai.xi else
533*53ee8cc1Swenshuai.xi {
534*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("FATAL: parameter version incorrect\n"));
535*53ee8cc1Swenshuai.xi }
536*53ee8cc1Swenshuai.xi }
537*53ee8cc1Swenshuai.xi #endif
538*53ee8cc1Swenshuai.xi #if 0//def MS_DEBUG
539*53ee8cc1Swenshuai.xi {
540*53ee8cc1Swenshuai.xi MS_U8 u8buffer[256];
541*53ee8cc1Swenshuai.xi for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
542*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(idx, &(u8buffer[idx]));
543*53ee8cc1Swenshuai.xi printf("INTERN_DVBC_DSPReg_Init ReadBack\n");
544*53ee8cc1Swenshuai.xi for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
545*53ee8cc1Swenshuai.xi printf("%x ", u8buffer[idx]);
546*53ee8cc1Swenshuai.xi printf("\n");
547*53ee8cc1Swenshuai.xi }
548*53ee8cc1Swenshuai.xi #endif
549*53ee8cc1Swenshuai.xi
550*53ee8cc1Swenshuai.xi #if 0//def MS_DEBUG
551*53ee8cc1Swenshuai.xi {
552*53ee8cc1Swenshuai.xi MS_U8 u8buffer[256];
553*53ee8cc1Swenshuai.xi for (idx = 0; idx<128; idx++)
554*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(0x2380+idx, &(u8buffer[idx]));
555*53ee8cc1Swenshuai.xi printf("INTERN_DVBS_DSPReg_Init ReadReg 0x2000~0x207F\n");
556*53ee8cc1Swenshuai.xi for (idx = 0; idx<128; idx++)
557*53ee8cc1Swenshuai.xi {
558*53ee8cc1Swenshuai.xi printf("%x ", u8buffer[idx]);
559*53ee8cc1Swenshuai.xi if ((idx & 0xF) == 0xF) printf("\n");
560*53ee8cc1Swenshuai.xi }
561*53ee8cc1Swenshuai.xi printf("\n");
562*53ee8cc1Swenshuai.xi }
563*53ee8cc1Swenshuai.xi #endif
564*53ee8cc1Swenshuai.xi return status;
565*53ee8cc1Swenshuai.xi }
566*53ee8cc1Swenshuai.xi
567*53ee8cc1Swenshuai.xi /***********************************************************************************
568*53ee8cc1Swenshuai.xi Subject: Command Packet Interface
569*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_Cmd_Packet_Send
570*53ee8cc1Swenshuai.xi Parmeter:
571*53ee8cc1Swenshuai.xi Return: MS_BOOL
572*53ee8cc1Swenshuai.xi Remark:
573*53ee8cc1Swenshuai.xi ************************************************************************************/
INTERN_DVBS_Cmd_Packet_Send(S_CMDPKTREG * pCmdPacket,MS_U8 param_cnt)574*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Cmd_Packet_Send(S_CMDPKTREG* pCmdPacket, MS_U8 param_cnt)
575*53ee8cc1Swenshuai.xi {
576*53ee8cc1Swenshuai.xi MS_U8 status = true, indx;
577*53ee8cc1Swenshuai.xi MS_U8 reg_val, timeout = 0;
578*53ee8cc1Swenshuai.xi return true;
579*53ee8cc1Swenshuai.xi
580*53ee8cc1Swenshuai.xi // ==== Command Phase ===================
581*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("--->INTERN_DVBS (cmd=0x%x)(0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,) \n",pCmdPacket->cmd_code,
582*53ee8cc1Swenshuai.xi pCmdPacket->param[0],pCmdPacket->param[1],
583*53ee8cc1Swenshuai.xi pCmdPacket->param[2],pCmdPacket->param[3],
584*53ee8cc1Swenshuai.xi pCmdPacket->param[4],pCmdPacket->param[5] ));
585*53ee8cc1Swenshuai.xi
586*53ee8cc1Swenshuai.xi // wait _BIT_END clear
587*53ee8cc1Swenshuai.xi do
588*53ee8cc1Swenshuai.xi {
589*53ee8cc1Swenshuai.xi reg_val = HAL_DMD_RIU_ReadByte(REG_CMD_CTRL);
590*53ee8cc1Swenshuai.xi if((reg_val & _BIT_END) != _BIT_END)
591*53ee8cc1Swenshuai.xi {
592*53ee8cc1Swenshuai.xi break;
593*53ee8cc1Swenshuai.xi }
594*53ee8cc1Swenshuai.xi MsOS_DelayTask(5);
595*53ee8cc1Swenshuai.xi if (timeout > 200)
596*53ee8cc1Swenshuai.xi {
597*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("---> INTERN_DVBS_Cmd_Packet_Send fail on 'wait _BIT_END clear' \n"));
598*53ee8cc1Swenshuai.xi return false;
599*53ee8cc1Swenshuai.xi }
600*53ee8cc1Swenshuai.xi timeout++;
601*53ee8cc1Swenshuai.xi } while (1);
602*53ee8cc1Swenshuai.xi
603*53ee8cc1Swenshuai.xi // set cmd_3:0 and _BIT_START
604*53ee8cc1Swenshuai.xi reg_val = HAL_DMD_RIU_ReadByte(REG_CMD_CTRL);
605*53ee8cc1Swenshuai.xi reg_val = (reg_val & 0x0f)|(pCmdPacket->cmd_code << 4)|_BIT_START;
606*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(REG_CMD_CTRL, reg_val);
607*53ee8cc1Swenshuai.xi
608*53ee8cc1Swenshuai.xi
609*53ee8cc1Swenshuai.xi //DBG_INTERN_DVBS(printf("demod_config: cmd_code = %bx\n", pCmdPacket->cmd_code));
610*53ee8cc1Swenshuai.xi // wait _BIT_START clear
611*53ee8cc1Swenshuai.xi do
612*53ee8cc1Swenshuai.xi {
613*53ee8cc1Swenshuai.xi reg_val = HAL_DMD_RIU_ReadByte(REG_CMD_CTRL);
614*53ee8cc1Swenshuai.xi if((reg_val & _BIT_START) != _BIT_START)
615*53ee8cc1Swenshuai.xi {
616*53ee8cc1Swenshuai.xi break;
617*53ee8cc1Swenshuai.xi }
618*53ee8cc1Swenshuai.xi MsOS_DelayTask(10);
619*53ee8cc1Swenshuai.xi if (timeout > 200)
620*53ee8cc1Swenshuai.xi {
621*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("---> INTERN_DVBS_Cmd_Packet_Send fail on 'wait _BIT_START clear' \n"));
622*53ee8cc1Swenshuai.xi return false;
623*53ee8cc1Swenshuai.xi }
624*53ee8cc1Swenshuai.xi timeout++;
625*53ee8cc1Swenshuai.xi } while (1);
626*53ee8cc1Swenshuai.xi
627*53ee8cc1Swenshuai.xi // ==== Data Phase ======================
628*53ee8cc1Swenshuai.xi
629*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(REG_CMD_ADDR, 0x00);
630*53ee8cc1Swenshuai.xi
631*53ee8cc1Swenshuai.xi for (indx = 0; indx < param_cnt; indx++)
632*53ee8cc1Swenshuai.xi {
633*53ee8cc1Swenshuai.xi reg_val = HAL_DMD_RIU_ReadByte(REG_CMD_ADDR);
634*53ee8cc1Swenshuai.xi //DBG_INTERN_DVBS(printf("demod_config: param[%bd] = %bx\n", reg_val, pCmdPacket->param[indx]));
635*53ee8cc1Swenshuai.xi
636*53ee8cc1Swenshuai.xi // set param[indx] and _BIT_DRQ
637*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(REG_CMD_DATA, pCmdPacket->param[indx]);
638*53ee8cc1Swenshuai.xi reg_val = HAL_DMD_RIU_ReadByte(REG_DTA_CTRL);
639*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(REG_DTA_CTRL, reg_val|_BIT_DRQ);
640*53ee8cc1Swenshuai.xi
641*53ee8cc1Swenshuai.xi // wait _BIT_DRQ clear
642*53ee8cc1Swenshuai.xi do
643*53ee8cc1Swenshuai.xi {
644*53ee8cc1Swenshuai.xi reg_val = HAL_DMD_RIU_ReadByte(REG_DTA_CTRL);
645*53ee8cc1Swenshuai.xi if ((reg_val & _BIT_DRQ) != _BIT_DRQ)
646*53ee8cc1Swenshuai.xi {
647*53ee8cc1Swenshuai.xi break;
648*53ee8cc1Swenshuai.xi }
649*53ee8cc1Swenshuai.xi MsOS_DelayTask(5);
650*53ee8cc1Swenshuai.xi if (timeout > 200)
651*53ee8cc1Swenshuai.xi {
652*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("---> INTERN_DVBS_Cmd_Packet_Send fail on 'wait _BIT_DRQ clear' \n"));
653*53ee8cc1Swenshuai.xi return false;
654*53ee8cc1Swenshuai.xi }
655*53ee8cc1Swenshuai.xi timeout++;
656*53ee8cc1Swenshuai.xi } while (1);
657*53ee8cc1Swenshuai.xi }
658*53ee8cc1Swenshuai.xi
659*53ee8cc1Swenshuai.xi // ==== End Phase =======================
660*53ee8cc1Swenshuai.xi
661*53ee8cc1Swenshuai.xi // set _BIT_END to finish command
662*53ee8cc1Swenshuai.xi reg_val = HAL_DMD_RIU_ReadByte(REG_CMD_CTRL);
663*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(REG_CMD_CTRL, reg_val|_BIT_END);
664*53ee8cc1Swenshuai.xi
665*53ee8cc1Swenshuai.xi return status;
666*53ee8cc1Swenshuai.xi }
667*53ee8cc1Swenshuai.xi
668*53ee8cc1Swenshuai.xi /***********************************************************************************
669*53ee8cc1Swenshuai.xi Subject: Command Packet Interface
670*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_Cmd_Packet_Exe_Check
671*53ee8cc1Swenshuai.xi Parmeter:
672*53ee8cc1Swenshuai.xi Return: MS_BOOL
673*53ee8cc1Swenshuai.xi Remark:
674*53ee8cc1Swenshuai.xi ************************************************************************************/
INTERN_DVBS_Cmd_Packet_Exe_Check(MS_BOOL * cmd_done)675*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Cmd_Packet_Exe_Check(MS_BOOL* cmd_done)
676*53ee8cc1Swenshuai.xi {
677*53ee8cc1Swenshuai.xi return TRUE;
678*53ee8cc1Swenshuai.xi }
679*53ee8cc1Swenshuai.xi
680*53ee8cc1Swenshuai.xi /***********************************************************************************
681*53ee8cc1Swenshuai.xi Subject: SoftStop
682*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_SoftStop
683*53ee8cc1Swenshuai.xi Parmeter:
684*53ee8cc1Swenshuai.xi Return: MS_BOOL
685*53ee8cc1Swenshuai.xi Remark:
686*53ee8cc1Swenshuai.xi ************************************************************************************/
INTERN_DVBS_SoftStop(void)687*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_SoftStop ( void )
688*53ee8cc1Swenshuai.xi {
689*53ee8cc1Swenshuai.xi #if 1
690*53ee8cc1Swenshuai.xi MS_U16 u16WaitCnt=0;
691*53ee8cc1Swenshuai.xi
692*53ee8cc1Swenshuai.xi if (HAL_DMD_RIU_ReadByte(MBRegBase + 0x00))
693*53ee8cc1Swenshuai.xi {
694*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">> MB Busy!\n"));
695*53ee8cc1Swenshuai.xi return FALSE;
696*53ee8cc1Swenshuai.xi }
697*53ee8cc1Swenshuai.xi
698*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(MBRegBase + 0x00, 0xA5); // MB_CNTL set read mode
699*53ee8cc1Swenshuai.xi
700*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103483, 0x02); // assert interrupt to VD MCU51
701*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103483, 0x00); // de-assert interrupt to VD MCU51
702*53ee8cc1Swenshuai.xi
703*53ee8cc1Swenshuai.xi while(HAL_DMD_RIU_ReadByte(MBRegBase + 0x00)!= 0x5A) // wait MB_CNTL set done
704*53ee8cc1Swenshuai.xi {
705*53ee8cc1Swenshuai.xi if (u16WaitCnt++ >= 0xFFF)// 0xFF)
706*53ee8cc1Swenshuai.xi {
707*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">> DVBT SoftStop Fail!\n"));
708*53ee8cc1Swenshuai.xi return FALSE;
709*53ee8cc1Swenshuai.xi }
710*53ee8cc1Swenshuai.xi }
711*53ee8cc1Swenshuai.xi
712*53ee8cc1Swenshuai.xi //HAL_DMD_RIU_WriteByte(0x103460, 0x01); // reset VD_MCU
713*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(MBRegBase + 0x00, 0x00); // MB_CNTL clear
714*53ee8cc1Swenshuai.xi #endif
715*53ee8cc1Swenshuai.xi return TRUE;
716*53ee8cc1Swenshuai.xi }
717*53ee8cc1Swenshuai.xi
718*53ee8cc1Swenshuai.xi /***********************************************************************************
719*53ee8cc1Swenshuai.xi Subject: Reset
720*53ee8cc1Swenshuai.xi Function: INTERN_DVBC_Reset
721*53ee8cc1Swenshuai.xi Parmeter:
722*53ee8cc1Swenshuai.xi Return: MS_BOOL
723*53ee8cc1Swenshuai.xi Remark:
724*53ee8cc1Swenshuai.xi ************************************************************************************/
725*53ee8cc1Swenshuai.xi extern void HAL_SYS_DMD_VD_MBX_DVB_WaitHandShake(void);
726*53ee8cc1Swenshuai.xi
INTERN_DVBS_Reset(void)727*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Reset ( void )// no midify
728*53ee8cc1Swenshuai.xi {
729*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" @INTERN_DVBS_reset\n"));
730*53ee8cc1Swenshuai.xi
731*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS_TIME(printf("INTERN_DVBS_Reset, t = %d\n",MsOS_GetSystemTime()));
732*53ee8cc1Swenshuai.xi
733*53ee8cc1Swenshuai.xi //INTERN_DVBS_SoftStop();
734*53ee8cc1Swenshuai.xi
735*53ee8cc1Swenshuai.xi
736*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x00, 0x01); // reset DMD_MCU
737*53ee8cc1Swenshuai.xi
738*53ee8cc1Swenshuai.xi MsOS_DelayTask(1);
739*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(MBRegBase + 0x00 , 0x00); // clear MB_CNTL
740*53ee8cc1Swenshuai.xi
741*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x00, 0x00);
742*53ee8cc1Swenshuai.xi MsOS_DelayTask(5);
743*53ee8cc1Swenshuai.xi
744*53ee8cc1Swenshuai.xi HAL_SYS_DMD_VD_MBX_DVB_WaitHandShake();
745*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(MBRegBase + 0x00 , 0x00);
746*53ee8cc1Swenshuai.xi
747*53ee8cc1Swenshuai.xi u32ChkScanTimeStartDVBS = MsOS_GetSystemTime();
748*53ee8cc1Swenshuai.xi g_dvbs_lock = 0;
749*53ee8cc1Swenshuai.xi
750*53ee8cc1Swenshuai.xi return TRUE;
751*53ee8cc1Swenshuai.xi }
INTERN_DVBS_PowerSaving(void)752*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_PowerSaving ( void )
753*53ee8cc1Swenshuai.xi {
754*53ee8cc1Swenshuai.xi MS_U8 i;
755*53ee8cc1Swenshuai.xi
756*53ee8cc1Swenshuai.xi //---P2=0---/;
757*53ee8cc1Swenshuai.xi for( i = 0; i < 231; i++){
758*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(0x350A + i, 0x11);}
759*53ee8cc1Swenshuai.xi // `M3_RIU_W((`RIUBASE_DMD_CLKGEN>>1)+7'h40, 2'b01, 16'h0000);
760*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(0x3580, 0x00);
761*53ee8cc1Swenshuai.xi
762*53ee8cc1Swenshuai.xi //---P2=1---/;
763*53ee8cc1Swenshuai.xi for( i = 0; i < 146; i++){
764*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(0xA202 + i, 0x11);}
765*53ee8cc1Swenshuai.xi // `M3_RIU_W((`RIUBASE_DMD_CLKGEN_EXT>>1)+7'h14, 2'b01, 16'h0003);
766*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(0xA228, 0x03);
767*53ee8cc1Swenshuai.xi
768*53ee8cc1Swenshuai.xi // ================================================================
769*53ee8cc1Swenshuai.xi // DEMOD_1 CLOCK GATED
770*53ee8cc1Swenshuai.xi // ================================================================
771*53ee8cc1Swenshuai.xi //---P2=0---/;
772*53ee8cc1Swenshuai.xi for( i = 0; i <= 177; i++){
773*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(0x3635+ i, 0x11);}
774*53ee8cc1Swenshuai.xi // `M3_RIU_W((`RIUBASE_DMD_CLKGEN_1>>1)+7'h1b, 2'b01, 16'h000f);
775*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(0x3636, 0x0f);
776*53ee8cc1Swenshuai.xi
777*53ee8cc1Swenshuai.xi
778*53ee8cc1Swenshuai.xi // ================================================================
779*53ee8cc1Swenshuai.xi // SRAM Power Down
780*53ee8cc1Swenshuai.xi // ================================================================
781*53ee8cc1Swenshuai.xi // [ 0]reg_force_allsram_on = 1'b0
782*53ee8cc1Swenshuai.xi // [ 1]reg_force_allsram_on_demod_1 = 1'b0
783*53ee8cc1Swenshuai.xi // [ 2] = 1'b0
784*53ee8cc1Swenshuai.xi // [ 3]reg_demod_1_sram_sd_en = 1'b0
785*53ee8cc1Swenshuai.xi // [ 4]reg_manhattan_sram_share_sram_sd_en = 1'b0
786*53ee8cc1Swenshuai.xi // [ 5]reg_mulan_sram_share_sram_sd_en = 1'b0
787*53ee8cc1Swenshuai.xi // [ 6]reg_dvb_frontend_sram_sd_en = 1'b0
788*53ee8cc1Swenshuai.xi // [ 7]reg_dtmb_sram_sd_en = 1'b0
789*53ee8cc1Swenshuai.xi // [ 8]reg_dvbt_sram_sd_en = 1'b0
790*53ee8cc1Swenshuai.xi // [ 9]reg_atsc_sram_sd_en = 1'b0
791*53ee8cc1Swenshuai.xi // [10]reg_vif_sram_sd_en = 1'b0
792*53ee8cc1Swenshuai.xi // [11]reg_backend_sram_sd_en = 1'b0
793*53ee8cc1Swenshuai.xi // [12]reg_adcdma_sram_sd_en = 1'b0
794*53ee8cc1Swenshuai.xi // [13]reg_isdbt_sram_sd_en = 1'b0
795*53ee8cc1Swenshuai.xi // [14]reg_dvbt2_sram_sd_en = 1'b0
796*53ee8cc1Swenshuai.xi // [15]reg_dvbs2_sram_sd_en = 1'b0
797*53ee8cc1Swenshuai.xi // `M3_RIU_W( (`RIUBASE_DMD_TOP>>1)+7'h48, 2'b11, 16'hfffc);
798*53ee8cc1Swenshuai.xi // `M3_RIU_W( (`RIUBASE_DMD_TOP>>1)+7'h48, 2'b11, 16'hfffc);
799*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg (0x2091, 0xff);
800*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg (0x2090, 0xfc);
801*53ee8cc1Swenshuai.xi
802*53ee8cc1Swenshuai.xi // all controlled by reg_mulan_sram_share_sram_sd_en
803*53ee8cc1Swenshuai.xi // reg_sram_pwr_ctrl_sel[15:0]
804*53ee8cc1Swenshuai.xi // `M3_RIU_W( (`RIUBASE_DMD_TOP_EXT>>1)+7'h70, 2'b11, 16'h0000);
805*53ee8cc1Swenshuai.xi // `M3_RIU_W( (`RIUBASE_DMD_TOP_EXT>>1)+7'h70, 2'b11, 16'h0000);
806*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg (0xA1e1, 0x00);
807*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg (0xA1e0, 0x00);
808*53ee8cc1Swenshuai.xi // reg_sram_pwr_ctrl_sel[31:16]
809*53ee8cc1Swenshuai.xi // `M3_RIU_W( (`RIUBASE_DMD_TOP_EXT>>1)+7'h71, 2'b11, 16'h0000);
810*53ee8cc1Swenshuai.xi // `M3_RIU_W( (`RIUBASE_DMD_TOP_EXT>>1)+7'h71, 2'b11, 16'h0000);
811*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg (0xA1e3, 0x00);
812*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg (0xA1e2, 0x00);
813*53ee8cc1Swenshuai.xi // reg_sram_pwr_ctrl_sel[47:32]
814*53ee8cc1Swenshuai.xi // `M3_RIU_W( (`RIUBASE_DMD_TOP_EXT>>1)+7'h72, 2'b11, 16'h0000);
815*53ee8cc1Swenshuai.xi // `M3_RIU_W( (`RIUBASE_DMD_TOP_EXT>>1)+7'h72, 2'b11, 16'h0000);
816*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg (0xA1e5, 0x00);
817*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg (0xA1e4, 0x00);
818*53ee8cc1Swenshuai.xi // reg_sram_pwr_ctrl_sel[63:48]
819*53ee8cc1Swenshuai.xi // `M3_RIU_W( (`RIUBASE_DMD_TOP_EXT>>1)+7'h73, 2'b11, 16'h0000);
820*53ee8cc1Swenshuai.xi // `M3_RIU_W( (`RIUBASE_DMD_TOP_EXT>>1)+7'h73, 2'b11, 16'h0000);
821*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg (0xA1e7, 0x00);
822*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg (0xA1e6, 0x00);
823*53ee8cc1Swenshuai.xi // reg_sram_pwr_ctrl_sel[79:64]
824*53ee8cc1Swenshuai.xi // `M3_RIU_W( (`RIUBASE_DMD_TOP_EXT>>1)+7'h74, 2'b11, 16'h0000);
825*53ee8cc1Swenshuai.xi // `M3_RIU_W( (`RIUBASE_DMD_TOP_EXT>>1)+7'h74, 2'b11, 16'h0000);
826*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg (0xA1e9, 0x00);
827*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg (0xA1e8, 0x00);
828*53ee8cc1Swenshuai.xi
829*53ee8cc1Swenshuai.xi // $display("================================================================");
830*53ee8cc1Swenshuai.xi // $display("Reset");
831*53ee8cc1Swenshuai.xi // $display("================================================================");
832*53ee8cc1Swenshuai.xi // Release DVBT2 & dmd_ana_misc Reset
833*53ee8cc1Swenshuai.xi // [0] reg_atsc_on[0]
834*53ee8cc1Swenshuai.xi // [1] reg_dvbt_on[1]
835*53ee8cc1Swenshuai.xi // [2] reg_vif_on[2]
836*53ee8cc1Swenshuai.xi // [3] reg_isdbt_on[3]
837*53ee8cc1Swenshuai.xi // [4] reg_atsc_rst[4]
838*53ee8cc1Swenshuai.xi // [5] reg_dvbt_rst[5]
839*53ee8cc1Swenshuai.xi // [6] reg_vif_rst[6]
840*53ee8cc1Swenshuai.xi // [7] reg_get_adc[7]
841*53ee8cc1Swenshuai.xi // [8] reg_ce8x_gate[8]
842*53ee8cc1Swenshuai.xi // [9] reg_ce_gate[9]
843*53ee8cc1Swenshuai.xi // [10] reg_dac_clk_inv[10]
844*53ee8cc1Swenshuai.xi // [11] reg_vdmcu_clock_faster[11]
845*53ee8cc1Swenshuai.xi // [12] reg_vif_if_agc_sel[12]
846*53ee8cc1Swenshuai.xi // [13] reg_dmd_ana_misc_rst[13]
847*53ee8cc1Swenshuai.xi // [14] reg_adcd_wmask[14]
848*53ee8cc1Swenshuai.xi // [15] reg_sif_only[15]
849*53ee8cc1Swenshuai.xi // `M3_RIU_W( (`RIUBASE_DMD_TOP>>1)+7'h01, 2'b11, 16'h2070);
850*53ee8cc1Swenshuai.xi
851*53ee8cc1Swenshuai.xi // Release DTMB Reset & Enable Manhattan frontend Enable
852*53ee8cc1Swenshuai.xi // [0] reg_dtmb_on
853*53ee8cc1Swenshuai.xi // [1] reg_dtmb_rst
854*53ee8cc1Swenshuai.xi // [4] reg_manhattan_frontend_on //No used @ Maserati
855*53ee8cc1Swenshuai.xi // [5] reg_manhattan_dvb_srd_sw_rst (1'b1 for DTMB)
856*53ee8cc1Swenshuai.xi // `M3_RIU_W( (`RIUBASE_DMD_TOP>>1)+7'h02, 2'b01, 16'h0022);
857*53ee8cc1Swenshuai.xi
858*53ee8cc1Swenshuai.xi // ================================================================
859*53ee8cc1Swenshuai.xi // MPLL Power Down
860*53ee8cc1Swenshuai.xi // ================================================================
861*53ee8cc1Swenshuai.xi // Set MPLL_ADC_DIV_SE
862*53ee8cc1Swenshuai.xi // [0] : reg_mpll_adc_clk_cc_en
863*53ee8cc1Swenshuai.xi // [1] : reg_adc_clk_pd
864*53ee8cc1Swenshuai.xi // [2] : reg_mpll_div2_pd
865*53ee8cc1Swenshuai.xi // [3] : reg_mpll_div3_pd
866*53ee8cc1Swenshuai.xi // [4] : reg_mpll_div4_pd
867*53ee8cc1Swenshuai.xi // [5] : reg_mpll_div8_pd
868*53ee8cc1Swenshuai.xi // [6] : reg_mpll_div10_pd
869*53ee8cc1Swenshuai.xi // [7] : reg_mpll_div17_pd
870*53ee8cc1Swenshuai.xi // [13:8]: reg_mpll_adc_div_sel
871*53ee8cc1Swenshuai.xi // `M3_RIU_W((`RIUBASE_DMD_ANA_MISC_M3>>1)+7'h30, 2'b01, 16'h12fe);//Different
872*53ee8cc1Swenshuai.xi // `M3_RIU_W((`RIUBASE_DMD_ANA_MISC_M3>>1)+7'h30, 2'b01, 16'h12fe);//Different
873*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg (0x2e60, 0xfe);
874*53ee8cc1Swenshuai.xi
875*53ee8cc1Swenshuai.xi // [2:0] : reg_mpll_ictrl set 3'h3
876*53ee8cc1Swenshuai.xi // [3] : reg_mpll_in_sel set 1'h0
877*53ee8cc1Swenshuai.xi // [4] : reg_mpll_xtal2adc_sel if 1'h1 ADC_CLK=XTAL.
878*53ee8cc1Swenshuai.xi // [5] : reg_mpll_xtal2next_pll_sel
879*53ee8cc1Swenshuai.xi // [6] : reg_mpll_vco_offset(T8), reg_mpll_adc_clk_cc_mode(T9)
880*53ee8cc1Swenshuai.xi // [7] : reg_mpll_pd set 1'b1
881*53ee8cc1Swenshuai.xi // [8] : reg_xtal_en set 1'b0
882*53ee8cc1Swenshuai.xi // [10:9]: reg_xtal_sel set 2'h3 XTAL strength
883*53ee8cc1Swenshuai.xi // [11] : reg_mpll_porst set 1'b1
884*53ee8cc1Swenshuai.xi // [12] : reg_mpll_reset set 1'b1
885*53ee8cc1Swenshuai.xi // [13] : reg_pd_dmpll_clk XTAL to MPLL clock reference power down
886*53ee8cc1Swenshuai.xi // [14] : reg_mpll_pdiv_clk_pd set 1'b0
887*53ee8cc1Swenshuai.xi // Set MPLL_RESET=MPLL_PORST=1
888*53ee8cc1Swenshuai.xi // `M3_RIU_W((`RIUBASE_DMD_ANA_MISC_M3>>1)+7'h35, 2'b11, 16'h1e83);//Different
889*53ee8cc1Swenshuai.xi // `M3_RIU_W((`RIUBASE_DMD_ANA_MISC_M3>>1)+7'h35, 2'b11, 16'h1e83);//Different
890*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg (0x2e6b, 0x1e);
891*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg (0x2e6a, 0x83);
892*53ee8cc1Swenshuai.xi
893*53ee8cc1Swenshuai.xi return TRUE;
894*53ee8cc1Swenshuai.xi }
895*53ee8cc1Swenshuai.xi /***********************************************************************************
896*53ee8cc1Swenshuai.xi Subject: Exit
897*53ee8cc1Swenshuai.xi Function: INTERN_DVBC_Exit
898*53ee8cc1Swenshuai.xi Parmeter:
899*53ee8cc1Swenshuai.xi Return: MS_BOOL
900*53ee8cc1Swenshuai.xi Remark:
901*53ee8cc1Swenshuai.xi ************************************************************************************/
INTERN_DVBS_Exit(void)902*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Exit ( void )
903*53ee8cc1Swenshuai.xi {
904*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
905*53ee8cc1Swenshuai.xi MS_U8 u8Data_temp=0;
906*53ee8cc1Swenshuai.xi
907*53ee8cc1Swenshuai.xi u8Data_temp=HAL_DMD_RIU_ReadByte(0x101E39);
908*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x101E39, 0);
909*53ee8cc1Swenshuai.xi
910*53ee8cc1Swenshuai.xi u8Data=HAL_DMD_RIU_ReadByte(0x1128C0);
911*53ee8cc1Swenshuai.xi u8Data&=~(0x02);
912*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x1128C0, u8Data);//revert IQ Swap status
913*53ee8cc1Swenshuai.xi
914*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x101E39, u8Data_temp);
915*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" @INTERN_DVBS_Exit\n"));
916*53ee8cc1Swenshuai.xi INTERN_DVBS_SoftStop();
917*53ee8cc1Swenshuai.xi INTERN_DVBS_PowerSaving();
918*53ee8cc1Swenshuai.xi
919*53ee8cc1Swenshuai.xi return TRUE;
920*53ee8cc1Swenshuai.xi }
921*53ee8cc1Swenshuai.xi
922*53ee8cc1Swenshuai.xi /***********************************************************************************
923*53ee8cc1Swenshuai.xi Subject: Load DSP code to chip
924*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_LoadDSPCode
925*53ee8cc1Swenshuai.xi Parmeter:
926*53ee8cc1Swenshuai.xi Return: MS_BOOL
927*53ee8cc1Swenshuai.xi Remark:
928*53ee8cc1Swenshuai.xi ************************************************************************************/
INTERN_DVBS_LoadDSPCode(void)929*53ee8cc1Swenshuai.xi static MS_BOOL INTERN_DVBS_LoadDSPCode(void)
930*53ee8cc1Swenshuai.xi {
931*53ee8cc1Swenshuai.xi MS_U8 udata = 0x00;
932*53ee8cc1Swenshuai.xi MS_U16 i;
933*53ee8cc1Swenshuai.xi MS_U16 fail_cnt=0;
934*53ee8cc1Swenshuai.xi
935*53ee8cc1Swenshuai.xi #if (DBG_DUMP_LOAD_DSP_TIME==1)
936*53ee8cc1Swenshuai.xi MS_U32 u32Time;
937*53ee8cc1Swenshuai.xi #endif
938*53ee8cc1Swenshuai.xi
939*53ee8cc1Swenshuai.xi //MDrv_Sys_DisableWatchDog();
940*53ee8cc1Swenshuai.xi /*
941*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103480, 0x01);//reference GUI//reset
942*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103481, 0x00);
943*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103480, 0x00);
944*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103483, 0x50);
945*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103483, 0x51);
946*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103484, 0x00);
947*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103485, 0x00);
948*53ee8cc1Swenshuai.xi */
949*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x00, 0x01); // reset VD_MCU
950*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x01, 0x00); // disable SRAM
951*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, 0x50); // enable "vdmcu51_if"
952*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, 0x51); // enable auto-increase
953*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x04, 0x00); // sram address low byte
954*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x05, 0x00); // sram address high byte
955*53ee8cc1Swenshuai.xi
956*53ee8cc1Swenshuai.xi //// Load code thru VDMCU_IF ////
957*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">Load Code.....\n"));
958*53ee8cc1Swenshuai.xi for ( i = 0; i < sizeof(INTERN_DVBS_table); i++)
959*53ee8cc1Swenshuai.xi {
960*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x10348C, INTERN_DVBS_table[i]);
961*53ee8cc1Swenshuai.xi //HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x0C, INTERN_DVBS_table[i]); // write data to VD MCU 51 code sram
962*53ee8cc1Swenshuai.xi }
963*53ee8cc1Swenshuai.xi
964*53ee8cc1Swenshuai.xi //// Content verification ////
965*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">Verify Code...\n"));
966*53ee8cc1Swenshuai.xi
967*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x04, 0x00); // sram address low byte
968*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x05, 0x00); // sram address high byte
969*53ee8cc1Swenshuai.xi
970*53ee8cc1Swenshuai.xi for ( i = 0; i < sizeof(INTERN_DVBS_table); i++)
971*53ee8cc1Swenshuai.xi {
972*53ee8cc1Swenshuai.xi udata = HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x10); // read sram data
973*53ee8cc1Swenshuai.xi if (udata != INTERN_DVBS_table[i])
974*53ee8cc1Swenshuai.xi {
975*53ee8cc1Swenshuai.xi printf(">fail add = 0x%x\n", i);
976*53ee8cc1Swenshuai.xi printf(">code = 0x%x\n", INTERN_DVBS_table[i]);
977*53ee8cc1Swenshuai.xi printf(">data = 0x%x\n", udata);
978*53ee8cc1Swenshuai.xi
979*53ee8cc1Swenshuai.xi if (fail_cnt > 10)
980*53ee8cc1Swenshuai.xi {
981*53ee8cc1Swenshuai.xi printf(">DVB-S DSP Loadcode fail!");
982*53ee8cc1Swenshuai.xi return false;
983*53ee8cc1Swenshuai.xi }
984*53ee8cc1Swenshuai.xi fail_cnt++;
985*53ee8cc1Swenshuai.xi }
986*53ee8cc1Swenshuai.xi }
987*53ee8cc1Swenshuai.xi
988*53ee8cc1Swenshuai.xi #if 0 //use for Kris DJB with VCM
989*53ee8cc1Swenshuai.xi //====================================================================
990*53ee8cc1Swenshuai.xi // add S2 DRAM bufer start address into fixed location
991*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x04, 0x30); // sram address low byte; 0x30 is defined in FW
992*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x05, 0x00); // sram address high byte
993*53ee8cc1Swenshuai.xi
994*53ee8cc1Swenshuai.xi //0x30~0x33
995*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, (MS_U8)u32DMD_DVBS2_DJB_START_ADDR);
996*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, (MS_U8)(u32DMD_DVBS2_DJB_START_ADDR >> 8));
997*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, (MS_U8)(u32DMD_DVBS2_DJB_START_ADDR >> 16));
998*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, (MS_U8)(u32DMD_DVBS2_DJB_START_ADDR >> 24));
999*53ee8cc1Swenshuai.xi
1000*53ee8cc1Swenshuai.xi printf("@@@@@ share dram address = 0x %x \n ",u32DMD_DVBS2_DJB_START_ADDR);
1001*53ee8cc1Swenshuai.xi //=====================================================================
1002*53ee8cc1Swenshuai.xi #endif
1003*53ee8cc1Swenshuai.xi
1004*53ee8cc1Swenshuai.xi /*
1005*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103483, 0x50);
1006*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103483, 0x00);
1007*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103480, 0x01);
1008*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103481, 0x01);
1009*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103480, 0x00);
1010*53ee8cc1Swenshuai.xi */
1011*53ee8cc1Swenshuai.xi
1012*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, 0x50); // diable auto-increase
1013*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, 0x00); // disable "vdmcu51_if"
1014*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x01, 0x01); // enable SRAM
1015*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x00, 0x00); // release VD_MCU
1016*53ee8cc1Swenshuai.xi
1017*53ee8cc1Swenshuai.xi
1018*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">DSP Loadcode done."));
1019*53ee8cc1Swenshuai.xi #if 0
1020*53ee8cc1Swenshuai.xi INTERN_DVBS_Config(6875, 128, 36125, 0,1);
1021*53ee8cc1Swenshuai.xi INTERN_DVBS_Active(ENABLE);
1022*53ee8cc1Swenshuai.xi while(1);
1023*53ee8cc1Swenshuai.xi #endif
1024*53ee8cc1Swenshuai.xi //HAL_DMD_RIU_WriteByte(0x101E3E, 0x04); // DVBT = BIT1 -> 0x02
1025*53ee8cc1Swenshuai.xi
1026*53ee8cc1Swenshuai.xi return TRUE;
1027*53ee8cc1Swenshuai.xi }
1028*53ee8cc1Swenshuai.xi
1029*53ee8cc1Swenshuai.xi /***********************************************************************************
1030*53ee8cc1Swenshuai.xi Subject: DVB-S CLKGEN initialized function
1031*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_Power_On_Initialization
1032*53ee8cc1Swenshuai.xi Parmeter:
1033*53ee8cc1Swenshuai.xi Return: MS_BOOL
1034*53ee8cc1Swenshuai.xi Remark:
1035*53ee8cc1Swenshuai.xi ************************************************************************************/
INTERN_DVBS_InitClkgen(MS_BOOL bRFAGCTristateEnable)1036*53ee8cc1Swenshuai.xi void INTERN_DVBS_InitClkgen(MS_BOOL bRFAGCTristateEnable)
1037*53ee8cc1Swenshuai.xi {
1038*53ee8cc1Swenshuai.xi MS_U8 u8Temp=0;
1039*53ee8cc1Swenshuai.xi // This file is translated by Steven Hung's riu2script.pl
1040*53ee8cc1Swenshuai.xi
1041*53ee8cc1Swenshuai.xi // ==============================================================
1042*53ee8cc1Swenshuai.xi // Start demod top initial setting by HK MCU ......
1043*53ee8cc1Swenshuai.xi // ==============================================================
1044*53ee8cc1Swenshuai.xi // [8] : reg_chiptop_dummy_0 (reg_dmdtop_dmd_sel)
1045*53ee8cc1Swenshuai.xi // 1'b0->reg_DMDTOP control by HK_MCU.
1046*53ee8cc1Swenshuai.xi // 1'b1->reg_DMDTOP control by DMD_MCU.
1047*53ee8cc1Swenshuai.xi // [9] : reg_chiptop_dummy_0 (reg_dmd_ana_regsel)
1048*53ee8cc1Swenshuai.xi // 1'b0->reg_DMDANA control by HK_MCU.
1049*53ee8cc1Swenshuai.xi // 1'b1->reg_DMDANA control by DMD_MCU.
1050*53ee8cc1Swenshuai.xi // select HK MCU ......
1051*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CHIP>>1)+7'h1c, 2'b10, 16'h0000);
1052*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CHIP>>1)+7'h1c, 2'b10, 16'h0000);
1053*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x101e39,0x00);
1054*53ee8cc1Swenshuai.xi
1055*53ee8cc1Swenshuai.xi
1056*53ee8cc1Swenshuai.xi // ==============================================================
1057*53ee8cc1Swenshuai.xi // Start TOP CLKGEN initial setting ......
1058*53ee8cc1Swenshuai.xi // ==============================================================
1059*53ee8cc1Swenshuai.xi // CLK_DMDMCU clock setting
1060*53ee8cc1Swenshuai.xi // reg_ckg_dmdmcu@0x0f[4:0]
1061*53ee8cc1Swenshuai.xi // [0] : disable clock
1062*53ee8cc1Swenshuai.xi // [1] : invert clock
1063*53ee8cc1Swenshuai.xi // [4:2]:
1064*53ee8cc1Swenshuai.xi // 000:170 MHz(MPLL_DIV_BUF)
1065*53ee8cc1Swenshuai.xi // 001:160MHz
1066*53ee8cc1Swenshuai.xi // 010:144MHz
1067*53ee8cc1Swenshuai.xi // 011:123MHz
1068*53ee8cc1Swenshuai.xi // 100:108MHz (Kriti:DVBT2)
1069*53ee8cc1Swenshuai.xi // 101:mem_clcok
1070*53ee8cc1Swenshuai.xi // 110:mem_clock div 2
1071*53ee8cc1Swenshuai.xi // 111:select XTAL
1072*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h0f, 2'b11, 16'h001c);
1073*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h0f, 2'b11, 16'h001c);
1074*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x10331f, 0x00);
1075*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
1076*53ee8cc1Swenshuai.xi
1077*53ee8cc1Swenshuai.xi
1078*53ee8cc1Swenshuai.xi // set parallel ts clock
1079*53ee8cc1Swenshuai.xi // [11] : reg_ckg_demod_test_in_en = 0
1080*53ee8cc1Swenshuai.xi // 0: select internal ADC CLK
1081*53ee8cc1Swenshuai.xi // 1: select external test-in clock
1082*53ee8cc1Swenshuai.xi // [10] : reg_ckg_dvbtm_ts_out_mode = 1
1083*53ee8cc1Swenshuai.xi // 0: select gated clock
1084*53ee8cc1Swenshuai.xi // 1: select free-run clock
1085*53ee8cc1Swenshuai.xi // [9] : reg_ckg_atsc_dvbtc_ts_inv = 0
1086*53ee8cc1Swenshuai.xi // 0: normal phase to pad
1087*53ee8cc1Swenshuai.xi // 1: invert phase to pad
1088*53ee8cc1Swenshuai.xi // [8] : reg_ckg_atsc_dvb_div_sel = 1
1089*53ee8cc1Swenshuai.xi // 0: select clk_dmplldiv5
1090*53ee8cc1Swenshuai.xi // 1: select clk_dmplldiv3
1091*53ee8cc1Swenshuai.xi // [4:0]: reg_ckg_dvbtm_ts_divnum = 11
1092*53ee8cc1Swenshuai.xi // Demod TS output clock phase tuning number
1093*53ee8cc1Swenshuai.xi // If (reg_ckg_tsout_ph_tun_num == reg_ckg_dvbtm_ts_divnum),
1094*53ee8cc1Swenshuai.xi // Demod TS output clock is equal Demod TS internal working clock.
1095*53ee8cc1Swenshuai.xi // => TS clock = (864/3)/(2*(5+1)) = 24MHz
1096*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h00, 2'b11, 16'h0511);
1097*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h00, 2'b11, 16'h0511);
1098*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103301, 0x05);
1099*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103300, 0x05);
1100*53ee8cc1Swenshuai.xi
1101*53ee8cc1Swenshuai.xi
1102*53ee8cc1Swenshuai.xi // enable DVBTC ts clock
1103*53ee8cc1Swenshuai.xi // [11:8]: reg_ckg_dvbtc_ts
1104*53ee8cc1Swenshuai.xi // [8] : disable clock
1105*53ee8cc1Swenshuai.xi // [9] : invert clock
1106*53ee8cc1Swenshuai.xi // [11:10]: Select clock source
1107*53ee8cc1Swenshuai.xi // 00:clk_atsc_dvb_div
1108*53ee8cc1Swenshuai.xi // 01:62 MHz
1109*53ee8cc1Swenshuai.xi // 10:54 MHz
1110*53ee8cc1Swenshuai.xi // 11:reserved
1111*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h04, 2'b11, 16'h0000);
1112*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h04, 2'b11, 16'h0000);
1113*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103309, 0x00);
1114*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103308, 0x00);
1115*53ee8cc1Swenshuai.xi
1116*53ee8cc1Swenshuai.xi
1117*53ee8cc1Swenshuai.xi // enable dvbc adc clock
1118*53ee8cc1Swenshuai.xi // [3:0]: reg_ckg_dvbtc_adc
1119*53ee8cc1Swenshuai.xi // [0] : disable clock
1120*53ee8cc1Swenshuai.xi // [1] : invert clock
1121*53ee8cc1Swenshuai.xi // [3:2]: Select clock source => for demod clkgen clk_dvbtc_adc
1122*53ee8cc1Swenshuai.xi // 00: clk_dmdadc
1123*53ee8cc1Swenshuai.xi // 01: clk_dmdadc_div2
1124*53ee8cc1Swenshuai.xi // 10: clk_dmdadc_div4
1125*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1126*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h0a, 2'b11, 16'h0000);
1127*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h0a, 2'b11, 16'h0000);
1128*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103315, 0x00);
1129*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103314, 0x00);
1130*53ee8cc1Swenshuai.xi
1131*53ee8cc1Swenshuai.xi
1132*53ee8cc1Swenshuai.xi // ==============================================================
1133*53ee8cc1Swenshuai.xi // Start demod_0 CLKGEN setting ......
1134*53ee8cc1Swenshuai.xi // ==============================================================
1135*53ee8cc1Swenshuai.xi // enable atsc_adcd_sync clock
1136*53ee8cc1Swenshuai.xi // [3:0] : reg_ckg_atsc_adcd_sync
1137*53ee8cc1Swenshuai.xi // [0] : disable clock
1138*53ee8cc1Swenshuai.xi // [1] : invert clock
1139*53ee8cc1Swenshuai.xi // [3:2]: Select clock source
1140*53ee8cc1Swenshuai.xi // 00: clk_dmdadc_sync
1141*53ee8cc1Swenshuai.xi // 01: 1'b0
1142*53ee8cc1Swenshuai.xi // 10: 1'b0
1143*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1144*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h05, 2'b11, 16'h0000);
1145*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h05, 2'b11, 16'h0000);
1146*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
1147*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f0a, 0x00);
1148*53ee8cc1Swenshuai.xi
1149*53ee8cc1Swenshuai.xi // DVBS2
1150*53ee8cc1Swenshuai.xi // @0x350c
1151*53ee8cc1Swenshuai.xi // [3:0] : reg_ckg_dvbs_outer1x
1152*53ee8cc1Swenshuai.xi // [0] : disable clock
1153*53ee8cc1Swenshuai.xi // [1] : invert clock
1154*53ee8cc1Swenshuai.xi // [3:2]: Select clock source
1155*53ee8cc1Swenshuai.xi // 00: adc_clk_buf
1156*53ee8cc1Swenshuai.xi // 01: dvb_clk86_buf
1157*53ee8cc1Swenshuai.xi // 10: dvb_clk43_buf
1158*53ee8cc1Swenshuai.xi // 11: 1'b0
1159*53ee8cc1Swenshuai.xi // [6:4] : reg_ckg_dvbs_outer2x
1160*53ee8cc1Swenshuai.xi // [4] : disable clock
1161*53ee8cc1Swenshuai.xi // [5] : invert clock
1162*53ee8cc1Swenshuai.xi // [6] : Select clock source
1163*53ee8cc1Swenshuai.xi // 00: adc_clk_buf
1164*53ee8cc1Swenshuai.xi // 01: 1'b0
1165*53ee8cc1Swenshuai.xi // 10: 1'b0
1166*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1167*53ee8cc1Swenshuai.xi // [10:8]: reg_ckg_dvbs2_inner
1168*53ee8cc1Swenshuai.xi // [8] : disable clock
1169*53ee8cc1Swenshuai.xi // [9] : invert clock
1170*53ee8cc1Swenshuai.xi // [10]: Select clock source
1171*53ee8cc1Swenshuai.xi // 00: adc_clk_buf
1172*53ee8cc1Swenshuai.xi // 01: 1'b0
1173*53ee8cc1Swenshuai.xi // 10: 1'b0
1174*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1175*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h0c, 2'b11, 16'h0000);
1176*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h0c, 2'b11, 16'h0000);
1177*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
1178*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
1179*53ee8cc1Swenshuai.xi
1180*53ee8cc1Swenshuai.xi
1181*53ee8cc1Swenshuai.xi // DVBS2
1182*53ee8cc1Swenshuai.xi // @0x350d
1183*53ee8cc1Swenshuai.xi // [11:8]: reg_ckg_dvbs2_oppro
1184*53ee8cc1Swenshuai.xi // [8] : disable clock
1185*53ee8cc1Swenshuai.xi // [9] : invert clock
1186*53ee8cc1Swenshuai.xi // [11:10]: Select clock source
1187*53ee8cc1Swenshuai.xi // 00: mpll_clk144_buf
1188*53ee8cc1Swenshuai.xi // 01: mpll_clk96_buf
1189*53ee8cc1Swenshuai.xi // 10: mpll_clk72_buf
1190*53ee8cc1Swenshuai.xi // 11: mpll_clk48_buf
1191*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h0d, 2'b11, 16'h0000);
1192*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h0d, 2'b11, 16'h0000);
1193*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f1b, 0x00);
1194*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f1a, 0x00);
1195*53ee8cc1Swenshuai.xi
1196*53ee8cc1Swenshuai.xi
1197*53ee8cc1Swenshuai.xi // @0x3510
1198*53ee8cc1Swenshuai.xi // [3:0] : reg_ckg_dvbtm_adc
1199*53ee8cc1Swenshuai.xi // N/A
1200*53ee8cc1Swenshuai.xi // [6:4] : reg_ckg_dvbt_inner1x
1201*53ee8cc1Swenshuai.xi // [4] : disable clock
1202*53ee8cc1Swenshuai.xi // [5] : invert clock
1203*53ee8cc1Swenshuai.xi // [6] : Select clock source
1204*53ee8cc1Swenshuai.xi // 00: dvb_clk24_buf
1205*53ee8cc1Swenshuai.xi // 01: dvb_clk21p5_buf
1206*53ee8cc1Swenshuai.xi // 10: 1'b0
1207*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1208*53ee8cc1Swenshuai.xi // [10:8] reg_ckg_dvbt_inner2x
1209*53ee8cc1Swenshuai.xi // [8] : disable clock
1210*53ee8cc1Swenshuai.xi // [9] : invert clock
1211*53ee8cc1Swenshuai.xi // [10]: Select clock source
1212*53ee8cc1Swenshuai.xi // 00: dvb_clk48_buf
1213*53ee8cc1Swenshuai.xi // 01: dvb_clk43_buf
1214*53ee8cc1Swenshuai.xi // 10: 1'b0
1215*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1216*53ee8cc1Swenshuai.xi // [14:12] reg_ckg_dvbt_inner4x
1217*53ee8cc1Swenshuai.xi // [12]: disable clock
1218*53ee8cc1Swenshuai.xi // [13]: invert clock
1219*53ee8cc1Swenshuai.xi // [14]: Select clock source
1220*53ee8cc1Swenshuai.xi // 00: dvb_clk96_buf
1221*53ee8cc1Swenshuai.xi // 01: dvb_clk86_buf
1222*53ee8cc1Swenshuai.xi // 10: 1'b0
1223*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1224*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h10, 2'b11, 16'h1110);
1225*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h10, 2'b11, 16'h1110);
1226*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f21, 0x11);
1227*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f20, 0x10);
1228*53ee8cc1Swenshuai.xi
1229*53ee8cc1Swenshuai.xi // @0x3511
1230*53ee8cc1Swenshuai.xi // [2:0] : reg_ckg_dvbt_outer1x
1231*53ee8cc1Swenshuai.xi // [0] : disable clock
1232*53ee8cc1Swenshuai.xi // [1] : invert clock
1233*53ee8cc1Swenshuai.xi // [2] : Select clock source
1234*53ee8cc1Swenshuai.xi // 00: dvb_clk48_buf
1235*53ee8cc1Swenshuai.xi // 01: dvb_clk43_buf
1236*53ee8cc1Swenshuai.xi // 10: 1'b0
1237*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1238*53ee8cc1Swenshuai.xi // [6:4] : reg_ckg_dvbt_outer2x
1239*53ee8cc1Swenshuai.xi // [4] : disable clock
1240*53ee8cc1Swenshuai.xi // [5] : invert clock
1241*53ee8cc1Swenshuai.xi // [6] : Select clock source
1242*53ee8cc1Swenshuai.xi // 00: dvb_clk96_buf
1243*53ee8cc1Swenshuai.xi // 01: dvb_clk86_buf
1244*53ee8cc1Swenshuai.xi // 10: 1'b0
1245*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1246*53ee8cc1Swenshuai.xi // [11:8]: reg_ckg_dvbtc_outer2x
1247*53ee8cc1Swenshuai.xi // [8] : disable clock
1248*53ee8cc1Swenshuai.xi // [9] : invert clock
1249*53ee8cc1Swenshuai.xi // [11:10]: Select clock source
1250*53ee8cc1Swenshuai.xi // 00: mpll_clk57p6_buf
1251*53ee8cc1Swenshuai.xi // 01: dvb_clk43_buf
1252*53ee8cc1Swenshuai.xi // 10: dvb_clk86_buf
1253*53ee8cc1Swenshuai.xi // 11: dvb_clk96_buf
1254*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h11, 2'b11, 16'h0c11);
1255*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h11, 2'b11, 16'h0c11);
1256*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f23, 0x0c);
1257*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f22, 0x11);
1258*53ee8cc1Swenshuai.xi
1259*53ee8cc1Swenshuai.xi
1260*53ee8cc1Swenshuai.xi // @0x3512
1261*53ee8cc1Swenshuai.xi // [11:8]: reg_ckg_acifir
1262*53ee8cc1Swenshuai.xi // [8] : disable clock
1263*53ee8cc1Swenshuai.xi // [9] : invert clock
1264*53ee8cc1Swenshuai.xi // [11:10]: Select clock source
1265*53ee8cc1Swenshuai.xi // 000: 1'b0
1266*53ee8cc1Swenshuai.xi // 001: clk_dmdadc
1267*53ee8cc1Swenshuai.xi // 010: clk_vif_ssc_mux
1268*53ee8cc1Swenshuai.xi // 011: 1'b0
1269*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h12, 2'b10, 16'h0400);
1270*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h12, 2'b10, 16'h0400);
1271*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f25, 0x04);
1272*53ee8cc1Swenshuai.xi
1273*53ee8cc1Swenshuai.xi
1274*53ee8cc1Swenshuai.xi // @0x3514
1275*53ee8cc1Swenshuai.xi // [12:8]: reg_ckg_dvbtm_sram_t1o2x_t22x
1276*53ee8cc1Swenshuai.xi // [8] : disable clock
1277*53ee8cc1Swenshuai.xi // [9] : invert clock
1278*53ee8cc1Swenshuai.xi // [12:10]: Select clock source
1279*53ee8cc1Swenshuai.xi // 000: dvb_clk48_buf
1280*53ee8cc1Swenshuai.xi // 001: dvb_clk43_buf
1281*53ee8cc1Swenshuai.xi // 010: 1'b0
1282*53ee8cc1Swenshuai.xi // 011: 1'b0
1283*53ee8cc1Swenshuai.xi // 100: 1'b0
1284*53ee8cc1Swenshuai.xi // 101: 1'b0
1285*53ee8cc1Swenshuai.xi // 110: 1'b0
1286*53ee8cc1Swenshuai.xi // 111: 1'b0
1287*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h14, 2'b11, 16'h0000);
1288*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h14, 2'b11, 16'h0000);
1289*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f29, 0x00);
1290*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f28, 0x00);
1291*53ee8cc1Swenshuai.xi
1292*53ee8cc1Swenshuai.xi
1293*53ee8cc1Swenshuai.xi // @0x3516
1294*53ee8cc1Swenshuai.xi // [8:4] : reg_ckg_dvbtm_sram_adc_t22x
1295*53ee8cc1Swenshuai.xi // [4] : disable clock
1296*53ee8cc1Swenshuai.xi // [5] : invert clock
1297*53ee8cc1Swenshuai.xi // [8:6]: Select clock source
1298*53ee8cc1Swenshuai.xi // 000: dvb_clk48_buf
1299*53ee8cc1Swenshuai.xi // 001: dvb_clk43_buf
1300*53ee8cc1Swenshuai.xi // 010: 1'b0
1301*53ee8cc1Swenshuai.xi // 011: 1'b0
1302*53ee8cc1Swenshuai.xi // 100: adc_clk_buf
1303*53ee8cc1Swenshuai.xi // 101: 1'b0
1304*53ee8cc1Swenshuai.xi // 110: 1'b0
1305*53ee8cc1Swenshuai.xi // 111: 1'b0
1306*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h16, 2'b11, 16'h0001);
1307*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h16, 2'b11, 16'h0001);
1308*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f2d, 0x00);
1309*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f2c, 0x01);
1310*53ee8cc1Swenshuai.xi
1311*53ee8cc1Swenshuai.xi
1312*53ee8cc1Swenshuai.xi // @0x3517
1313*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbtm_sram_t12x_t22x
1314*53ee8cc1Swenshuai.xi // [0] : disable clock
1315*53ee8cc1Swenshuai.xi // [1] : invert clock
1316*53ee8cc1Swenshuai.xi // [4:2]: Select clock source
1317*53ee8cc1Swenshuai.xi // 000: dvb_clk48_buf
1318*53ee8cc1Swenshuai.xi // 001: dvb_clk43_buf
1319*53ee8cc1Swenshuai.xi // 010: 1'b0
1320*53ee8cc1Swenshuai.xi // 011: 1'b0
1321*53ee8cc1Swenshuai.xi // 100: 1'b0
1322*53ee8cc1Swenshuai.xi // 101: 1'b0
1323*53ee8cc1Swenshuai.xi // 110: 1'b0
1324*53ee8cc1Swenshuai.xi // 111: 1'b0
1325*53ee8cc1Swenshuai.xi // [12:8] reg_ckg_dvbtm_sram_t12x_t24x
1326*53ee8cc1Swenshuai.xi // [8] : disable clock
1327*53ee8cc1Swenshuai.xi // [9] : invert clock
1328*53ee8cc1Swenshuai.xi // [12:10]: Select clock source
1329*53ee8cc1Swenshuai.xi // 000: dvb_clk96_buf
1330*53ee8cc1Swenshuai.xi // 001: dvb_clk86_buf
1331*53ee8cc1Swenshuai.xi // 010: dvb_clk48_buf
1332*53ee8cc1Swenshuai.xi // 011: dvb_clk43_buf
1333*53ee8cc1Swenshuai.xi // 100: 1'b0
1334*53ee8cc1Swenshuai.xi // 101: 1'b0
1335*53ee8cc1Swenshuai.xi // 110: 1'b0
1336*53ee8cc1Swenshuai.xi // 111: 1'b0
1337*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h17, 2'b11, 16'h0000);
1338*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h17, 2'b11, 16'h0000);
1339*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f2f, 0x00);
1340*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f2e, 0x00);
1341*53ee8cc1Swenshuai.xi
1342*53ee8cc1Swenshuai.xi
1343*53ee8cc1Swenshuai.xi // @0x3518
1344*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbtm_sram_t14x_t24x
1345*53ee8cc1Swenshuai.xi // [0] : disable clock
1346*53ee8cc1Swenshuai.xi // [1] : invert clock
1347*53ee8cc1Swenshuai.xi // [4:2]: Select clock source
1348*53ee8cc1Swenshuai.xi // 000: dvb_clk96_buf
1349*53ee8cc1Swenshuai.xi // 001: dvb_clk96_buf
1350*53ee8cc1Swenshuai.xi // 010: 1'b0
1351*53ee8cc1Swenshuai.xi // 011: 1'b0
1352*53ee8cc1Swenshuai.xi // 100: 1'b0
1353*53ee8cc1Swenshuai.xi // 101: 1'b0
1354*53ee8cc1Swenshuai.xi // 110: 1'b0
1355*53ee8cc1Swenshuai.xi // 111: 1'b0
1356*53ee8cc1Swenshuai.xi // [12:8]: reg_ckg_dvbtm_ts_in
1357*53ee8cc1Swenshuai.xi // [8] : disable clock
1358*53ee8cc1Swenshuai.xi // [9] : invert clock
1359*53ee8cc1Swenshuai.xi // [12:10]: Select clock source
1360*53ee8cc1Swenshuai.xi // 000: clk_dvbtc_rs_p
1361*53ee8cc1Swenshuai.xi // 001: dvb_clk48_buf
1362*53ee8cc1Swenshuai.xi // 010: dvb_clk43_buf
1363*53ee8cc1Swenshuai.xi // 011: clk_dvbs_outer1x_pre_mux4
1364*53ee8cc1Swenshuai.xi // 100: clk_dvbs2_oppro_pre_mux4
1365*53ee8cc1Swenshuai.xi // 101: 1'b0
1366*53ee8cc1Swenshuai.xi // 110: 1'b0
1367*53ee8cc1Swenshuai.xi // 111: 1'b0
1368*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h18, 2'b11, 16'h0001);
1369*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h18, 2'b11, 16'h0001);
1370*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f31, 0x00);
1371*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f30, 0x01);
1372*53ee8cc1Swenshuai.xi
1373*53ee8cc1Swenshuai.xi
1374*53ee8cc1Swenshuai.xi // @0x3519
1375*53ee8cc1Swenshuai.xi // [2:0] : reg_ckg_tdp_jl_inner1x
1376*53ee8cc1Swenshuai.xi // [0] : disable clock
1377*53ee8cc1Swenshuai.xi // [1] : invert clock
1378*53ee8cc1Swenshuai.xi // [2] : Select clock source
1379*53ee8cc1Swenshuai.xi // 00: dvb_clk24_buf
1380*53ee8cc1Swenshuai.xi // 01: dvb_clk21p5_buf
1381*53ee8cc1Swenshuai.xi // 10: 1'b0
1382*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1383*53ee8cc1Swenshuai.xi // [6:4] : reg_ckg_tdp_jl_inner4x
1384*53ee8cc1Swenshuai.xi // [4] : disable clock
1385*53ee8cc1Swenshuai.xi // [5] : invert clock
1386*53ee8cc1Swenshuai.xi // [6] : Select clock source
1387*53ee8cc1Swenshuai.xi // 00: dvb_clk96_buf
1388*53ee8cc1Swenshuai.xi // 01: dvb_clk86_buf
1389*53ee8cc1Swenshuai.xi // 10: 1'b0
1390*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1391*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h19, 2'b11, 16'h3c00);
1392*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h19, 2'b11, 16'h3c00);
1393*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f33, 0x3c);
1394*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f32, 0x00);
1395*53ee8cc1Swenshuai.xi
1396*53ee8cc1Swenshuai.xi
1397*53ee8cc1Swenshuai.xi // @0x351a
1398*53ee8cc1Swenshuai.xi // [6:4] : reg_ckg_dvbt2_inner1x
1399*53ee8cc1Swenshuai.xi // [4] : disable clock
1400*53ee8cc1Swenshuai.xi // [5] : invert clock
1401*53ee8cc1Swenshuai.xi // [6] : Select clock source
1402*53ee8cc1Swenshuai.xi // 00: dvb_clk96_buf
1403*53ee8cc1Swenshuai.xi // 01: dvb_clk86_buf
1404*53ee8cc1Swenshuai.xi // 10: 1'b0
1405*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1406*53ee8cc1Swenshuai.xi // [10:8]: reg_ckg_dvbt2_inner2x
1407*53ee8cc1Swenshuai.xi // [8] : disable clock
1408*53ee8cc1Swenshuai.xi // [9] : invert clock
1409*53ee8cc1Swenshuai.xi // [10]: Select clock source
1410*53ee8cc1Swenshuai.xi // 00: dvb_clk48_buf
1411*53ee8cc1Swenshuai.xi // 01: dvb_clk43_buf
1412*53ee8cc1Swenshuai.xi // 10: 1'b0
1413*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1414*53ee8cc1Swenshuai.xi // [14:12]:reg_ckg_dvbt2_inner4x
1415*53ee8cc1Swenshuai.xi // [12] : disable clock
1416*53ee8cc1Swenshuai.xi // [13] : invert clock
1417*53ee8cc1Swenshuai.xi // [14] : Select clock source
1418*53ee8cc1Swenshuai.xi // 00: dvb_clk96_buf
1419*53ee8cc1Swenshuai.xi // 01: dvb_clk86_buf
1420*53ee8cc1Swenshuai.xi // 10: 1'b0
1421*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1422*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h1a, 2'b11, 16'h0000);
1423*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h1a, 2'b11, 16'h0000);
1424*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f35, 0x00);
1425*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f34, 0x00);
1426*53ee8cc1Swenshuai.xi
1427*53ee8cc1Swenshuai.xi
1428*53ee8cc1Swenshuai.xi // @0x351b
1429*53ee8cc1Swenshuai.xi // [1:0] : reg_ckg_dvbt2_ldpc
1430*53ee8cc1Swenshuai.xi // DVBT2 LDPC gated clock control register
1431*53ee8cc1Swenshuai.xi // [0] = 1:clock enable.
1432*53ee8cc1Swenshuai.xi // [1] = 1:manual mode.
1433*53ee8cc1Swenshuai.xi // [3:2] : reg_ckg_dvbt2_bch
1434*53ee8cc1Swenshuai.xi // DVBT2 BCH gated clock control register;
1435*53ee8cc1Swenshuai.xi // [0] = 1:clock enable
1436*53ee8cc1Swenshuai.xi // [1] = 1:manual mode.
1437*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h1b, 2'b11, 16'h0011);
1438*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h1b, 2'b11, 16'h0011);
1439*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f37, 0x00);
1440*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f36, 0x11);
1441*53ee8cc1Swenshuai.xi
1442*53ee8cc1Swenshuai.xi
1443*53ee8cc1Swenshuai.xi // @0x351d
1444*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbtm_adc_eq_1x
1445*53ee8cc1Swenshuai.xi // [0] : disable clock
1446*53ee8cc1Swenshuai.xi // [1] : invert clock
1447*53ee8cc1Swenshuai.xi // [2] : Select clock source
1448*53ee8cc1Swenshuai.xi // 00: adc_clk_buf
1449*53ee8cc1Swenshuai.xi // 01: 1'b0
1450*53ee8cc1Swenshuai.xi // 10: 1'b0
1451*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1452*53ee8cc1Swenshuai.xi // [12:8]: reg_ckg_dvbtm_adc_eq_0p5x
1453*53ee8cc1Swenshuai.xi // [4] : disable clock
1454*53ee8cc1Swenshuai.xi // [5] : invert clock
1455*53ee8cc1Swenshuai.xi // [6]: Select clock source
1456*53ee8cc1Swenshuai.xi // 00: clk_adc_div2_buf
1457*53ee8cc1Swenshuai.xi // 01: 1'b0
1458*53ee8cc1Swenshuai.xi // 10: 1'b0
1459*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1460*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h1d, 2'b11, 16'h0000);
1461*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h1d, 2'b11, 16'h0000);
1462*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f3b, 0x00);
1463*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f3a, 0x00);
1464*53ee8cc1Swenshuai.xi
1465*53ee8cc1Swenshuai.xi
1466*53ee8cc1Swenshuai.xi // @0x351e
1467*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbtm_sram_t11x_t22x
1468*53ee8cc1Swenshuai.xi // [0] : disable clock
1469*53ee8cc1Swenshuai.xi // [1] : invert clock
1470*53ee8cc1Swenshuai.xi // [4:2]: Select clock source
1471*53ee8cc1Swenshuai.xi // 000: dvb_clk48_buf
1472*53ee8cc1Swenshuai.xi // 001: dvb_clk43_buf
1473*53ee8cc1Swenshuai.xi // 010: dvb_clk24_buf
1474*53ee8cc1Swenshuai.xi // 011: dvb_clk21p5_buf
1475*53ee8cc1Swenshuai.xi // 100: 1'b0
1476*53ee8cc1Swenshuai.xi // 101: 1'b0
1477*53ee8cc1Swenshuai.xi // 110: 1'b0
1478*53ee8cc1Swenshuai.xi // 111: 1'b0
1479*53ee8cc1Swenshuai.xi // [12:8]: reg_ckg_dvbtm_sram_t11x_t24x
1480*53ee8cc1Swenshuai.xi // [8] : disable clock
1481*53ee8cc1Swenshuai.xi // [9] : invert clock
1482*53ee8cc1Swenshuai.xi // [:2]: Select clock source
1483*53ee8cc1Swenshuai.xi // 000: dvb_clk48_buf
1484*53ee8cc1Swenshuai.xi // 001: dvb_clk43_buf
1485*53ee8cc1Swenshuai.xi // 010: dvb_clk24_buf
1486*53ee8cc1Swenshuai.xi // 011: dvb_clk21p5_buf
1487*53ee8cc1Swenshuai.xi // 100: 1'b0
1488*53ee8cc1Swenshuai.xi // 101: 1'b0
1489*53ee8cc1Swenshuai.xi // 110: 1'b0
1490*53ee8cc1Swenshuai.xi // 111: 1'b0
1491*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h1e, 2'b11, 16'h0c04);
1492*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h1e, 2'b11, 16'h0000);
1493*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h1e, 2'b11, 16'h0000);
1494*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f3d, 0x00);
1495*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f3c, 0x00);
1496*53ee8cc1Swenshuai.xi
1497*53ee8cc1Swenshuai.xi
1498*53ee8cc1Swenshuai.xi // @0x3522
1499*53ee8cc1Swenshuai.xi // [3:0] : reg_ckg_dvbt_t2_inner0p5x_dvbc_eq1x
1500*53ee8cc1Swenshuai.xi // [0] : disable clock
1501*53ee8cc1Swenshuai.xi // [1] : invert clock
1502*53ee8cc1Swenshuai.xi // [2] : Select clock source
1503*53ee8cc1Swenshuai.xi // 00: dvb_clk12_buf
1504*53ee8cc1Swenshuai.xi // 01: dvb_clk10p75_buf
1505*53ee8cc1Swenshuai.xi // 10: 1'b0
1506*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1507*53ee8cc1Swenshuai.xi // [7:4] : reg_ckg_dvbt_t2_inner2x_dvbc_eq4x
1508*53ee8cc1Swenshuai.xi // [4] : disable clock
1509*53ee8cc1Swenshuai.xi // [5] : invert clock
1510*53ee8cc1Swenshuai.xi // [6] : Select clock source
1511*53ee8cc1Swenshuai.xi // 00: dvb_clk48_buf
1512*53ee8cc1Swenshuai.xi // 01: dvb_clk43_buf
1513*53ee8cc1Swenshuai.xi // 10: 1'b0
1514*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1515*53ee8cc1Swenshuai.xi // [11:8]: reg_ckg_dvbt_t2_inner1x
1516*53ee8cc1Swenshuai.xi // [8] : disable clock
1517*53ee8cc1Swenshuai.xi // [9] : invert clock
1518*53ee8cc1Swenshuai.xi // [11:10]: Select clock source
1519*53ee8cc1Swenshuai.xi // 00: dvb_clk24_buf
1520*53ee8cc1Swenshuai.xi // 01: dvb_clk21p5_buf
1521*53ee8cc1Swenshuai.xi // 10: 1'b0
1522*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1523*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h22, 2'b11, 16'h0111);
1524*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h22, 2'b11, 16'h0111);
1525*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f45, 0x01);
1526*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f44, 0x11);
1527*53ee8cc1Swenshuai.xi
1528*53ee8cc1Swenshuai.xi // @0x353a
1529*53ee8cc1Swenshuai.xi // [2:0] : reg_ckg_dvbtm_sram_t12x_t24x_srd1x_isdbt_inner2x
1530*53ee8cc1Swenshuai.xi // [0] : disable clock
1531*53ee8cc1Swenshuai.xi // [1] : invert clock
1532*53ee8cc1Swenshuai.xi // [2] : Select clock source
1533*53ee8cc1Swenshuai.xi // 00: clk_dvbtm_sram_t12x_t24x_srd1x_p
1534*53ee8cc1Swenshuai.xi // 01: clk_isdbt_inner2x_p
1535*53ee8cc1Swenshuai.xi // 10: 1'b0
1536*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1537*53ee8cc1Swenshuai.xi // [6:4] : reg_ckg_dvbtm_sram_t12x_t24x_isdbt_inner2x
1538*53ee8cc1Swenshuai.xi // [4] : disable clock
1539*53ee8cc1Swenshuai.xi // [5] : invert clock
1540*53ee8cc1Swenshuai.xi // [6] : Select clock source
1541*53ee8cc1Swenshuai.xi // 00: clk_dvbtm_sram_t12x_t24x_p
1542*53ee8cc1Swenshuai.xi // 01: clk_isdbt_inner2x_p
1543*53ee8cc1Swenshuai.xi // 10: 1'b0
1544*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1545*53ee8cc1Swenshuai.xi // [10:8]: reg_ckg_dvbtm_sram_t24x_isdbt_inner2x
1546*53ee8cc1Swenshuai.xi // [8] : disable clock
1547*53ee8cc1Swenshuai.xi // [9] : invert clock
1548*53ee8cc1Swenshuai.xi // [10]: Select clock source
1549*53ee8cc1Swenshuai.xi // 00: clk_dvbtm_sram_t14x_t24x_p
1550*53ee8cc1Swenshuai.xi // 01: clk_isdbt_inner2x_p
1551*53ee8cc1Swenshuai.xi // 10: 1'b0
1552*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1553*53ee8cc1Swenshuai.xi // [14:12]: reg_ckg_dvbtm_sram_t12x_t24x_s2inner_isdbt_inner4x
1554*53ee8cc1Swenshuai.xi // [12] : disable clock
1555*53ee8cc1Swenshuai.xi // [13] : invert clock
1556*53ee8cc1Swenshuai.xi // [14] : Select clock source
1557*53ee8cc1Swenshuai.xi // 00: clk_dvbtm_sram_t12x_t24x_s2inner_p
1558*53ee8cc1Swenshuai.xi // 01: clk_isdbt_inner4x_p
1559*53ee8cc1Swenshuai.xi // 10: 1'b0
1560*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1561*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h3a, 2'b11, 16'h0110);
1562*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h3a, 2'b11, 16'h0110);
1563*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f75, 0x01);
1564*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f74, 0x10);
1565*53ee8cc1Swenshuai.xi
1566*53ee8cc1Swenshuai.xi // @0x353b
1567*53ee8cc1Swenshuai.xi // [2:0] : reg_ckg_dvbtm_sram_t12x_t24x_s2inner_isdbt_inner2x
1568*53ee8cc1Swenshuai.xi // [0] : disable clock
1569*53ee8cc1Swenshuai.xi // [1] : invert clock
1570*53ee8cc1Swenshuai.xi // [2] : Select clock source
1571*53ee8cc1Swenshuai.xi // 00: clk_dvbtm_sram_t12x_t24x_s2inner_p
1572*53ee8cc1Swenshuai.xi // 01: clk_isdbt_inner2x_p
1573*53ee8cc1Swenshuai.xi // 10: 1'b0
1574*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1575*53ee8cc1Swenshuai.xi // [6:4] : reg_ckg_dvbtm_sram_t22x_isdbt_inner2x
1576*53ee8cc1Swenshuai.xi // [4] : disable clock
1577*53ee8cc1Swenshuai.xi // [5] : invert clock
1578*53ee8cc1Swenshuai.xi // [6] : Select clock source
1579*53ee8cc1Swenshuai.xi // 00: clk_dvbtm_sram_t12x_t22x_p
1580*53ee8cc1Swenshuai.xi // 01: clk_isdbt_inner2x_p
1581*53ee8cc1Swenshuai.xi // 10: 1'b0
1582*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1583*53ee8cc1Swenshuai.xi // [10:8]: reg_ckg_dvbtm_sram_t14x_t24x_s2inner_isdbt_inner2x
1584*53ee8cc1Swenshuai.xi // [8] : disable clock
1585*53ee8cc1Swenshuai.xi // [9] : invert clock
1586*53ee8cc1Swenshuai.xi // [10]: Select clock source
1587*53ee8cc1Swenshuai.xi // 00: clk_dvbtm_sram_t14x_t24x_s2inner_p
1588*53ee8cc1Swenshuai.xi // 01: clk_isdbt_inner2x_p
1589*53ee8cc1Swenshuai.xi // 10: 1'b0
1590*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1591*53ee8cc1Swenshuai.xi // [14:12]: reg_ckg_dvbtm_sram_t12x_t24x_srd1x_isdbt_inner4x
1592*53ee8cc1Swenshuai.xi // [12] : disable clock
1593*53ee8cc1Swenshuai.xi // [13] : invert clock
1594*53ee8cc1Swenshuai.xi // [14]: Select clock source
1595*53ee8cc1Swenshuai.xi // 00: clk_dvbtm_sram_t12x_t24x_srd1x_p
1596*53ee8cc1Swenshuai.xi // 01: clk_isdbt_inner4x_p
1597*53ee8cc1Swenshuai.xi // 10: 1'b0
1598*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1599*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h3b, 2'b11, 16'h0010);
1600*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h3b, 2'b11, 16'h0010);
1601*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f77, 0x00);
1602*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f76, 0x10);
1603*53ee8cc1Swenshuai.xi
1604*53ee8cc1Swenshuai.xi // @0x353c
1605*53ee8cc1Swenshuai.xi // [2:0] : reg_ckg_dvbtm_sram_t14x_t24x_srd1x_vifssc_isdbt_inner4x
1606*53ee8cc1Swenshuai.xi // [0] : disable clock
1607*53ee8cc1Swenshuai.xi // [1] : invert clock
1608*53ee8cc1Swenshuai.xi // [2] : Select clock source
1609*53ee8cc1Swenshuai.xi // 00: clk_dvbtm_sram_t14x_t24x_srd1x_vifssc_p
1610*53ee8cc1Swenshuai.xi // 01: clk_isdbt_inner4x_p
1611*53ee8cc1Swenshuai.xi // 10: 1'b0
1612*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1613*53ee8cc1Swenshuai.xi // [6:4] : reg_ckg_dvbtm_sram_t12x_t22x_isdbt_inner2x
1614*53ee8cc1Swenshuai.xi // [4] : disable clock
1615*53ee8cc1Swenshuai.xi // [5] : invert clock
1616*53ee8cc1Swenshuai.xi // [6] : Select clock source
1617*53ee8cc1Swenshuai.xi // 00: clk_dvbtm_sram_t12x_t22x_p
1618*53ee8cc1Swenshuai.xi // 01: clk_isdbt_inner2x_p
1619*53ee8cc1Swenshuai.xi // 10: 1'b0
1620*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1621*53ee8cc1Swenshuai.xi // [10:8]: reg_ckg_dvbtm_sram_t11x_t22x_isdbt_inner2x
1622*53ee8cc1Swenshuai.xi // [8] : disable clock
1623*53ee8cc1Swenshuai.xi // [9] : invert clock
1624*53ee8cc1Swenshuai.xi // [10]: Select clock source
1625*53ee8cc1Swenshuai.xi // 00: clk_dvbtm_sram_t11x_t22x_p
1626*53ee8cc1Swenshuai.xi // 01: clk_isdbt_inner2x_p
1627*53ee8cc1Swenshuai.xi // 10: 1'b0
1628*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1629*53ee8cc1Swenshuai.xi // [14:12]: reg_ckg_dvbtm_sram_t12x_t24x_isdbt_outer6x
1630*53ee8cc1Swenshuai.xi // [12] : disable clock
1631*53ee8cc1Swenshuai.xi // [13] : invert clock
1632*53ee8cc1Swenshuai.xi // [14]: Select clock source
1633*53ee8cc1Swenshuai.xi // 00: clk_dvbtm_sram_t12x_t24x_p
1634*53ee8cc1Swenshuai.xi // 01: clk_isdbt_outer6x_dvbt_outer2x_c_mux
1635*53ee8cc1Swenshuai.xi // 10: 1'b0
1636*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1637*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h3c, 2'b11, 16'h0110);
1638*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h3c, 2'b11, 16'h0110);
1639*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f79, 0x01);
1640*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f78, 0x10);
1641*53ee8cc1Swenshuai.xi
1642*53ee8cc1Swenshuai.xi // @0x353e
1643*53ee8cc1Swenshuai.xi // [2:0] : reg_ckg_dvbs_outer2x_dvbt_outer2x_dvbt2_inner2x_isdbt_outer6x
1644*53ee8cc1Swenshuai.xi // [0] : disable clock
1645*53ee8cc1Swenshuai.xi // [1] : invert clock
1646*53ee8cc1Swenshuai.xi // [2] : Select clock source
1647*53ee8cc1Swenshuai.xi // 00: clk_dvbs_outer2x_dvbt_outer2x_dvbt2_inner2x_mux8
1648*53ee8cc1Swenshuai.xi // 01: clk_isdbt_outer6x_p
1649*53ee8cc1Swenshuai.xi // 10: 1'b0
1650*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1651*53ee8cc1Swenshuai.xi // [6:4] : reg_ckg_dvbtm_sram_t22x_miu
1652*53ee8cc1Swenshuai.xi // [4] : disable clock
1653*53ee8cc1Swenshuai.xi // [5] : invert clock
1654*53ee8cc1Swenshuai.xi // [6] : Select clock source
1655*53ee8cc1Swenshuai.xi // 00: clk_dvbt2_inner2x_p
1656*53ee8cc1Swenshuai.xi // 01: clk_miu_p
1657*53ee8cc1Swenshuai.xi // 10: 1'b0
1658*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1659*53ee8cc1Swenshuai.xi // [10:8]: reg_ckg_dvbtm_sram_adc_t22x_isdbt_inner2x
1660*53ee8cc1Swenshuai.xi // [8] : disable clock
1661*53ee8cc1Swenshuai.xi // [9] : invert clock
1662*53ee8cc1Swenshuai.xi // [10]: Select clock source
1663*53ee8cc1Swenshuai.xi // 00: clk_dvbtm_sram_adc_t22x_p
1664*53ee8cc1Swenshuai.xi // 01: clk_isdbt_inner2x_p
1665*53ee8cc1Swenshuai.xi // 10: 1'b0
1666*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1667*53ee8cc1Swenshuai.xi // [14:12]: reg_ckg_dvbs_outer2x_dvbt_outer2x_dvbt2_inner2x_miu
1668*53ee8cc1Swenshuai.xi // [12] : disable clock
1669*53ee8cc1Swenshuai.xi // [13] : invert clock
1670*53ee8cc1Swenshuai.xi // [14]: Select clock source
1671*53ee8cc1Swenshuai.xi // 00: clk_dvbs_outer2x_dvbt_outer2x_dvbt2_inner2x_mux8
1672*53ee8cc1Swenshuai.xi // 01: clk_miu_p
1673*53ee8cc1Swenshuai.xi // 10: 1'b0
1674*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1675*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h3e, 2'b11, 16'h1111);
1676*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h3e, 2'b11, 16'h1111);
1677*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f7d, 0x11);
1678*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f7c, 0x11);
1679*53ee8cc1Swenshuai.xi
1680*53ee8cc1Swenshuai.xi // @0x353f
1681*53ee8cc1Swenshuai.xi // [2:0] : reg_ckg_dvbs_outer2x_dvbt_outer2x_miu_isdbt_outer6x
1682*53ee8cc1Swenshuai.xi // [0] : disable clock
1683*53ee8cc1Swenshuai.xi // [1] : invert clock
1684*53ee8cc1Swenshuai.xi // [2] : Select clock source
1685*53ee8cc1Swenshuai.xi // 00: clk_dvbs_outer2x_dvbt_outer2x_miu_mux8
1686*53ee8cc1Swenshuai.xi // 01: clk_isdbt_outer6x_p
1687*53ee8cc1Swenshuai.xi // 10: 1'b0
1688*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1689*53ee8cc1Swenshuai.xi // [6:4] : reg_ckg_dvbtm_sram_t22x_dvbtc_rs
1690*53ee8cc1Swenshuai.xi // [4] : disable clock
1691*53ee8cc1Swenshuai.xi // [5] : invert clock
1692*53ee8cc1Swenshuai.xi // [6] : Select clock source
1693*53ee8cc1Swenshuai.xi // 00: clk_dvbt2_inner2x_p
1694*53ee8cc1Swenshuai.xi // 01: clk_dvbtc_rs_p
1695*53ee8cc1Swenshuai.xi // 10: 1'b0
1696*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1697*53ee8cc1Swenshuai.xi // [10:8]: reg_ckg_dvbtc_outer2x_isdbt_outer_rs
1698*53ee8cc1Swenshuai.xi // [8] : disable clock
1699*53ee8cc1Swenshuai.xi // [9] : invert clock
1700*53ee8cc1Swenshuai.xi // [10]: Select clock source
1701*53ee8cc1Swenshuai.xi // 00: clk_dvbtc_outer2x_p
1702*53ee8cc1Swenshuai.xi // 01: clk_isdbt_outer_rs_p
1703*53ee8cc1Swenshuai.xi // 10: 1'b0
1704*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1705*53ee8cc1Swenshuai.xi // [14:12]: reg_ckg_dvbtm_sram_t22x_isdbt_outer6x_dvbt_outer2x
1706*53ee8cc1Swenshuai.xi // [12] : disable clock
1707*53ee8cc1Swenshuai.xi // [13] : invert clock
1708*53ee8cc1Swenshuai.xi // [14]: Select clock source
1709*53ee8cc1Swenshuai.xi // 00: clk_dvbtm_sram_t12x_t22x_p
1710*53ee8cc1Swenshuai.xi // 01: clk_isdbt_outer6x_dvbt_outer2x_mux
1711*53ee8cc1Swenshuai.xi // 10: 1'b0
1712*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1713*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h3f, 2'b11, 16'h1041);
1714*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h3f, 2'b11, 16'h1041);
1715*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f7f, 0x10);
1716*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111f7e, 0x41);
1717*53ee8cc1Swenshuai.xi
1718*53ee8cc1Swenshuai.xi
1719*53ee8cc1Swenshuai.xi // @0x3570
1720*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbt_inner2x_srd0p5x
1721*53ee8cc1Swenshuai.xi // [0] : disable clock
1722*53ee8cc1Swenshuai.xi // [1] : invert clock
1723*53ee8cc1Swenshuai.xi // [3:2]: Select clock source
1724*53ee8cc1Swenshuai.xi // 00: dvb_clk48_buf
1725*53ee8cc1Swenshuai.xi // 01: dvb_clk43_buf
1726*53ee8cc1Swenshuai.xi // 10: clk_adc_div2_buf
1727*53ee8cc1Swenshuai.xi // 11: 1'b0
1728*53ee8cc1Swenshuai.xi // 11: 1'b0
1729*53ee8cc1Swenshuai.xi // [13:8]: reg_ckg_dvbtm_sram_t1outer1x_t24x
1730*53ee8cc1Swenshuai.xi // [8] : disable clock
1731*53ee8cc1Swenshuai.xi // [9] : invert clock
1732*53ee8cc1Swenshuai.xi // [12:10]: Select clock source
1733*53ee8cc1Swenshuai.xi // 000: dvb_clk96_buf
1734*53ee8cc1Swenshuai.xi // 001: dvb_clk86_buf
1735*53ee8cc1Swenshuai.xi // 010: dvb_clk48_buf
1736*53ee8cc1Swenshuai.xi // 011: dvb_clk43_buf
1737*53ee8cc1Swenshuai.xi // 100: 1'b0
1738*53ee8cc1Swenshuai.xi // 101: 1'b0
1739*53ee8cc1Swenshuai.xi // 110: 1'b0
1740*53ee8cc1Swenshuai.xi // 111: 1'b0
1741*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h70, 2'b11, 16'h0008);
1742*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h70, 2'b11, 16'h0008);
1743*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111fe1, 0x00);
1744*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111fe0, 0x08);
1745*53ee8cc1Swenshuai.xi
1746*53ee8cc1Swenshuai.xi
1747*53ee8cc1Swenshuai.xi // @0x3571
1748*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbtm_sram_t12x_t24x_srd1x
1749*53ee8cc1Swenshuai.xi // [0] : disable clock
1750*53ee8cc1Swenshuai.xi // [1] : invert clock
1751*53ee8cc1Swenshuai.xi // [3:2]: Select clock source
1752*53ee8cc1Swenshuai.xi // 000: dvb_clk96_buf
1753*53ee8cc1Swenshuai.xi // 001: dvb_clk86_buf
1754*53ee8cc1Swenshuai.xi // 010: dvb_clk48_buf
1755*53ee8cc1Swenshuai.xi // 011: dvb_clk43_buf
1756*53ee8cc1Swenshuai.xi // 100: adc_clk_buf
1757*53ee8cc1Swenshuai.xi // 101: 1'b0
1758*53ee8cc1Swenshuai.xi // 110: 1'b0
1759*53ee8cc1Swenshuai.xi // 111: 1'b0
1760*53ee8cc1Swenshuai.xi // [12:8]: reg_ckg_dvbtm_sram_t14x_t24x_srd1x
1761*53ee8cc1Swenshuai.xi // [8] : disable clock
1762*53ee8cc1Swenshuai.xi // [9] : invert clock
1763*53ee8cc1Swenshuai.xi // [12:10]: Select clock source
1764*53ee8cc1Swenshuai.xi // 000: dvb_clk96_buf
1765*53ee8cc1Swenshuai.xi // 001: dvb_clk86_buf
1766*53ee8cc1Swenshuai.xi // 010: adc_clk_buf
1767*53ee8cc1Swenshuai.xi // 011: 1'b0
1768*53ee8cc1Swenshuai.xi // 100: 1'b0
1769*53ee8cc1Swenshuai.xi // 101: 1'b0
1770*53ee8cc1Swenshuai.xi // 110: 1'b0
1771*53ee8cc1Swenshuai.xi // 111: 1'b0
1772*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h71, 2'b11, 16'h0810);
1773*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h71, 2'b11, 16'h0810);
1774*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111fe3, 0x08);
1775*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111fe2, 0x10);
1776*53ee8cc1Swenshuai.xi
1777*53ee8cc1Swenshuai.xi
1778*53ee8cc1Swenshuai.xi // @0x3572
1779*53ee8cc1Swenshuai.xi // [6:0] : reg_ckg_dvbt2_s2_bch_out
1780*53ee8cc1Swenshuai.xi // [0] : disable clock
1781*53ee8cc1Swenshuai.xi // [1] : invert clock
1782*53ee8cc1Swenshuai.xi // [2] : Select clock source
1783*53ee8cc1Swenshuai.xi // 00: dvb_clk48_buf
1784*53ee8cc1Swenshuai.xi // 01: dvb_clk43_buf
1785*53ee8cc1Swenshuai.xi // 10: 1'b0
1786*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1787*53ee8cc1Swenshuai.xi // [12:8]: reg_ckg_dvbt2_outer2x
1788*53ee8cc1Swenshuai.xi // [8] : disable clock
1789*53ee8cc1Swenshuai.xi // [9] : invert clock
1790*53ee8cc1Swenshuai.xi // [12:10]: Select clock source
1791*53ee8cc1Swenshuai.xi // 000: mpll_clk144_buf
1792*53ee8cc1Swenshuai.xi // 001: mpll_clk108_buf
1793*53ee8cc1Swenshuai.xi // 010: mpll_clk96_buf
1794*53ee8cc1Swenshuai.xi // 011: mpll_clk72_buf
1795*53ee8cc1Swenshuai.xi // 100: mpll_clk54_buf
1796*53ee8cc1Swenshuai.xi // 101: mpll_clk48_buf
1797*53ee8cc1Swenshuai.xi // 110: mpll_clk36_buf
1798*53ee8cc1Swenshuai.xi // 111: mpll_clk24_buf
1799*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h72, 2'b11, 16'h0008);
1800*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h72, 2'b11, 16'h0008);
1801*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111fe5, 0x00);
1802*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111fe4, 0x08);
1803*53ee8cc1Swenshuai.xi
1804*53ee8cc1Swenshuai.xi
1805*53ee8cc1Swenshuai.xi // @0x3573
1806*53ee8cc1Swenshuai.xi // [3:0] : reg_ckg_dvbt2_inner4x_s2_inner
1807*53ee8cc1Swenshuai.xi // [0] : disable clock
1808*53ee8cc1Swenshuai.xi // [1] : invert clock
1809*53ee8cc1Swenshuai.xi // [2] : Select clock source
1810*53ee8cc1Swenshuai.xi // 00: dvb_clk96_buf
1811*53ee8cc1Swenshuai.xi // 01: dvb_clk86_buf
1812*53ee8cc1Swenshuai.xi // 10: 1'b0
1813*53ee8cc1Swenshuai.xi // 11: DFT_CLK
1814*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h73, 2'b11, 16'h0008);
1815*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h73, 2'b11, 16'h0008);
1816*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111fe7, 0x00);
1817*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111fe6, 0x08);
1818*53ee8cc1Swenshuai.xi
1819*53ee8cc1Swenshuai.xi
1820*53ee8cc1Swenshuai.xi // @0x3574
1821*53ee8cc1Swenshuai.xi // [4:0] reg_ckg_dvbtm_sram_t12x_t24x_s2inner
1822*53ee8cc1Swenshuai.xi // [0] : disable clock
1823*53ee8cc1Swenshuai.xi // [1] : invert clock
1824*53ee8cc1Swenshuai.xi // [4:2]:Select clock source
1825*53ee8cc1Swenshuai.xi // 000: dvb_clk96_buf
1826*53ee8cc1Swenshuai.xi // 001: dvb_clk86_buf
1827*53ee8cc1Swenshuai.xi // 010: dvb_clk48_buf
1828*53ee8cc1Swenshuai.xi // 011: dvb_clk43_buf
1829*53ee8cc1Swenshuai.xi // 100: adc_clk_buf
1830*53ee8cc1Swenshuai.xi // 101: 1'b0
1831*53ee8cc1Swenshuai.xi // 110: 1'b0
1832*53ee8cc1Swenshuai.xi // 111: 1'b0
1833*53ee8cc1Swenshuai.xi // [12:8] reg_ckg_dvbtm_sram_t14x_t24x_s2inner
1834*53ee8cc1Swenshuai.xi // [8] : disable clock
1835*53ee8cc1Swenshuai.xi // [9] : invert clock
1836*53ee8cc1Swenshuai.xi // [12:10]: Select clock source
1837*53ee8cc1Swenshuai.xi // 000: dvb_clk96_buf
1838*53ee8cc1Swenshuai.xi // 001: dvb_clk86_buf
1839*53ee8cc1Swenshuai.xi // 010: adc_clk_buf
1840*53ee8cc1Swenshuai.xi // 011: dvb_clk24_buf //JL SRAM Share (Windermere U02 ECO)
1841*53ee8cc1Swenshuai.xi // 100: dvb_clk21p5_buf //JL SRAM Share (Windermere U02 ECO)
1842*53ee8cc1Swenshuai.xi // 101: 1'b0
1843*53ee8cc1Swenshuai.xi // 110: 1'b0
1844*53ee8cc1Swenshuai.xi // 111: 1'b0
1845*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h74, 2'b11, 16'h0810);
1846*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h74, 2'b11, 16'h0810);
1847*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111fe9, 0x08);
1848*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111fe8, 0x10);
1849*53ee8cc1Swenshuai.xi
1850*53ee8cc1Swenshuai.xi
1851*53ee8cc1Swenshuai.xi // @0x3575
1852*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbtc_rs
1853*53ee8cc1Swenshuai.xi // [0] : disable clock
1854*53ee8cc1Swenshuai.xi // [1] : invert clock
1855*53ee8cc1Swenshuai.xi // [4:2]:Select clock source
1856*53ee8cc1Swenshuai.xi // 000: mpll_clk216_buf
1857*53ee8cc1Swenshuai.xi // 001: mpll_clk172p8_buf
1858*53ee8cc1Swenshuai.xi // 010: mpll_clk144_buf
1859*53ee8cc1Swenshuai.xi // 011: mpll_clk288_buf
1860*53ee8cc1Swenshuai.xi // 100: dvb_clk96_buf
1861*53ee8cc1Swenshuai.xi // 101: dvb_clk86_buf
1862*53ee8cc1Swenshuai.xi // 110: mpll_clk57p6_buf
1863*53ee8cc1Swenshuai.xi // 111: dvb_clk43_buf
1864*53ee8cc1Swenshuai.xi // [11:8] : reg_ckg_dvbs_outer2x_dvbt_outer2x (N/A)
1865*53ee8cc1Swenshuai.xi // [15:12]: reg_ckg_dvbs_outer2x_dvbt_outer2x_miu
1866*53ee8cc1Swenshuai.xi // [12] : disable clock
1867*53ee8cc1Swenshuai.xi // [13] : invert clock
1868*53ee8cc1Swenshuai.xi // [15:14]:Select clock source
1869*53ee8cc1Swenshuai.xi // 000: 1'b0
1870*53ee8cc1Swenshuai.xi // 001: dvb_clk96_buf
1871*53ee8cc1Swenshuai.xi // 010: dvb_clk86_buf
1872*53ee8cc1Swenshuai.xi // 011: clk_miu
1873*53ee8cc1Swenshuai.xi // 100: 1'b0
1874*53ee8cc1Swenshuai.xi // 101: 1'b0
1875*53ee8cc1Swenshuai.xi // 110: 1'b0
1876*53ee8cc1Swenshuai.xi // 111: 1'b0
1877*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h75, 2'b11, 16'h0000);
1878*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h75, 2'b11, 16'h0000);
1879*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111feb, 0x00);
1880*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111fea, 0x00);
1881*53ee8cc1Swenshuai.xi
1882*53ee8cc1Swenshuai.xi
1883*53ee8cc1Swenshuai.xi // @0x3576
1884*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbs_outer2x_dvbt_outer2x_dvbt2_inner2x
1885*53ee8cc1Swenshuai.xi // [0] : disable clock
1886*53ee8cc1Swenshuai.xi // [1] : invert clock
1887*53ee8cc1Swenshuai.xi // [4:2]:Select clock source
1888*53ee8cc1Swenshuai.xi // 000: 1'b0
1889*53ee8cc1Swenshuai.xi // 001: dvb_clk96_buf
1890*53ee8cc1Swenshuai.xi // 010: dvb_clk86_buf
1891*53ee8cc1Swenshuai.xi // 011: dvb_clk48_buf
1892*53ee8cc1Swenshuai.xi // 100: dvb_clk43_buf
1893*53ee8cc1Swenshuai.xi // 101: 1'b0
1894*53ee8cc1Swenshuai.xi // 110: 1'b0
1895*53ee8cc1Swenshuai.xi // 111: 1'b0
1896*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h76, 2'b11, 16'h0000);
1897*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h76, 2'b11, 16'h0000);
1898*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111fed, 0x00);
1899*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111fec, 0x00);
1900*53ee8cc1Swenshuai.xi
1901*53ee8cc1Swenshuai.xi
1902*53ee8cc1Swenshuai.xi // @0x3577
1903*53ee8cc1Swenshuai.xi // [3:0] : reg_ckg_dvbt2_inner4x_dvbtc_rs
1904*53ee8cc1Swenshuai.xi // [0] : disable clock
1905*53ee8cc1Swenshuai.xi // [1] : invert clock
1906*53ee8cc1Swenshuai.xi // [3:2]: Select clock source
1907*53ee8cc1Swenshuai.xi // 00: dvb_clk96_buf
1908*53ee8cc1Swenshuai.xi // 01: dvb_clk86_buf
1909*53ee8cc1Swenshuai.xi // 10: clk_dvbtc_rs_p
1910*53ee8cc1Swenshuai.xi // 11: 1'b0
1911*53ee8cc1Swenshuai.xi // [8:4] : reg_ckg_dvbtm_sram_adc_t22x_dvbtc_rs
1912*53ee8cc1Swenshuai.xi // [4] : disable clock
1913*53ee8cc1Swenshuai.xi // [5] : invert clock
1914*53ee8cc1Swenshuai.xi // [6] : Select clock source
1915*53ee8cc1Swenshuai.xi // 000: dvb_clk48_buf
1916*53ee8cc1Swenshuai.xi // 001: dvb_clk43_buf
1917*53ee8cc1Swenshuai.xi // 010: 1'b0
1918*53ee8cc1Swenshuai.xi // 011: adc_clk_buf
1919*53ee8cc1Swenshuai.xi // 100: 1'b0
1920*53ee8cc1Swenshuai.xi // 101: 1'b0
1921*53ee8cc1Swenshuai.xi // 110: 1'b0
1922*53ee8cc1Swenshuai.xi // 111: 1'b0
1923*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h77, 2'b11, 16'h0088);
1924*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h77, 2'b11, 16'h0088);
1925*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111fef, 0x00);
1926*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111fee, 0x88);
1927*53ee8cc1Swenshuai.xi
1928*53ee8cc1Swenshuai.xi
1929*53ee8cc1Swenshuai.xi // Maserati
1930*53ee8cc1Swenshuai.xi // @0x3578
1931*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbt2_inner2x_srd0p5x
1932*53ee8cc1Swenshuai.xi // [0] : disable clock
1933*53ee8cc1Swenshuai.xi // [1] : invert clock
1934*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h78, 2'b01, 16'h0008);
1935*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h78, 2'b01, 16'h0008);
1936*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111ff0, 0x08);
1937*53ee8cc1Swenshuai.xi
1938*53ee8cc1Swenshuai.xi // [3:0] : reg_ckg_sram_t22x_isdbt_inn2x_dtmb_inn2x
1939*53ee8cc1Swenshuai.xi // [0] : disable clock
1940*53ee8cc1Swenshuai.xi // [1] : invert clock
1941*53ee8cc1Swenshuai.xi // [3:2]:Select clock source
1942*53ee8cc1Swenshuai.xi // 000: clk_dvbtm_sram_t12x_t22x_p
1943*53ee8cc1Swenshuai.xi // 001: clk_isdbt_inner2x_p
1944*53ee8cc1Swenshuai.xi // 010: clk_share_dtmb_inner2x_isdbt_sram4_mux
1945*53ee8cc1Swenshuai.xi // 011:
1946*53ee8cc1Swenshuai.xi // [7:4] : reg_ckg_sram_t14x_t24x_s2inn_isdbt_inn2x_dtmb_inn6x
1947*53ee8cc1Swenshuai.xi // [4] : disable clock
1948*53ee8cc1Swenshuai.xi // [5] : invert clock
1949*53ee8cc1Swenshuai.xi // [7:6]:Select clock source
1950*53ee8cc1Swenshuai.xi // 000: clk_dvbtm_sram_t14x_t24x_s2inner_p
1951*53ee8cc1Swenshuai.xi // 001: clk_isdbt_inner2x_p
1952*53ee8cc1Swenshuai.xi // 010: clk_share_dtmb_inner6x_isdbt_sram3_mux
1953*53ee8cc1Swenshuai.xi // 011:
1954*53ee8cc1Swenshuai.xi // [11:8] : reg_ckg_sram_t14x_t24x_s2inn_isdbt_inn2x_dtmb_eq2x
1955*53ee8cc1Swenshuai.xi // [4] : disable clock
1956*53ee8cc1Swenshuai.xi // [5] : invert clock
1957*53ee8cc1Swenshuai.xi // [7:6]:Select clock source
1958*53ee8cc1Swenshuai.xi // 000: clk_dvbtm_sram_t14x_t24x_s2inner_p
1959*53ee8cc1Swenshuai.xi // 001: clk_isdbt_inner2x_p
1960*53ee8cc1Swenshuai.xi // 010: clk_share_dtmb_eq2x_isdbt_sram3_mux
1961*53ee8cc1Swenshuai.xi // 011:
1962*53ee8cc1Swenshuai.xi // [15:12]: reg_ckg_dvbtm_sram_t14x_t24x_srd1x_vifssc_isdbt_inner4x_dtmb_inner12x
1963*53ee8cc1Swenshuai.xi // [12] : disable clock
1964*53ee8cc1Swenshuai.xi // [13] : invert clock
1965*53ee8cc1Swenshuai.xi // [15:14]:Select clock source
1966*53ee8cc1Swenshuai.xi // 000: clk_dvbtm_sram_t14x_t24x_srd1x_vifssc_p
1967*53ee8cc1Swenshuai.xi // 001: clk_isdbt_inner4x_p
1968*53ee8cc1Swenshuai.xi // 010: clk_dvbtc_sram2_p
1969*53ee8cc1Swenshuai.xi // 011: clk_dtmb_eq2x_inner2x_12x_mux
1970*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_DEMOD_8>>1)+7'h48, 2'b11, 16'h0001);
1971*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_DEMOD_8>>1)+7'h48, 2'b11, 16'h0001);
1972*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x152991, 0x00);
1973*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x152990, 0x01);
1974*53ee8cc1Swenshuai.xi // ==============================================================
1975*53ee8cc1Swenshuai.xi // End demod top initial setting by HK MCU ......
1976*53ee8cc1Swenshuai.xi // ==============================================================
1977*53ee8cc1Swenshuai.xi //wriu 0x101e39 0x03
1978*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x101e39, 0x03);
1979*53ee8cc1Swenshuai.xi
1980*53ee8cc1Swenshuai.xi //==========================================================
1981*53ee8cc1Swenshuai.xi //diseqc_out : PAD_GPIO15_I
1982*53ee8cc1Swenshuai.xi //swich to Diseqc out pin from GPIO
1983*53ee8cc1Swenshuai.xi //==========================================================
1984*53ee8cc1Swenshuai.xi //Bank: Reg_CHIP_TOP(0x101e)
1985*53ee8cc1Swenshuai.xi //reg_test_out_mode : addr h��12, [6:4] = 3��h0
1986*53ee8cc1Swenshuai.xi //reg_ts4config : addr h��40, [11:10] = 2��h0
1987*53ee8cc1Swenshuai.xi //reg_ts5config : addr h��40, [13:12] = 2��h0
1988*53ee8cc1Swenshuai.xi //reg_i2smutemode : addr h��2, [15:14] = 2��h0
1989*53ee8cc1Swenshuai.xi //reg_fifthuartmode : h��4, [3:2] = 2��h0
1990*53ee8cc1Swenshuai.xi //reg_od5thuart : h��55, [5:4] = 2��h0
1991*53ee8cc1Swenshuai.xi //reg_diseqc_out_config : ��h45, [1] = 1��b1
1992*53ee8cc1Swenshuai.xi u8Temp = HAL_DMD_RIU_ReadByte(0x101E8A);
1993*53ee8cc1Swenshuai.xi u8Temp|=0x02;
1994*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x101E8A, u8Temp);
1995*53ee8cc1Swenshuai.xi
1996*53ee8cc1Swenshuai.xi // SRAM allocation 64K avoid change souce from T2 failed.
1997*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111701,0x00);
1998*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111700,0x00);
1999*53ee8cc1Swenshuai.xi
2000*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111705,0x00);
2001*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111704,0x00);
2002*53ee8cc1Swenshuai.xi
2003*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111703,0xff);
2004*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111702,0xff);
2005*53ee8cc1Swenshuai.xi
2006*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111707,0xff);
2007*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111706,0xff);
2008*53ee8cc1Swenshuai.xi
2009*53ee8cc1Swenshuai.xi //Diff from TV tool
2010*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111708,0x01);
2011*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111709,0x00);
2012*53ee8cc1Swenshuai.xi
2013*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x11170a,0x0f);
2014*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x11170b,0x00);
2015*53ee8cc1Swenshuai.xi
2016*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111718,0x02);
2017*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x111719,0x00);
2018*53ee8cc1Swenshuai.xi
2019*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x11171a,0x00);
2020*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x11171b,0x00);
2021*53ee8cc1Swenshuai.xi
2022*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x1117e0,0x14);
2023*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x1117e1,0x14);
2024*53ee8cc1Swenshuai.xi
2025*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x1117e4,0x00);
2026*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x1117e5,0x00);
2027*53ee8cc1Swenshuai.xi
2028*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x1117e6,0x00);
2029*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x1117e7,0x00);
2030*53ee8cc1Swenshuai.xi
2031*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_InitClkgen\n"));
2032*53ee8cc1Swenshuai.xi }
2033*53ee8cc1Swenshuai.xi
2034*53ee8cc1Swenshuai.xi /***********************************************************************************
2035*53ee8cc1Swenshuai.xi Subject: Power on initialized function
2036*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_Power_On_Initialization
2037*53ee8cc1Swenshuai.xi Parmeter:
2038*53ee8cc1Swenshuai.xi Return: MS_BOOL
2039*53ee8cc1Swenshuai.xi Remark:
2040*53ee8cc1Swenshuai.xi ************************************************************************************/
INTERN_DVBS_Power_On_Initialization(MS_BOOL bRFAGCTristateEnable,MS_U8 u8ADCIQMode,MS_U8 u8PadSel,MS_BOOL bPGAEnable,MS_U8 u8PGAGain,const MS_U8 * u8DMD_DVBS_DSPRegInitExt,MS_U8 u8DMD_DVBS_DSPRegInitSize)2041*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Power_On_Initialization(MS_BOOL bRFAGCTristateEnable, MS_U8 u8ADCIQMode, MS_U8 u8PadSel, MS_BOOL bPGAEnable, MS_U8 u8PGAGain, const MS_U8 *u8DMD_DVBS_DSPRegInitExt, MS_U8 u8DMD_DVBS_DSPRegInitSize)
2042*53ee8cc1Swenshuai.xi {
2043*53ee8cc1Swenshuai.xi MS_U8 status = true;
2044*53ee8cc1Swenshuai.xi //MS_U8 u8ChipVersion;
2045*53ee8cc1Swenshuai.xi
2046*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_Power_On_Initialization\n"));
2047*53ee8cc1Swenshuai.xi
2048*53ee8cc1Swenshuai.xi #if defined(PWS_ENABLE)
2049*53ee8cc1Swenshuai.xi Mapi_PWS_Stop_VDMCU();
2050*53ee8cc1Swenshuai.xi #endif
2051*53ee8cc1Swenshuai.xi INTERN_DVBS_InitClkgen(bRFAGCTristateEnable);//~~ no modify
2052*53ee8cc1Swenshuai.xi HAL_DMD_ADC_IQ_Switch(u8ADCIQMode, u8PadSel, bPGAEnable, u8PGAGain);//~~ no modify
2053*53ee8cc1Swenshuai.xi
2054*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("@@@@@INTERN_DVBS_Power_On_Initialization1:bRFAGCTristateEnable=%d ;u8ADCIQMode=%d \n",bRFAGCTristateEnable,u8ADCIQMode));
2055*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("@@@@@INTERN_DVBS_Power_On_Initialization2:u8PadSel=%d ;bPGAEnable=%d \n",u8PadSel,bPGAEnable));
2056*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("@@@@@INTERN_DVBS_Power_On_Initialization2:u8PGAGain=%d \n",u8PGAGain));
2057*53ee8cc1Swenshuai.xi
2058*53ee8cc1Swenshuai.xi //// Firmware download //////////
2059*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS Load DSP...\n"));
2060*53ee8cc1Swenshuai.xi //MsOS_DelayTask(100);
2061*53ee8cc1Swenshuai.xi
2062*53ee8cc1Swenshuai.xi {
2063*53ee8cc1Swenshuai.xi if (INTERN_DVBS_LoadDSPCode() == FALSE)
2064*53ee8cc1Swenshuai.xi {
2065*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("DVB-S Load DSP Code Fail\n"));
2066*53ee8cc1Swenshuai.xi return FALSE;
2067*53ee8cc1Swenshuai.xi }
2068*53ee8cc1Swenshuai.xi else
2069*53ee8cc1Swenshuai.xi {
2070*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("DVB-S Load DSP Code OK\n"));
2071*53ee8cc1Swenshuai.xi }
2072*53ee8cc1Swenshuai.xi }
2073*53ee8cc1Swenshuai.xi
2074*53ee8cc1Swenshuai.xi //// MCU Reset //////////
2075*53ee8cc1Swenshuai.xi if (INTERN_DVBS_Reset() == FALSE)
2076*53ee8cc1Swenshuai.xi {
2077*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS Reset...Fail\n"));
2078*53ee8cc1Swenshuai.xi return FALSE;
2079*53ee8cc1Swenshuai.xi }
2080*53ee8cc1Swenshuai.xi else
2081*53ee8cc1Swenshuai.xi {
2082*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS Reset...OK\n"));
2083*53ee8cc1Swenshuai.xi }
2084*53ee8cc1Swenshuai.xi
2085*53ee8cc1Swenshuai.xi
2086*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_DSPReg_Init(u8DMD_DVBS_DSPRegInitExt, u8DMD_DVBS_DSPRegInitSize);
2087*53ee8cc1Swenshuai.xi //status &= INTERN_DVBS_Active(ENABLE);//enable this
2088*53ee8cc1Swenshuai.xi
2089*53ee8cc1Swenshuai.xi //Read Demod FW Version.
2090*53ee8cc1Swenshuai.xi INTERN_DVBS_Show_Demod_Version();
2091*53ee8cc1Swenshuai.xi
2092*53ee8cc1Swenshuai.xi return status;
2093*53ee8cc1Swenshuai.xi }
2094*53ee8cc1Swenshuai.xi /************************************************************************************************
2095*53ee8cc1Swenshuai.xi Subject: Driving control
2096*53ee8cc1Swenshuai.xi Function: INTERN_DVBC_Driving_Control
2097*53ee8cc1Swenshuai.xi Parmeter: bInversionEnable : TRUE For High
2098*53ee8cc1Swenshuai.xi Return: void
2099*53ee8cc1Swenshuai.xi Remark:
2100*53ee8cc1Swenshuai.xi *************************************************************************************************/
INTERN_DVBS_Driving_Control(MS_BOOL bEnable)2101*53ee8cc1Swenshuai.xi void INTERN_DVBS_Driving_Control(MS_BOOL bEnable)
2102*53ee8cc1Swenshuai.xi {
2103*53ee8cc1Swenshuai.xi MS_U8 u8Temp;
2104*53ee8cc1Swenshuai.xi
2105*53ee8cc1Swenshuai.xi u8Temp = HAL_DMD_RIU_ReadByte(0x101E10);
2106*53ee8cc1Swenshuai.xi
2107*53ee8cc1Swenshuai.xi if (bEnable)
2108*53ee8cc1Swenshuai.xi {
2109*53ee8cc1Swenshuai.xi u8Temp = u8Temp | 0x01; //bit0: clk, bit1~8:data , bit9: sync, bit10:valid
2110*53ee8cc1Swenshuai.xi }
2111*53ee8cc1Swenshuai.xi else
2112*53ee8cc1Swenshuai.xi {
2113*53ee8cc1Swenshuai.xi u8Temp = u8Temp & (~0x01);
2114*53ee8cc1Swenshuai.xi }
2115*53ee8cc1Swenshuai.xi
2116*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("---> INTERN_DVBS_Driving_Control(Bit0) = 0x%x \n",u8Temp));
2117*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x101E10, u8Temp);
2118*53ee8cc1Swenshuai.xi }
2119*53ee8cc1Swenshuai.xi
2120*53ee8cc1Swenshuai.xi /************************************************************************************************
2121*53ee8cc1Swenshuai.xi Subject: Clk Inversion control
2122*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_Clk_Inversion_Control
2123*53ee8cc1Swenshuai.xi Parmeter: bInversionEnable : TRUE For Inversion Action
2124*53ee8cc1Swenshuai.xi Return: void
2125*53ee8cc1Swenshuai.xi Remark:
2126*53ee8cc1Swenshuai.xi *************************************************************************************************/
INTERN_DVBS_Clk_Inversion_Control(MS_BOOL bInversionEnable)2127*53ee8cc1Swenshuai.xi void INTERN_DVBS_Clk_Inversion_Control(MS_BOOL bInversionEnable)
2128*53ee8cc1Swenshuai.xi {
2129*53ee8cc1Swenshuai.xi MS_U8 u8Temp;
2130*53ee8cc1Swenshuai.xi
2131*53ee8cc1Swenshuai.xi u8Temp = HAL_DMD_RIU_ReadByte(0x103301);
2132*53ee8cc1Swenshuai.xi
2133*53ee8cc1Swenshuai.xi if (bInversionEnable)
2134*53ee8cc1Swenshuai.xi {
2135*53ee8cc1Swenshuai.xi u8Temp = u8Temp | 0x02; //bit 9: clk inv
2136*53ee8cc1Swenshuai.xi }
2137*53ee8cc1Swenshuai.xi else
2138*53ee8cc1Swenshuai.xi {
2139*53ee8cc1Swenshuai.xi u8Temp = u8Temp & (~0x02);
2140*53ee8cc1Swenshuai.xi }
2141*53ee8cc1Swenshuai.xi
2142*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("---> Inversion(Bit9) = 0x%x \n",u8Temp));
2143*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103301, u8Temp);
2144*53ee8cc1Swenshuai.xi }
2145*53ee8cc1Swenshuai.xi
2146*53ee8cc1Swenshuai.xi /************************************************************************************************
2147*53ee8cc1Swenshuai.xi Subject: Transport stream serial/parallel control
2148*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_Serial_Control
2149*53ee8cc1Swenshuai.xi Parmeter: bEnable : TRUE For serial
2150*53ee8cc1Swenshuai.xi Return: MS_BOOL :
2151*53ee8cc1Swenshuai.xi Remark:
2152*53ee8cc1Swenshuai.xi *************************************************************************************************/
INTERN_DVBS_Serial_Control(MS_BOOL bEnable,MS_U8 u8TSClk)2153*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Serial_Control(MS_BOOL bEnable, MS_U8 u8TSClk)
2154*53ee8cc1Swenshuai.xi {
2155*53ee8cc1Swenshuai.xi MS_U8 status = true;
2156*53ee8cc1Swenshuai.xi MS_U8 temp_val;
2157*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" @INTERN_DVBS_ts... u8TSClk=%d\n", u8TSClk));
2158*53ee8cc1Swenshuai.xi
2159*53ee8cc1Swenshuai.xi if (u8TSClk == 0xFF) u8TSClk=0x13;
2160*53ee8cc1Swenshuai.xi if (bEnable) //Serial mode for TS pad
2161*53ee8cc1Swenshuai.xi {
2162*53ee8cc1Swenshuai.xi // serial
2163*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103308, 0x01); // serial mode: 0x0401
2164*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103309, 0x04); // reg_ckg_dvbtc_ts@0x04
2165*53ee8cc1Swenshuai.xi
2166*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103300, 0x00); // serial mode 0x0400
2167*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_SERIAL_INVERSION == 0)
2168*53ee8cc1Swenshuai.xi //HAL_DMD_RIU_WriteByte(0x103301, 0x04); // reg_ckg_dvbtmk_ts_out_mode@0x00
2169*53ee8cc1Swenshuai.xi temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2170*53ee8cc1Swenshuai.xi temp_val|=0x04;
2171*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2172*53ee8cc1Swenshuai.xi #else
2173*53ee8cc1Swenshuai.xi // HAL_DMD_RIU_WriteByte(0x103301, 0x07); // reg_ckg_dvbtmk_ts_out_mode@0x00
2174*53ee8cc1Swenshuai.xi temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2175*53ee8cc1Swenshuai.xi temp_val|=0x07;
2176*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2177*53ee8cc1Swenshuai.xi #endif
2178*53ee8cc1Swenshuai.xi //move to drvSYS HAL_DMD_RIU_WriteByte(0x101EA5, HAL_DMD_RIU_ReadByte(0x101EA5)&0xEF); // PAD_TS1 is used as output
2179*53ee8cc1Swenshuai.xi //move to drvSYS HAL_DMD_RIU_WriteByte(0x101EAF, HAL_DMD_RIU_ReadByte(0x101EAF)&0xE3); // PAD_TS1 Disable TS CLK PAD
2180*53ee8cc1Swenshuai.xi
2181*53ee8cc1Swenshuai.xi //// INTERN_DVBS TS Control: Serial //////////
2182*53ee8cc1Swenshuai.xi
2183*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_SERIAL, TS_SERIAL);
2184*53ee8cc1Swenshuai.xi
2185*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_SERIAL_INVERSION == 0)
2186*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_OUT_INV, 0);
2187*53ee8cc1Swenshuai.xi #else
2188*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_OUT_INV, 1);
2189*53ee8cc1Swenshuai.xi #endif
2190*53ee8cc1Swenshuai.xi gsCmdPacketDVBS.cmd_code = CMD_TS_CTRL;
2191*53ee8cc1Swenshuai.xi
2192*53ee8cc1Swenshuai.xi gsCmdPacketDVBS.param[0] = TS_SERIAL;
2193*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_SERIAL_INVERSION == 0)
2194*53ee8cc1Swenshuai.xi gsCmdPacketDVBS.param[1] = 0;//TS_CLK_NO_INV;
2195*53ee8cc1Swenshuai.xi #else
2196*53ee8cc1Swenshuai.xi gsCmdPacketDVBS.param[1] = 1;//TS_CLK_INVERSE;
2197*53ee8cc1Swenshuai.xi #endif
2198*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_Cmd_Packet_Send(&gsCmdPacketDVBS, 2);
2199*53ee8cc1Swenshuai.xi }
2200*53ee8cc1Swenshuai.xi else
2201*53ee8cc1Swenshuai.xi {
2202*53ee8cc1Swenshuai.xi //parallel
2203*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103308, 0x01); // parallel mode:0x0001
2204*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103309, 0x00); // reg_ckg_dvbtc_ts@0x04
2205*53ee8cc1Swenshuai.xi
2206*53ee8cc1Swenshuai.xi //HAL_DMD_RIU_WriteByte(0x103300, 0x11); // parallel mode: 0x0511 => ts_clk=288/(2*(0x11+1))=8MHz
2207*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103300, u8TSClk); // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
2208*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_PARALLEL_INVERSION == 0)
2209*53ee8cc1Swenshuai.xi //HAL_DMD_RIU_WriteByte(0x103301, 0x05); // reg_ckg_dvbtmk_ts_out_mode@0x00
2210*53ee8cc1Swenshuai.xi temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2211*53ee8cc1Swenshuai.xi temp_val|=0x05;
2212*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2213*53ee8cc1Swenshuai.xi #else
2214*53ee8cc1Swenshuai.xi //HAL_DMD_RIU_WriteByte(0x103301, 0x07); // reg_ckg_dvbtmk_ts_out_mode@0x00
2215*53ee8cc1Swenshuai.xi temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2216*53ee8cc1Swenshuai.xi temp_val|=0x07;
2217*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2218*53ee8cc1Swenshuai.xi #endif
2219*53ee8cc1Swenshuai.xi
2220*53ee8cc1Swenshuai.xi //move to drvSYS HAL_DMD_RIU_WriteByte(0x101EA5, HAL_DMD_RIU_ReadByte(0x101EA5)|0x10); // PAD_TS1 is used as output
2221*53ee8cc1Swenshuai.xi //move to drvSYS HAL_DMD_RIU_WriteByte(0x101EAF, (HAL_DMD_RIU_ReadByte(0x101EAF)&0xC0)|0x11); // PAD_TS1 enable TS clk pad
2222*53ee8cc1Swenshuai.xi
2223*53ee8cc1Swenshuai.xi //// INTERN_DVBS TS Control: Parallel //////////
2224*53ee8cc1Swenshuai.xi
2225*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_SERIAL, TS_PARALLEL);
2226*53ee8cc1Swenshuai.xi
2227*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_SERIAL_INVERSION == 0)
2228*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_OUT_INV, 0);
2229*53ee8cc1Swenshuai.xi #else
2230*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_OUT_INV, 1);
2231*53ee8cc1Swenshuai.xi #endif
2232*53ee8cc1Swenshuai.xi //// INTERN_DVBC TS Control: Parallel //////////
2233*53ee8cc1Swenshuai.xi gsCmdPacketDVBS.cmd_code = CMD_TS_CTRL;
2234*53ee8cc1Swenshuai.xi
2235*53ee8cc1Swenshuai.xi gsCmdPacketDVBS.param[0] = TS_PARALLEL;
2236*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_PARALLEL_INVERSION == 0)
2237*53ee8cc1Swenshuai.xi gsCmdPacketDVBS.param[1] = 0;//TS_CLK_NO_INV;
2238*53ee8cc1Swenshuai.xi #else
2239*53ee8cc1Swenshuai.xi gsCmdPacketDVBS.param[1] = 1;//TS_CLK_INVERSE;
2240*53ee8cc1Swenshuai.xi #endif
2241*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_Cmd_Packet_Send(&gsCmdPacketDVBS, 2);
2242*53ee8cc1Swenshuai.xi }
2243*53ee8cc1Swenshuai.xi
2244*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_SERIAL_INVERSION == 0)
2245*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("---> Inversion(Bit5) = %d \n",0 ));
2246*53ee8cc1Swenshuai.xi #else
2247*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("---> Inversion(Bit5) = %d \n",1 ));
2248*53ee8cc1Swenshuai.xi #endif
2249*53ee8cc1Swenshuai.xi
2250*53ee8cc1Swenshuai.xi INTERN_DVBS_Driving_Control(INTERN_DVBS_DTV_DRIVING_LEVEL);
2251*53ee8cc1Swenshuai.xi return status;
2252*53ee8cc1Swenshuai.xi }
2253*53ee8cc1Swenshuai.xi
2254*53ee8cc1Swenshuai.xi /************************************************************************************************
2255*53ee8cc1Swenshuai.xi Subject: TS1 output control
2256*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_PAD_TS1_Enable
2257*53ee8cc1Swenshuai.xi Parmeter: flag : TRUE For Turn on TS1, FALSE For Turn off TS1
2258*53ee8cc1Swenshuai.xi Return: void
2259*53ee8cc1Swenshuai.xi Remark:
2260*53ee8cc1Swenshuai.xi *************************************************************************************************/
INTERN_DVBS_PAD_TS1_Enable(MS_BOOL flag)2261*53ee8cc1Swenshuai.xi void INTERN_DVBS_PAD_TS1_Enable(MS_BOOL flag)
2262*53ee8cc1Swenshuai.xi {
2263*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" @INTERN_DVBS_TS1_Enable... \n"));
2264*53ee8cc1Swenshuai.xi
2265*53ee8cc1Swenshuai.xi if(flag) // PAD_TS1 Enable TS CLK PAD
2266*53ee8cc1Swenshuai.xi {
2267*53ee8cc1Swenshuai.xi //printf("=== TS1_Enable ===\n");
2268*53ee8cc1Swenshuai.xi //HAL_DMD_RIU_WriteByte(0x101EA5, HAL_DMD_RIU_ReadByte(0x101EA5)|0x10); //For T3
2269*53ee8cc1Swenshuai.xi //HAL_DMD_RIU_WriteByte(0x101EAF, HAL_DMD_RIU_ReadByte(0x101EAF)|0x18); //For T4
2270*53ee8cc1Swenshuai.xi //move to drvSYS HAL_DMD_RIU_WriteByte(0x101EAF, HAL_DMD_RIU_ReadByte(0x101EAF)|0x11); //For T8
2271*53ee8cc1Swenshuai.xi }
2272*53ee8cc1Swenshuai.xi else // PAD_TS1 Disable TS CLK PAD
2273*53ee8cc1Swenshuai.xi {
2274*53ee8cc1Swenshuai.xi //printf("=== TS1_Disable ===\n");
2275*53ee8cc1Swenshuai.xi //HAL_DMD_RIU_WriteByte(0x101EA5, HAL_DMD_RIU_ReadByte(0x101EA5)&0xEF); //For T3
2276*53ee8cc1Swenshuai.xi //HAL_DMD_RIU_WriteByte(0x101EAF, HAL_DMD_RIU_ReadByte(0x101EAF)&0xE3); //For T4
2277*53ee8cc1Swenshuai.xi //move to drvSYS HAL_DMD_RIU_WriteByte(0x101EAF, HAL_DMD_RIU_ReadByte(0x101EAF)&0xC0); //For T8
2278*53ee8cc1Swenshuai.xi }
2279*53ee8cc1Swenshuai.xi }
2280*53ee8cc1Swenshuai.xi
2281*53ee8cc1Swenshuai.xi /************************************************************************************************
2282*53ee8cc1Swenshuai.xi Subject: channel change config
2283*53ee8cc1Swenshuai.xi Function: INTERN_DVBC_Config
2284*53ee8cc1Swenshuai.xi Parmeter: BW: bandwidth
2285*53ee8cc1Swenshuai.xi Return: MS_BOOL :
2286*53ee8cc1Swenshuai.xi Remark:
2287*53ee8cc1Swenshuai.xi *************************************************************************************************/
INTERN_DVBS_Config(MS_U32 u32SymbolRate,DMD_DVBS_MODULATION_TYPE eQamMode,MS_U32 u32IFFreq,MS_BOOL bSpecInv,MS_BOOL bSerialTS,MS_U8 u8TSClk,MS_U16 * pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)2288*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Config(MS_U32 u32SymbolRate, DMD_DVBS_MODULATION_TYPE eQamMode, MS_U32 u32IFFreq, MS_BOOL bSpecInv, MS_BOOL bSerialTS, MS_U8 u8TSClk, MS_U16 *pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)
2289*53ee8cc1Swenshuai.xi {
2290*53ee8cc1Swenshuai.xi
2291*53ee8cc1Swenshuai.xi MS_BOOL status= true;
2292*53ee8cc1Swenshuai.xi MS_U16 u16CenterFreq;
2293*53ee8cc1Swenshuai.xi // MS_U16 u16Fc = 0;
2294*53ee8cc1Swenshuai.xi MS_U8 temp_val;
2295*53ee8cc1Swenshuai.xi MS_U8 u8Data =0;
2296*53ee8cc1Swenshuai.xi MS_U8 u8counter = 0;
2297*53ee8cc1Swenshuai.xi MS_U32 u32CurrentSR;
2298*53ee8cc1Swenshuai.xi
2299*53ee8cc1Swenshuai.xi u32CurrentSR = u32SymbolRate/1000; //KHz
2300*53ee8cc1Swenshuai.xi //u32SymbolRate= u32SymbolRate/1000;//to match fw format
2301*53ee8cc1Swenshuai.xi u16CenterFreq =u32IFFreq;
2302*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" @INTERN_DVBS_config+, SR=%d, QAM=%d, u32IFFreq=%d, bSpecInv=%d, bSerialTS=%d, u8TSClk=%d\n", u32CurrentSR, eQamMode, u32IFFreq, bSpecInv, bSerialTS, u8TSClk));
2303*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_Config, t = %d\n",MsOS_GetSystemTime()));
2304*53ee8cc1Swenshuai.xi
2305*53ee8cc1Swenshuai.xi u8TSClk=0x05;//if (u8TSClk == 0xFF) u8TSClk=0x13;//set a fater speed for initial condition
2306*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_Reset();
2307*53ee8cc1Swenshuai.xi
2308*53ee8cc1Swenshuai.xi u8DemodLockFlag=0;
2309*53ee8cc1Swenshuai.xi
2310*53ee8cc1Swenshuai.xi // Symbol Rate
2311*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L, u32CurrentSR&0xff);
2312*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H, (u32CurrentSR>>8)&0xff);
2313*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_DMDTOP_DBG_5, (u32CurrentSR>>16)&0xff);
2314*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>INTERN_DVBS_Config u32SymbolRate %d<<<\n", u32CurrentSR));
2315*53ee8cc1Swenshuai.xi
2316*53ee8cc1Swenshuai.xi #if 0
2317*53ee8cc1Swenshuai.xi //======== check SR is right or not ===========
2318*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L, &u8Data);
2319*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>Mailbox read: E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L addr=%d mailbox value=%d<<<\n", E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L,u8Data));
2320*53ee8cc1Swenshuai.xi u32SR =u8Data;
2321*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H, &u8Data);
2322*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>Mailbox read: E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H addr=%d mailbox value=%d<<<\n", E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H,u8Data));
2323*53ee8cc1Swenshuai.xi u32SR =((U32)u8Data<<8)|u32SR ;
2324*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_5, &u8Data);
2325*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>Mailbox read: E_DMD_S2_MB_DMDTOP_DBG_5 addr=%d mailbox value=%d<<<\n", E_DMD_S2_MB_DMDTOP_DBG_5,u8Data));
2326*53ee8cc1Swenshuai.xi u32SR =((U32)u8Data<<16)|u32SR;
2327*53ee8cc1Swenshuai.xi //=================================================
2328*53ee8cc1Swenshuai.xi #endif
2329*53ee8cc1Swenshuai.xi
2330*53ee8cc1Swenshuai.xi // IQ Swap ,ADCPLL IQ swap / DMDANA_IQ_SWAP
2331*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_IQ_SWAP, bSpecInv? 0x01:0x00);
2332*53ee8cc1Swenshuai.xi if(bSpecInv)
2333*53ee8cc1Swenshuai.xi {
2334*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DMDANA_REG_BASE+0xC0, &u8Data);//Demod\reg_dmdana.xls
2335*53ee8cc1Swenshuai.xi u8Data|=(0x02);
2336*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DMDANA_REG_BASE+0xC0, u8Data);
2337*53ee8cc1Swenshuai.xi }
2338*53ee8cc1Swenshuai.xi
2339*53ee8cc1Swenshuai.xi // TS mode
2340*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_SERIAL, bSerialTS? 0x01:0x00);
2341*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>INTERN_DVBS_Config TS Serial %d<<<\n", bSerialTS));
2342*53ee8cc1Swenshuai.xi _bSerialTS = bSerialTS;
2343*53ee8cc1Swenshuai.xi
2344*53ee8cc1Swenshuai.xi if (bSerialTS)
2345*53ee8cc1Swenshuai.xi {
2346*53ee8cc1Swenshuai.xi // serial
2347*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103308, 0x01); // parallel mode:0x0001 / serial mode: 0x0401
2348*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103309, 0x04); // reg_ckg_dvbtc_ts@0x04
2349*53ee8cc1Swenshuai.xi
2350*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103300, 0x00); // parallel mode: 0x0511 /serial mode 0x0400
2351*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_SERIAL_INVERSION == 0)
2352*53ee8cc1Swenshuai.xi temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2353*53ee8cc1Swenshuai.xi temp_val|=0x04;
2354*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2355*53ee8cc1Swenshuai.xi #else
2356*53ee8cc1Swenshuai.xi temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2357*53ee8cc1Swenshuai.xi temp_val|=0x07;
2358*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2359*53ee8cc1Swenshuai.xi #endif
2360*53ee8cc1Swenshuai.xi }
2361*53ee8cc1Swenshuai.xi else
2362*53ee8cc1Swenshuai.xi {
2363*53ee8cc1Swenshuai.xi //parallel
2364*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103308, 0x01); // parallel mode:0x0001 / serial mode: 0x0401
2365*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103309, 0x00); // reg_ckg_dvbtc_ts@0x04
2366*53ee8cc1Swenshuai.xi
2367*53ee8cc1Swenshuai.xi //HAL_DMD_RIU_WriteByte(0x103300, 0x11); // parallel mode: 0x0511 => ts_clk=288/(2*(0x11+1))=8MHz
2368*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103300, u8TSClk); // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
2369*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_PARALLEL_INVERSION == 0)
2370*53ee8cc1Swenshuai.xi temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2371*53ee8cc1Swenshuai.xi temp_val|=0x05;
2372*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2373*53ee8cc1Swenshuai.xi #else
2374*53ee8cc1Swenshuai.xi temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2375*53ee8cc1Swenshuai.xi temp_val|=0x07;
2376*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2377*53ee8cc1Swenshuai.xi #endif
2378*53ee8cc1Swenshuai.xi }
2379*53ee8cc1Swenshuai.xi #if (INTERN_DVBS_INTERNAL_DEBUG == 1)
2380*53ee8cc1Swenshuai.xi INTERN_DVBS_Show_Demod_Version();
2381*53ee8cc1Swenshuai.xi #endif
2382*53ee8cc1Swenshuai.xi
2383*53ee8cc1Swenshuai.xi //-----------------------------------------------------------
2384*53ee8cc1Swenshuai.xi //From INTERN_DVBS_Demod_Restart function.
2385*53ee8cc1Swenshuai.xi
2386*53ee8cc1Swenshuai.xi //FW sw reset
2387*53ee8cc1Swenshuai.xi //[0]: 0: SW Reset, 1: Start state machine
2388*53ee8cc1Swenshuai.xi //[1]: 1: Blind scan enable, 0: manual scan
2389*53ee8cc1Swenshuai.xi //[2]: 1: Code flow track enable
2390*53ee8cc1Swenshuai.xi //[3]: 1: go to AGC state
2391*53ee8cc1Swenshuai.xi //[4]: 1: set DiSEqC
2392*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg((TOP_REG_BASE + 0x60*2), &u8Data);
2393*53ee8cc1Swenshuai.xi u8Data = (u8Data&0xF0)|0x01;
2394*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg((TOP_REG_BASE + 0x60*2), u8Data);
2395*53ee8cc1Swenshuai.xi //DBG_INTERN_DVBS(printf(">>>REG write check: addr=%d value=%d<<<\n",(TOP_REG_BASE + 0x60*2), u8Data));
2396*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg((TOP_REG_BASE + 0x60*2), &u8Data);
2397*53ee8cc1Swenshuai.xi //DBG_INTERN_DVBS(printf(">>>REG read check: addr=%d value=%d<<<\n",(TOP_REG_BASE + 0x60*2), u8Data));
2398*53ee8cc1Swenshuai.xi
2399*53ee8cc1Swenshuai.xi u8counter = 20;
2400*53ee8cc1Swenshuai.xi while( ((u8Data&0x01) == 0x00) && (u8counter != 0) )
2401*53ee8cc1Swenshuai.xi {
2402*53ee8cc1Swenshuai.xi MsOS_DelayTask(1);
2403*53ee8cc1Swenshuai.xi printf("TOP_WR_DBG_90=0x%x, status=%d, u8counter=%d\n", u8Data, status, u8counter);
2404*53ee8cc1Swenshuai.xi u8Data|=0x01;
2405*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
2406*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
2407*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>(while)REG read check: addr=%d value=%d<<<\n",(TOP_REG_BASE + 0x60*2), u8Data));
2408*53ee8cc1Swenshuai.xi u8counter--;
2409*53ee8cc1Swenshuai.xi }
2410*53ee8cc1Swenshuai.xi
2411*53ee8cc1Swenshuai.xi if((u8Data & 0x01)==0x00)
2412*53ee8cc1Swenshuai.xi {
2413*53ee8cc1Swenshuai.xi status = FALSE;
2414*53ee8cc1Swenshuai.xi }
2415*53ee8cc1Swenshuai.xi
2416*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_config done\n"));
2417*53ee8cc1Swenshuai.xi return status;
2418*53ee8cc1Swenshuai.xi }
2419*53ee8cc1Swenshuai.xi /************************************************************************************************
2420*53ee8cc1Swenshuai.xi Subject: channel change config
2421*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_Blind_Scan_Config
2422*53ee8cc1Swenshuai.xi Parmeter: BW: bandwidth
2423*53ee8cc1Swenshuai.xi Return: MS_BOOL :
2424*53ee8cc1Swenshuai.xi Remark:
2425*53ee8cc1Swenshuai.xi *************************************************************************************************/
INTERN_DVBS_BlindScan_Config(MS_U32 u32SymbolRate,DMD_DVBS_MODULATION_TYPE eQamMode,MS_U32 u32IFFreq,MS_BOOL bSpecInv,MS_BOOL bSerialTS,MS_U8 u8TSClk,MS_U16 * pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)2426*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_Config(MS_U32 u32SymbolRate, DMD_DVBS_MODULATION_TYPE eQamMode, MS_U32 u32IFFreq, MS_BOOL bSpecInv, MS_BOOL bSerialTS, MS_U8 u8TSClk, MS_U16 *pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)
2427*53ee8cc1Swenshuai.xi {
2428*53ee8cc1Swenshuai.xi
2429*53ee8cc1Swenshuai.xi MS_BOOL status= true;
2430*53ee8cc1Swenshuai.xi MS_U16 u16CenterFreq;
2431*53ee8cc1Swenshuai.xi // MS_U16 u16Fc = 0;
2432*53ee8cc1Swenshuai.xi MS_U8 temp_val;
2433*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
2434*53ee8cc1Swenshuai.xi MS_U16 u16WaitCount = 0;
2435*53ee8cc1Swenshuai.xi MS_U32 u32CurrentSR;
2436*53ee8cc1Swenshuai.xi
2437*53ee8cc1Swenshuai.xi u32CurrentSR = u32SymbolRate/1000; //KHz
2438*53ee8cc1Swenshuai.xi //u32SymbolRate= u32SymbolRate/1000;//to match fw format
2439*53ee8cc1Swenshuai.xi u16CenterFreq =u32IFFreq;
2440*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" @INTERN_DVBS_blindScan_Config+, SR=%d, QAM=%d, u32IFFreq=%d, bSpecInv=%d, bSerialTS=%d, u8TSClk=%d\n", u32CurrentSR, eQamMode, u32IFFreq, bSpecInv, bSerialTS, u8TSClk));
2441*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_blindScan_Config, t = %d\n",MsOS_GetSystemTime()));
2442*53ee8cc1Swenshuai.xi
2443*53ee8cc1Swenshuai.xi //status &= INTERN_DVBS_Reset();
2444*53ee8cc1Swenshuai.xi g_dvbs_lock = 0;
2445*53ee8cc1Swenshuai.xi u8DemodLockFlag=0;
2446*53ee8cc1Swenshuai.xi
2447*53ee8cc1Swenshuai.xi // Symbol Rate
2448*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L, u32CurrentSR&0xff);
2449*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H, (u32CurrentSR>>8)&0xff);
2450*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_DMDTOP_DBG_5, (u32CurrentSR>>16)&0xff);
2451*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>INTERN_DVBS_Config u32SymbolRate %d<<<\n", u32CurrentSR));
2452*53ee8cc1Swenshuai.xi
2453*53ee8cc1Swenshuai.xi #if 0
2454*53ee8cc1Swenshuai.xi //======== check SR is right or not ===========
2455*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L, &u8Data);
2456*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>Mailbox read: E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L addr=%d mailbox value=%d<<<\n", E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L,u8Data));
2457*53ee8cc1Swenshuai.xi u32SR =u8Data;
2458*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H, &u8Data);
2459*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>Mailbox read: E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H addr=%d mailbox value=%d<<<\n", E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H,u8Data));
2460*53ee8cc1Swenshuai.xi u32SR =((U32)u8Data<<8)|u32SR ;
2461*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_5, &u8Data);
2462*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>Mailbox read: E_DMD_S2_MB_DMDTOP_DBG_5 addr=%d mailbox value=%d<<<\n", E_DMD_S2_MB_DMDTOP_DBG_5,u8Data));
2463*53ee8cc1Swenshuai.xi u32SR =((U32)u8Data<<16)|u32SR;
2464*53ee8cc1Swenshuai.xi //=================================================
2465*53ee8cc1Swenshuai.xi #endif
2466*53ee8cc1Swenshuai.xi
2467*53ee8cc1Swenshuai.xi // IQ Swap ,ADCPLL IQ swap / DMDANA_IQ_SWAP
2468*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_IQ_SWAP, bSpecInv? 0x01:0x00);
2469*53ee8cc1Swenshuai.xi if(bSpecInv)
2470*53ee8cc1Swenshuai.xi {
2471*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DMDANA_REG_BASE+0xC0, &u8Data);//Demod\reg_dmdana.xls
2472*53ee8cc1Swenshuai.xi u8Data|=(0x02);
2473*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DMDANA_REG_BASE+0xC0, u8Data);
2474*53ee8cc1Swenshuai.xi }
2475*53ee8cc1Swenshuai.xi
2476*53ee8cc1Swenshuai.xi // TS mode
2477*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_SERIAL, bSerialTS? 0x01:0x00);
2478*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>INTERN_DVBS_Config TS Serial %d<<<\n", bSerialTS));
2479*53ee8cc1Swenshuai.xi _bSerialTS = bSerialTS;
2480*53ee8cc1Swenshuai.xi u8TSClk=0x05;//if (u8TSClk == 0xFF) u8TSClk=0x13;//set a fater speed for initial condition
2481*53ee8cc1Swenshuai.xi
2482*53ee8cc1Swenshuai.xi if (bSerialTS)
2483*53ee8cc1Swenshuai.xi {
2484*53ee8cc1Swenshuai.xi // serial
2485*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103308, 0x01); // parallel mode:0x0001 / serial mode: 0x0401
2486*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103309, 0x04); // reg_ckg_dvbtc_ts@0x04
2487*53ee8cc1Swenshuai.xi
2488*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103300, 0x00); // parallel mode: 0x0511 /serial mode 0x0400
2489*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_SERIAL_INVERSION == 0)
2490*53ee8cc1Swenshuai.xi temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2491*53ee8cc1Swenshuai.xi temp_val|=0x04;
2492*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2493*53ee8cc1Swenshuai.xi #else
2494*53ee8cc1Swenshuai.xi temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2495*53ee8cc1Swenshuai.xi temp_val|=0x07;
2496*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2497*53ee8cc1Swenshuai.xi #endif
2498*53ee8cc1Swenshuai.xi }
2499*53ee8cc1Swenshuai.xi else
2500*53ee8cc1Swenshuai.xi {
2501*53ee8cc1Swenshuai.xi //parallel
2502*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103308, 0x01); // parallel mode:0x0001 / serial mode: 0x0401
2503*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103309, 0x00); // reg_ckg_dvbtc_ts@0x04
2504*53ee8cc1Swenshuai.xi
2505*53ee8cc1Swenshuai.xi //HAL_DMD_RIU_WriteByte(0x103300, 0x11); // parallel mode: 0x0511 => ts_clk=288/(2*(0x11+1))=8MHz
2506*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103300, u8TSClk); // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
2507*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_PARALLEL_INVERSION == 0)
2508*53ee8cc1Swenshuai.xi temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2509*53ee8cc1Swenshuai.xi temp_val|=0x05;
2510*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2511*53ee8cc1Swenshuai.xi #else
2512*53ee8cc1Swenshuai.xi temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2513*53ee8cc1Swenshuai.xi temp_val|=0x07;
2514*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2515*53ee8cc1Swenshuai.xi #endif
2516*53ee8cc1Swenshuai.xi }
2517*53ee8cc1Swenshuai.xi #if (INTERN_DVBS_INTERNAL_DEBUG == 1)
2518*53ee8cc1Swenshuai.xi INTERN_DVBS_Show_Demod_Version();
2519*53ee8cc1Swenshuai.xi #endif
2520*53ee8cc1Swenshuai.xi
2521*53ee8cc1Swenshuai.xi //-----------------------------------------------------------
2522*53ee8cc1Swenshuai.xi //From INTERN_DVBS_Demod_Restart function.
2523*53ee8cc1Swenshuai.xi
2524*53ee8cc1Swenshuai.xi //enable send DiSEqC
2525*53ee8cc1Swenshuai.xi //[0]: 0: SW Reset, 1: Start state machine
2526*53ee8cc1Swenshuai.xi //[1]: 1: Blind scan enable, 0: manual scan
2527*53ee8cc1Swenshuai.xi //[2]: 1: Code flow track enable
2528*53ee8cc1Swenshuai.xi //[3]: 1: go to AGC state
2529*53ee8cc1Swenshuai.xi //[4]: 1: set DiSEqC
2530*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg((TOP_REG_BASE + 0x60*2), &u8Data);
2531*53ee8cc1Swenshuai.xi u8Data |= 0x08;
2532*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg((TOP_REG_BASE + 0x60*2), u8Data);
2533*53ee8cc1Swenshuai.xi
2534*53ee8cc1Swenshuai.xi u16WaitCount=0;
2535*53ee8cc1Swenshuai.xi do
2536*53ee8cc1Swenshuai.xi {
2537*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_STATE_FLAG, &u8Data);//SubState
2538*53ee8cc1Swenshuai.xi u16WaitCount++;
2539*53ee8cc1Swenshuai.xi //DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_NextFreq u8Data:0x%x u16WaitCount:%d\n", u8Data, u16WaitCount));
2540*53ee8cc1Swenshuai.xi MsOS_DelayTask(1);
2541*53ee8cc1Swenshuai.xi }while((u8Data!=0x01)&&(u16WaitCount<INTERN_DVBS_DEMOD_WAIT_TIMEOUT));
2542*53ee8cc1Swenshuai.xi
2543*53ee8cc1Swenshuai.xi // disable blind scan
2544*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg((TOP_REG_BASE + 0x60*2), &u8Data);
2545*53ee8cc1Swenshuai.xi u8Data&=~(0x02);
2546*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg((TOP_REG_BASE + 0x60*2), u8Data);
2547*53ee8cc1Swenshuai.xi
2548*53ee8cc1Swenshuai.xi // make state machine running from while in state 1 substate0
2549*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg((TOP_REG_BASE + 0x60*2), &u8Data);
2550*53ee8cc1Swenshuai.xi u8Data&=~(0x08);
2551*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg((TOP_REG_BASE + 0x60*2), u8Data);
2552*53ee8cc1Swenshuai.xi
2553*53ee8cc1Swenshuai.xi
2554*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_blindScan_Config done\n"));
2555*53ee8cc1Swenshuai.xi return status;
2556*53ee8cc1Swenshuai.xi }
2557*53ee8cc1Swenshuai.xi
INTERN_DVBS_Power_ON_OFF(MS_U8 bPowerOn)2558*53ee8cc1Swenshuai.xi void INTERN_DVBS_Power_ON_OFF(MS_U8 bPowerOn)
2559*53ee8cc1Swenshuai.xi {
2560*53ee8cc1Swenshuai.xi bPowerOn = bPowerOn;
2561*53ee8cc1Swenshuai.xi }
2562*53ee8cc1Swenshuai.xi
INTERN_DVBS_Power_Save(void)2563*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Power_Save(void)
2564*53ee8cc1Swenshuai.xi {
2565*53ee8cc1Swenshuai.xi return TRUE;
2566*53ee8cc1Swenshuai.xi }
2567*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
2568*53ee8cc1Swenshuai.xi // END System Info Function
2569*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
2570*53ee8cc1Swenshuai.xi
2571*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
2572*53ee8cc1Swenshuai.xi // Get And Show Info Function
2573*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
2574*53ee8cc1Swenshuai.xi /************************************************************************************************
2575*53ee8cc1Swenshuai.xi Subject: enable hw to lock channel
2576*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_Active
2577*53ee8cc1Swenshuai.xi Parmeter: bEnable
2578*53ee8cc1Swenshuai.xi Return: MS_BOOL
2579*53ee8cc1Swenshuai.xi Remark:
2580*53ee8cc1Swenshuai.xi *************************************************************************************************/
INTERN_DVBS_Active(MS_BOOL bEnable)2581*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Active(MS_BOOL bEnable)
2582*53ee8cc1Swenshuai.xi {
2583*53ee8cc1Swenshuai.xi MS_U8 status = TRUE;
2584*53ee8cc1Swenshuai.xi //MS_U8 u8Data;
2585*53ee8cc1Swenshuai.xi
2586*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" @INTERN_DVBS_Active\n"));
2587*53ee8cc1Swenshuai.xi
2588*53ee8cc1Swenshuai.xi //// INTERN_DVBS Finite State Machine on/off //////////
2589*53ee8cc1Swenshuai.xi #if 0
2590*53ee8cc1Swenshuai.xi gsCmdPacketDVBC.cmd_code = CMD_FSM_CTRL;
2591*53ee8cc1Swenshuai.xi
2592*53ee8cc1Swenshuai.xi gsCmdPacketDVBS.param[0] = (MS_U8)bEnable;
2593*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_Cmd_Packet_Send(&gsCmdPacketDVBS, 1);
2594*53ee8cc1Swenshuai.xi #else
2595*53ee8cc1Swenshuai.xi
2596*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(MBRegBase + (0x0e)*2, 0x01); // FSM_EN
2597*53ee8cc1Swenshuai.xi #endif
2598*53ee8cc1Swenshuai.xi
2599*53ee8cc1Swenshuai.xi bDMD_DVBS_NoChannelDetectedWithRFPower = FALSE;
2600*53ee8cc1Swenshuai.xi u32DMD_DVBS_NoChannelTimeAccWithRFPower = 0;
2601*53ee8cc1Swenshuai.xi return status;
2602*53ee8cc1Swenshuai.xi }
2603*53ee8cc1Swenshuai.xi
INTERN_DVBS_GetTsDivNum(MS_FLOAT * fTSDivNum)2604*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetTsDivNum(MS_FLOAT* fTSDivNum)
2605*53ee8cc1Swenshuai.xi {
2606*53ee8cc1Swenshuai.xi MS_U8 u8Data = 0;
2607*53ee8cc1Swenshuai.xi MS_BOOL status = true;
2608*53ee8cc1Swenshuai.xi MS_U32 u32SymbolRate=0;
2609*53ee8cc1Swenshuai.xi //float fSymbolRate;
2610*53ee8cc1Swenshuai.xi //MS_U8 ISSY_EN = 0;
2611*53ee8cc1Swenshuai.xi MS_U8 code_rate_idx = 0;
2612*53ee8cc1Swenshuai.xi MS_U8 pilot_flag = 0;
2613*53ee8cc1Swenshuai.xi MS_U8 fec_type_idx = 0;
2614*53ee8cc1Swenshuai.xi MS_U8 mod_type_idx = 0;
2615*53ee8cc1Swenshuai.xi MS_U16 k_bch_array[2][11] ={
2616*53ee8cc1Swenshuai.xi {16008, 21408, 25728, 32208, 38688, 43040, 48408, 51648, 53840, 57472, 58192},
2617*53ee8cc1Swenshuai.xi { 3072, 5232, 6312, 7032, 9552, 10632, 11712, 12432, 13152, 14232, 0}};
2618*53ee8cc1Swenshuai.xi MS_U16 n_ldpc_array[2] = {64800, 16200};
2619*53ee8cc1Swenshuai.xi MS_FLOAT pilot_term = 0;
2620*53ee8cc1Swenshuai.xi MS_FLOAT k_bch;
2621*53ee8cc1Swenshuai.xi MS_FLOAT n_ldpc;
2622*53ee8cc1Swenshuai.xi MS_FLOAT ts_div_num_offset = 2.0;
2623*53ee8cc1Swenshuai.xi //MS_U32 u32Time_start,u32Time_end;
2624*53ee8cc1Swenshuai.xi //MS_U32 u32temp;
2625*53ee8cc1Swenshuai.xi //MS_FLOAT pkt_interval;
2626*53ee8cc1Swenshuai.xi //MS_U8 time_counter=0;
2627*53ee8cc1Swenshuai.xi
2628*53ee8cc1Swenshuai.xi INTERN_DVBS_GetCurrentSymbolRate(&u32SymbolRate);
2629*53ee8cc1Swenshuai.xi //fSymbolRate=u32SymbolRate+0.0;///1000.0;//Symbol Rate(KHz)
2630*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum u32SymbolRate=%d\n", u32SymbolRate));
2631*53ee8cc1Swenshuai.xi // DMD_DVBS_MODULATION_TYPE pQAMMode;
2632*53ee8cc1Swenshuai.xi
2633*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SYSTEM_TYPE, &u8Data);//V
2634*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum GetCurrentDemodType E_DMD_S2_SYSTEM_TYPE=%d\n", u8Data));//u8Data:0 is S2; 1 is DVBS
2635*53ee8cc1Swenshuai.xi
2636*53ee8cc1Swenshuai.xi if(!u8Data)//DVBS2
2637*53ee8cc1Swenshuai.xi {
2638*53ee8cc1Swenshuai.xi #if 0
2639*53ee8cc1Swenshuai.xi //Get DVBS2 Code Rate
2640*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_CODE_RATE, &u8Data);//V
2641*53ee8cc1Swenshuai.xi printf("[S2]INTERN_DVBS_GetTsDivNum DVBS2 E_DMD_S2_CODERATE=0x%x\n", u8Data);
2642*53ee8cc1Swenshuai.xi switch (u8Data)
2643*53ee8cc1Swenshuai.xi {
2644*53ee8cc1Swenshuai.xi case 0x03: //CR 1/2
2645*53ee8cc1Swenshuai.xi k_bch=32208.0;
2646*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 5;
2647*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=1_2\n"));
2648*53ee8cc1Swenshuai.xi break;
2649*53ee8cc1Swenshuai.xi case 0x01: //CR 1/3
2650*53ee8cc1Swenshuai.xi k_bch=21408.0; //8PSK???
2651*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 6;
2652*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=1_3\n"));
2653*53ee8cc1Swenshuai.xi break;
2654*53ee8cc1Swenshuai.xi case 0x05: //CR 2/3
2655*53ee8cc1Swenshuai.xi k_bch=43040.0;
2656*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 7;
2657*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=2_3\n"));
2658*53ee8cc1Swenshuai.xi break;
2659*53ee8cc1Swenshuai.xi case 0x00: //CR 1/4
2660*53ee8cc1Swenshuai.xi k_bch=16008.0; //8PSK???
2661*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 8;
2662*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=1_4\n"));
2663*53ee8cc1Swenshuai.xi break;
2664*53ee8cc1Swenshuai.xi case 0x06: //CR 3/4
2665*53ee8cc1Swenshuai.xi k_bch=48408.0;
2666*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 9;
2667*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=3_4\n"));
2668*53ee8cc1Swenshuai.xi break;
2669*53ee8cc1Swenshuai.xi case 0x02: //CR 2/5
2670*53ee8cc1Swenshuai.xi k_bch=25728.0; //8PSK???
2671*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 10;
2672*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=2_5\n"));
2673*53ee8cc1Swenshuai.xi break;
2674*53ee8cc1Swenshuai.xi case 0x04: //CR 3/5
2675*53ee8cc1Swenshuai.xi k_bch=38688.0;
2676*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 11;
2677*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=3_5\n"));
2678*53ee8cc1Swenshuai.xi break;
2679*53ee8cc1Swenshuai.xi case 0x07: //CR 4/5
2680*53ee8cc1Swenshuai.xi k_bch=51648.0;
2681*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 12;
2682*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=4_5\n"));
2683*53ee8cc1Swenshuai.xi break;
2684*53ee8cc1Swenshuai.xi case 0x08: //CR 5/6
2685*53ee8cc1Swenshuai.xi k_bch=53840.0;
2686*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 13;
2687*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=5_6\n"));
2688*53ee8cc1Swenshuai.xi break;
2689*53ee8cc1Swenshuai.xi case 0x09: //CR 8/9
2690*53ee8cc1Swenshuai.xi k_bch=57472.0;
2691*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 14;
2692*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=8_9\n"));
2693*53ee8cc1Swenshuai.xi break;
2694*53ee8cc1Swenshuai.xi case 0x0A: //CR 9/10
2695*53ee8cc1Swenshuai.xi k_bch=58192.0;
2696*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 15;
2697*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=9_10\n"));
2698*53ee8cc1Swenshuai.xi break;
2699*53ee8cc1Swenshuai.xi default:
2700*53ee8cc1Swenshuai.xi k_bch=58192.0;
2701*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 15;
2702*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate= default 9_10\n"));
2703*53ee8cc1Swenshuai.xi break;
2704*53ee8cc1Swenshuai.xi } //printf("INTERN_DVBS_GetTsDivNum k_bch=%ld\n", (MS_U32)k_bch);
2705*53ee8cc1Swenshuai.xi #endif
2706*53ee8cc1Swenshuai.xi //INTERN_DVBS_GetCurrentModulationType(&pQAMMode); //V
2707*53ee8cc1Swenshuai.xi //printf("INTERN_DVBS_GetTsDivNum Mod_order=%d\n", modulation_order);
2708*53ee8cc1Swenshuai.xi
2709*53ee8cc1Swenshuai.xi // pilot_flag => 0 : off 1 : on
2710*53ee8cc1Swenshuai.xi // fec_type_idx => 0 : normal 1 : short
2711*53ee8cc1Swenshuai.xi // mod_type_idx => 0 : QPSK 1 : 8PSK 2 : 16APSK 3 : 32APSK
2712*53ee8cc1Swenshuai.xi // code_rate_idx => d0: 1/4, d1: 1/3, d2: 2/5, d3: 1/2, d4: 3/5, d5: 2/3, d6: 3/4, d7: 4/5, d8: 5/6, d9: 8/9, d10: 9/10
2713*53ee8cc1Swenshuai.xi //set TS clock rate
2714*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_CODE_RATE, &code_rate_idx);
2715*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_FEC_TYPE, &fec_type_idx);
2716*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MOD_TYPE, &mod_type_idx);
2717*53ee8cc1Swenshuai.xi modulation_order = mod_type_idx;
2718*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_PILOT_FLAG, &pilot_flag);
2719*53ee8cc1Swenshuai.xi //MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_PILOT_FLAG, &u8Data);
2720*53ee8cc1Swenshuai.xi
2721*53ee8cc1Swenshuai.xi //MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_ISSY_ACTIVE, &ISSY_EN);
2722*53ee8cc1Swenshuai.xi //if(ISSY_EN==0)
2723*53ee8cc1Swenshuai.xi //{
2724*53ee8cc1Swenshuai.xi k_bch = k_bch_array[fec_type_idx][code_rate_idx];
2725*53ee8cc1Swenshuai.xi n_ldpc = n_ldpc_array[fec_type_idx];
2726*53ee8cc1Swenshuai.xi pilot_term = ((float) n_ldpc / modulation_order / 1440 * 36) * pilot_flag;
2727*53ee8cc1Swenshuai.xi if(_bSerialTS)//serial mode
2728*53ee8cc1Swenshuai.xi {
2729*53ee8cc1Swenshuai.xi *fTSDivNum =288000.0/(k_bch/((n_ldpc/modulation_order+90+pilot_term)/u32SymbolRate));
2730*53ee8cc1Swenshuai.xi *fTSDivNum = *fTSDivNum/2 -1;
2731*53ee8cc1Swenshuai.xi }
2732*53ee8cc1Swenshuai.xi else//parallel mode
2733*53ee8cc1Swenshuai.xi {
2734*53ee8cc1Swenshuai.xi *fTSDivNum = 288000.0/(k_bch/((n_ldpc/modulation_order+90+pilot_term)/u32SymbolRate)/8);
2735*53ee8cc1Swenshuai.xi *fTSDivNum = *fTSDivNum/2 -1;
2736*53ee8cc1Swenshuai.xi }
2737*53ee8cc1Swenshuai.xi *fTSDivNum-=ts_div_num_offset;
2738*53ee8cc1Swenshuai.xi //}
2739*53ee8cc1Swenshuai.xi #if 0
2740*53ee8cc1Swenshuai.xi else if(ISSY_EN==1)//ISSY = 1
2741*53ee8cc1Swenshuai.xi {
2742*53ee8cc1Swenshuai.xi //u32Time_start = msAPI_Timer_GetTime0();
2743*53ee8cc1Swenshuai.xi time_counter=0;
2744*53ee8cc1Swenshuai.xi do
2745*53ee8cc1Swenshuai.xi {
2746*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg((0x3E00 + 0x4D*2), &u8Data);//DVBS2OPPRO_ISCR_CAL_DONE (_REG_DVBS2OPPRO(0x4D)+0)
2747*53ee8cc1Swenshuai.xi u8Data &= 0x01;
2748*53ee8cc1Swenshuai.xi // u32Time_end =msAPI_Timer_GetTime0();
2749*53ee8cc1Swenshuai.xi MsOS_DelayTask(1);
2750*53ee8cc1Swenshuai.xi time_counter = time_counter +1;
2751*53ee8cc1Swenshuai.xi }while( (u8Data!=0x01) && ( (time_counter )< 50) );
2752*53ee8cc1Swenshuai.xi
2753*53ee8cc1Swenshuai.xi //read pkt interval
2754*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg((0x3E00 + 0x70*2), &u8Data);
2755*53ee8cc1Swenshuai.xi u32temp = u8Data;
2756*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg((DVBS2OPPRO_REG_BASE + 0x70*2+1), &u8Data);
2757*53ee8cc1Swenshuai.xi u32temp |= (MS_U32)u8Data<<8;
2758*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg((DVBS2OPPRO_REG_BASE + 0x71*2), &u8Data);
2759*53ee8cc1Swenshuai.xi u32temp |= (MS_U32)u8Data<<16;
2760*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg((DVBS2OPPRO_REG_BASE + 0x71*2+1), &u8Data);
2761*53ee8cc1Swenshuai.xi u32temp |= (MS_U32)u8Data<<24;
2762*53ee8cc1Swenshuai.xi pkt_interval = (MS_FLOAT) u32temp / 1024.0;
2763*53ee8cc1Swenshuai.xi if(_bSerialTS)//serial mode
2764*53ee8cc1Swenshuai.xi {
2765*53ee8cc1Swenshuai.xi *fTSDivNum=288000.0 / (188*8*u32SymbolRate/pkt_interval) - ts_div_num_offset;
2766*53ee8cc1Swenshuai.xi *fTSDivNum = (*fTSDivNum-1)/2;
2767*53ee8cc1Swenshuai.xi }
2768*53ee8cc1Swenshuai.xi else
2769*53ee8cc1Swenshuai.xi {
2770*53ee8cc1Swenshuai.xi *fTSDivNum=288000.0 / (188*u32SymbolRate/pkt_interval) - ts_div_num_offset;
2771*53ee8cc1Swenshuai.xi *fTSDivNum = (*fTSDivNum-1)/2;
2772*53ee8cc1Swenshuai.xi }
2773*53ee8cc1Swenshuai.xi
2774*53ee8cc1Swenshuai.xi }
2775*53ee8cc1Swenshuai.xi
2776*53ee8cc1Swenshuai.xi else
2777*53ee8cc1Swenshuai.xi {
2778*53ee8cc1Swenshuai.xi *fTSDivNum =0x0A;
2779*53ee8cc1Swenshuai.xi }
2780*53ee8cc1Swenshuai.xi
2781*53ee8cc1Swenshuai.xi if(*fTSDivNum>255)
2782*53ee8cc1Swenshuai.xi *fTSDivNum=255;
2783*53ee8cc1Swenshuai.xi if(*fTSDivNum<1)
2784*53ee8cc1Swenshuai.xi *fTSDivNum=1;
2785*53ee8cc1Swenshuai.xi
2786*53ee8cc1Swenshuai.xi //printf("INTERN_DVBS_GetTsDivNum Pilot E_DMD_S2_MB_DMDTOP_DBG_9=%d\n", u8Data);
2787*53ee8cc1Swenshuai.xi /*if(u8Data) // Pilot ON
2788*53ee8cc1Swenshuai.xi printf(">>>INTERN_DVBS_GetTsDivNum Pilot ON<<<\n");
2789*53ee8cc1Swenshuai.xi else //Pilot off
2790*53ee8cc1Swenshuai.xi printf(">>>INTERN_DVBS_GetTsDivNum Pilot off<<<\n");
2791*53ee8cc1Swenshuai.xi */
2792*53ee8cc1Swenshuai.xi if(_bSerialTS)
2793*53ee8cc1Swenshuai.xi {
2794*53ee8cc1Swenshuai.xi if(u8Data)//if pilot ON
2795*53ee8cc1Swenshuai.xi {
2796*53ee8cc1Swenshuai.xi if(modulation_order==2)
2797*53ee8cc1Swenshuai.xi *u8TSDivNum = (MS_U8)(144000/(k_bch/((64800/modulation_order+90+36*22)/u32SymbolRate)) - 3);
2798*53ee8cc1Swenshuai.xi else if(modulation_order==3)
2799*53ee8cc1Swenshuai.xi *u8TSDivNum = (MS_U8)(144000/(k_bch/((64800/modulation_order+90+36*15)/u32SymbolRate)) - 3);
2800*53ee8cc1Swenshuai.xi }
2801*53ee8cc1Swenshuai.xi else
2802*53ee8cc1Swenshuai.xi *u8TSDivNum = (MS_U8)(144000/(k_bch/((64800/modulation_order+90)/u32SymbolRate)) - 3);
2803*53ee8cc1Swenshuai.xi }
2804*53ee8cc1Swenshuai.xi else//Parallel mode
2805*53ee8cc1Swenshuai.xi {
2806*53ee8cc1Swenshuai.xi if(u8Data)
2807*53ee8cc1Swenshuai.xi {
2808*53ee8cc1Swenshuai.xi if(modulation_order==2)
2809*53ee8cc1Swenshuai.xi *u8TSDivNum = (MS_U8)(float)(144000/(k_bch/((64800/modulation_order+90.0+36*22)/u32SymbolRate)/8.0) - 3);
2810*53ee8cc1Swenshuai.xi else if(modulation_order==3)
2811*53ee8cc1Swenshuai.xi *u8TSDivNum = (MS_U8)(float)(144000/(k_bch/((64800/modulation_order+90.0+36*15)/u32SymbolRate)/8.0) - 3);
2812*53ee8cc1Swenshuai.xi }
2813*53ee8cc1Swenshuai.xi else
2814*53ee8cc1Swenshuai.xi *u8TSDivNum = (MS_U8)(float)(144000/(k_bch/((64800/modulation_order+90.0)/u32SymbolRate)/8.0) - 3);
2815*53ee8cc1Swenshuai.xi }
2816*53ee8cc1Swenshuai.xi #endif
2817*53ee8cc1Swenshuai.xi }
2818*53ee8cc1Swenshuai.xi else //S
2819*53ee8cc1Swenshuai.xi {
2820*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE + 0x3A*2, &u8Data);
2821*53ee8cc1Swenshuai.xi //u8_gCodeRate = (u8Data & 0x70)>>4;
2822*53ee8cc1Swenshuai.xi //DVBS Code Rate
2823*53ee8cc1Swenshuai.xi //switch (u8_gCodeRate)
2824*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_CODE_RATE, &u8Data);
2825*53ee8cc1Swenshuai.xi switch (u8Data)
2826*53ee8cc1Swenshuai.xi {
2827*53ee8cc1Swenshuai.xi case 0x00: //CR 1/2
2828*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 0;
2829*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS_GetCurrentCodeRate=1_2\n"));
2830*53ee8cc1Swenshuai.xi if(_bSerialTS)
2831*53ee8cc1Swenshuai.xi *fTSDivNum = (288000.0/((1.0/2.0)*(188.0/204.0)*u32SymbolRate*2));
2832*53ee8cc1Swenshuai.xi else
2833*53ee8cc1Swenshuai.xi *fTSDivNum = (288000.0/((1.0/2.0)*(188.0/204.0)*u32SymbolRate*2/8.0));
2834*53ee8cc1Swenshuai.xi
2835*53ee8cc1Swenshuai.xi *fTSDivNum = *fTSDivNum/2-1-5;
2836*53ee8cc1Swenshuai.xi break;
2837*53ee8cc1Swenshuai.xi case 0x01: //CR 2/3
2838*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 1;
2839*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS_GetCurrentCodeRate=2_3\n"));
2840*53ee8cc1Swenshuai.xi if(_bSerialTS)
2841*53ee8cc1Swenshuai.xi *fTSDivNum = (MS_U8)(288000.0/((2.0/3.0)*(188.0/204.0)*u32SymbolRate*2));
2842*53ee8cc1Swenshuai.xi else
2843*53ee8cc1Swenshuai.xi *fTSDivNum = (MS_U8)(288000.0/((2.0/3.0)*(188.0/204.0)*u32SymbolRate*2/8.0));
2844*53ee8cc1Swenshuai.xi
2845*53ee8cc1Swenshuai.xi *fTSDivNum = *fTSDivNum/2-1-5;
2846*53ee8cc1Swenshuai.xi break;
2847*53ee8cc1Swenshuai.xi case 0x02: //CR 3/4
2848*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 2;
2849*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS_GetCurrentCodeRate=3_4\n"));
2850*53ee8cc1Swenshuai.xi if(_bSerialTS)
2851*53ee8cc1Swenshuai.xi *fTSDivNum = (288000.0/((3.0/4.0)*(188.0/204.0)*u32SymbolRate*2));
2852*53ee8cc1Swenshuai.xi else
2853*53ee8cc1Swenshuai.xi *fTSDivNum = (288000.0/((3.0/4.0)*(188.0/204.0)*u32SymbolRate*2/8.0));
2854*53ee8cc1Swenshuai.xi
2855*53ee8cc1Swenshuai.xi *fTSDivNum = *fTSDivNum/2-1-5;
2856*53ee8cc1Swenshuai.xi break;
2857*53ee8cc1Swenshuai.xi case 0x03: //CR 5/6
2858*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 3;
2859*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS_GetCurrentCodeRate=5_6\n"));
2860*53ee8cc1Swenshuai.xi if(_bSerialTS)
2861*53ee8cc1Swenshuai.xi *fTSDivNum = (288000.0/((5.0/6.0)*(188.0/204.0)*u32SymbolRate*2));
2862*53ee8cc1Swenshuai.xi else
2863*53ee8cc1Swenshuai.xi *fTSDivNum = (288000.0/((5.0/6.0)*(188.0/204.0)*u32SymbolRate*2/8.0));
2864*53ee8cc1Swenshuai.xi
2865*53ee8cc1Swenshuai.xi *fTSDivNum = *fTSDivNum/2-1-5;
2866*53ee8cc1Swenshuai.xi break;
2867*53ee8cc1Swenshuai.xi case 0x04: //CR 7/8
2868*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 4;
2869*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS_GetCurrentCodeRate=7_8\n"));
2870*53ee8cc1Swenshuai.xi if(_bSerialTS)
2871*53ee8cc1Swenshuai.xi *fTSDivNum =(288000.0/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*2));
2872*53ee8cc1Swenshuai.xi else
2873*53ee8cc1Swenshuai.xi *fTSDivNum = (288000.0/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*2/8.0));
2874*53ee8cc1Swenshuai.xi
2875*53ee8cc1Swenshuai.xi *fTSDivNum = *fTSDivNum/2-1-5;
2876*53ee8cc1Swenshuai.xi break;
2877*53ee8cc1Swenshuai.xi default:
2878*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 4;
2879*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS_GetCurrentCodeRate= default 7_8\n"));
2880*53ee8cc1Swenshuai.xi if(_bSerialTS)
2881*53ee8cc1Swenshuai.xi *fTSDivNum = (288000.0/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*2));
2882*53ee8cc1Swenshuai.xi else
2883*53ee8cc1Swenshuai.xi *fTSDivNum = (288000.0/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*2/8.0));
2884*53ee8cc1Swenshuai.xi
2885*53ee8cc1Swenshuai.xi *fTSDivNum = *fTSDivNum/2-1-5;
2886*53ee8cc1Swenshuai.xi break;
2887*53ee8cc1Swenshuai.xi }
2888*53ee8cc1Swenshuai.xi } //printf("INTERN_DVBS_GetTsDivNum u8TSClk = 0x%x\n", *u8TSDivNum);
2889*53ee8cc1Swenshuai.xi return status;
2890*53ee8cc1Swenshuai.xi }
2891*53ee8cc1Swenshuai.xi
INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK_TYPE eType,float fCurrRFPowerDbm,float fNoChannelRFPowerDbm,MS_U32 u32TimeInterval)2892*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK_TYPE eType, float fCurrRFPowerDbm, float fNoChannelRFPowerDbm, MS_U32 u32TimeInterval)
2893*53ee8cc1Swenshuai.xi {
2894*53ee8cc1Swenshuai.xi MS_U8 u8Data =0; //MS_U8 u8Data2 =0;
2895*53ee8cc1Swenshuai.xi MS_U8 bRet = TRUE;
2896*53ee8cc1Swenshuai.xi MS_FLOAT fTSDivNum=0;
2897*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
2898*53ee8cc1Swenshuai.xi MS_U16 lockingtime;
2899*53ee8cc1Swenshuai.xi MS_U16 pkterr;
2900*53ee8cc1Swenshuai.xi #endif
2901*53ee8cc1Swenshuai.xi switch( eType )
2902*53ee8cc1Swenshuai.xi {
2903*53ee8cc1Swenshuai.xi case DMD_DVBS_GETLOCK:
2904*53ee8cc1Swenshuai.xi #if (INTERN_DVBS_INTERNAL_DEBUG)
2905*53ee8cc1Swenshuai.xi INTERN_DVBS_info();
2906*53ee8cc1Swenshuai.xi #endif
2907*53ee8cc1Swenshuai.xi bRet &= MDrv_SYS_DMD_VD_MBX_ReadReg((TOP_REG_BASE + 0x60*2), &u8Data);
2908*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>INTERN_DVBS_GetLock manual tune=%d<<<\n", u8Data));
2909*53ee8cc1Swenshuai.xi if ((u8Data&0x02)==0x00)//manual mode
2910*53ee8cc1Swenshuai.xi {
2911*53ee8cc1Swenshuai.xi bRet &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_STATE_FLAG, &u8Data);
2912*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>INTERN_DVBS_GetLock MailBox state=%d<<<\n", u8Data));
2913*53ee8cc1Swenshuai.xi
2914*53ee8cc1Swenshuai.xi if((u8Data == 15) || (u8Data == 16))
2915*53ee8cc1Swenshuai.xi {
2916*53ee8cc1Swenshuai.xi if (u8Data==15)
2917*53ee8cc1Swenshuai.xi {
2918*53ee8cc1Swenshuai.xi _bDemodType=FALSE; //S
2919*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>INTERN_DVBS_Demod DVBS Lock<<<\n"));
2920*53ee8cc1Swenshuai.xi }
2921*53ee8cc1Swenshuai.xi else if(u8Data==16)
2922*53ee8cc1Swenshuai.xi {
2923*53ee8cc1Swenshuai.xi _bDemodType=TRUE; //S2
2924*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>INTERN_DVBS_Demod DVBS2 Lock<<<\n"));
2925*53ee8cc1Swenshuai.xi }
2926*53ee8cc1Swenshuai.xi if(g_dvbs_lock == 0)
2927*53ee8cc1Swenshuai.xi {
2928*53ee8cc1Swenshuai.xi g_dvbs_lock = 1;
2929*53ee8cc1Swenshuai.xi }
2930*53ee8cc1Swenshuai.xi
2931*53ee8cc1Swenshuai.xi if(u8DemodLockFlag==0)
2932*53ee8cc1Swenshuai.xi {
2933*53ee8cc1Swenshuai.xi u8DemodLockFlag=1;
2934*53ee8cc1Swenshuai.xi
2935*53ee8cc1Swenshuai.xi // caculate TS clock divider number
2936*53ee8cc1Swenshuai.xi INTERN_DVBS_GetTsDivNum(&fTSDivNum); //ts_div_num
2937*53ee8cc1Swenshuai.xi
2938*53ee8cc1Swenshuai.xi if (fTSDivNum > 0x1F)
2939*53ee8cc1Swenshuai.xi fTSDivNum = 0x1F;
2940*53ee8cc1Swenshuai.xi else if (fTSDivNum < 0x00)
2941*53ee8cc1Swenshuai.xi fTSDivNum=0x00;
2942*53ee8cc1Swenshuai.xi
2943*53ee8cc1Swenshuai.xi u8Data = (MS_U8)fTSDivNum;
2944*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>INTERN_DVBS_GetLock TsClkDivNum = 0x%x<<<\n", u8Data));
2945*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103300, u8Data);
2946*53ee8cc1Swenshuai.xi
2947*53ee8cc1Swenshuai.xi }
2948*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("@INTERN_DVBS_Demod Lock+++\n"));
2949*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
2950*53ee8cc1Swenshuai.xi INTERN_DVBS_GetPacketErr(&pkterr);
2951*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg( FRONTEND_REG_BASE+0x7c*2+1,&u8Data);
2952*53ee8cc1Swenshuai.xi lockingtime=u8Data;
2953*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg( FRONTEND_REG_BASE+0x7c*2,&u8Data);
2954*53ee8cc1Swenshuai.xi lockingtime=((lockingtime<<8)|u8Data);
2955*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("@INTERN_DVBS_Demod Locking time [%d]\n",lockingtime));
2956*53ee8cc1Swenshuai.xi #endif
2957*53ee8cc1Swenshuai.xi bRet = TRUE;
2958*53ee8cc1Swenshuai.xi }
2959*53ee8cc1Swenshuai.xi else
2960*53ee8cc1Swenshuai.xi {
2961*53ee8cc1Swenshuai.xi if(g_dvbs_lock == 1)
2962*53ee8cc1Swenshuai.xi {
2963*53ee8cc1Swenshuai.xi g_dvbs_lock = 0;
2964*53ee8cc1Swenshuai.xi u8DemodLockFlag=0;
2965*53ee8cc1Swenshuai.xi }
2966*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("@INTERN_DVBS_Demod UnLock---\n"));
2967*53ee8cc1Swenshuai.xi bRet = FALSE;
2968*53ee8cc1Swenshuai.xi }
2969*53ee8cc1Swenshuai.xi
2970*53ee8cc1Swenshuai.xi if(_bSerialTS==1)
2971*53ee8cc1Swenshuai.xi {
2972*53ee8cc1Swenshuai.xi if (bRet==FALSE)
2973*53ee8cc1Swenshuai.xi {
2974*53ee8cc1Swenshuai.xi _bTSDataSwap=FALSE;
2975*53ee8cc1Swenshuai.xi }
2976*53ee8cc1Swenshuai.xi else
2977*53ee8cc1Swenshuai.xi {
2978*53ee8cc1Swenshuai.xi if (_bTSDataSwap==FALSE)
2979*53ee8cc1Swenshuai.xi {
2980*53ee8cc1Swenshuai.xi _bTSDataSwap=TRUE;
2981*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg( (DVBTM_REG_BASE + 0x20*2), &u8Data);//DVBTM_REG_BASE
2982*53ee8cc1Swenshuai.xi u8Data^=0x20;//h0020 h0020 5 5 reg_ts_data_reverse
2983*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg( (DVBTM_REG_BASE + 0x20*2), u8Data);
2984*53ee8cc1Swenshuai.xi }
2985*53ee8cc1Swenshuai.xi }
2986*53ee8cc1Swenshuai.xi }
2987*53ee8cc1Swenshuai.xi }
2988*53ee8cc1Swenshuai.xi else
2989*53ee8cc1Swenshuai.xi {
2990*53ee8cc1Swenshuai.xi bRet = TRUE;
2991*53ee8cc1Swenshuai.xi }
2992*53ee8cc1Swenshuai.xi break;
2993*53ee8cc1Swenshuai.xi
2994*53ee8cc1Swenshuai.xi default:
2995*53ee8cc1Swenshuai.xi bRet = FALSE;
2996*53ee8cc1Swenshuai.xi }
2997*53ee8cc1Swenshuai.xi return bRet;
2998*53ee8cc1Swenshuai.xi }
2999*53ee8cc1Swenshuai.xi
INTERN_DVBS_GetTunrSignalLevel_PWR(void)3000*53ee8cc1Swenshuai.xi float INTERN_DVBS_GetTunrSignalLevel_PWR(void)// Need check debug out table
3001*53ee8cc1Swenshuai.xi {
3002*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
3003*53ee8cc1Swenshuai.xi MS_U16 u16Data =0;
3004*53ee8cc1Swenshuai.xi MS_U8 u8Data =0;
3005*53ee8cc1Swenshuai.xi MS_U8 u8Index =0;
3006*53ee8cc1Swenshuai.xi float fCableLess = 0.0;
3007*53ee8cc1Swenshuai.xi
3008*53ee8cc1Swenshuai.xi if (FALSE == INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK, 200.0f, -200.0f, 0) )//Demod unlock
3009*53ee8cc1Swenshuai.xi {
3010*53ee8cc1Swenshuai.xi fCableLess = 0;
3011*53ee8cc1Swenshuai.xi }
3012*53ee8cc1Swenshuai.xi
3013*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE+0x11*2, &u8Data);//FRONTEND_AGC_DEBUG_SEL
3014*53ee8cc1Swenshuai.xi u8Data=(u8Data&0xF0)|0x03;
3015*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE+0x11*2, u8Data);
3016*53ee8cc1Swenshuai.xi
3017*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE+0x02, &u8Data);//FRONTEND_LATCH
3018*53ee8cc1Swenshuai.xi u8Data|=0x80;
3019*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE+0x02, u8Data);
3020*53ee8cc1Swenshuai.xi
3021*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE+0x12*2+1, &u8Data);//FRONTEND_AGC_DEBUG_OUT_R1
3022*53ee8cc1Swenshuai.xi u16Data=u8Data;
3023*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE+0x12*2, &u8Data);//FRONTEND_AGC_DEBUG_OUT_R0
3024*53ee8cc1Swenshuai.xi u16Data=(u16Data<<8)|u8Data;
3025*53ee8cc1Swenshuai.xi //printf("===========================Tuner 65535-u16Data = %d\n", (65535-u16Data));
3026*53ee8cc1Swenshuai.xi //MsOS_DelayTask(400);
3027*53ee8cc1Swenshuai.xi
3028*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE+0x02, &u8Data);//FRONTEND_LOAD0
3029*53ee8cc1Swenshuai.xi u8Data&=~(0x80);
3030*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE+0x02, u8Data);
3031*53ee8cc1Swenshuai.xi
3032*53ee8cc1Swenshuai.xi if (status==FALSE)
3033*53ee8cc1Swenshuai.xi {
3034*53ee8cc1Swenshuai.xi DBG_GET_SIGNAL_DVBS(printf("INTERN_DVBS GetSignalStrength fail!!! \n "));
3035*53ee8cc1Swenshuai.xi fCableLess = 0;
3036*53ee8cc1Swenshuai.xi }
3037*53ee8cc1Swenshuai.xi
3038*53ee8cc1Swenshuai.xi //printf("#### INTERN_DVBS_GetTunrSignalLevel_PWR u16Data = %d\n", (int)u16Data);
3039*53ee8cc1Swenshuai.xi for (u8Index=0; u8Index < (sizeof(_u16SignalLevel)/sizeof(_u16SignalLevel[0])); u8Index++)
3040*53ee8cc1Swenshuai.xi {
3041*53ee8cc1Swenshuai.xi if ((65535 - u16Data) <= _u16SignalLevel[u8Index][0])
3042*53ee8cc1Swenshuai.xi {
3043*53ee8cc1Swenshuai.xi if (u8Index >=1)
3044*53ee8cc1Swenshuai.xi {
3045*53ee8cc1Swenshuai.xi fCableLess = (float)(_u16SignalLevel[u8Index][1])+((float)(_u16SignalLevel[u8Index][0] - (65535 - u16Data)) / (float)(_u16SignalLevel[u8Index][0] - _u16SignalLevel[u8Index-1][0]))*(float)(_u16SignalLevel[u8Index-1][1] - _u16SignalLevel[u8Index][1]);
3046*53ee8cc1Swenshuai.xi break;
3047*53ee8cc1Swenshuai.xi }
3048*53ee8cc1Swenshuai.xi else
3049*53ee8cc1Swenshuai.xi {
3050*53ee8cc1Swenshuai.xi fCableLess = _u16SignalLevel[u8Index][1];
3051*53ee8cc1Swenshuai.xi break;
3052*53ee8cc1Swenshuai.xi }
3053*53ee8cc1Swenshuai.xi }
3054*53ee8cc1Swenshuai.xi }
3055*53ee8cc1Swenshuai.xi //---------------------------------------------------
3056*53ee8cc1Swenshuai.xi /*
3057*53ee8cc1Swenshuai.xi if (fCableLess >= 350)
3058*53ee8cc1Swenshuai.xi fCableLess = fCableLess - 35;
3059*53ee8cc1Swenshuai.xi else if ((fCableLess < 350) && (fCableLess >= 250))
3060*53ee8cc1Swenshuai.xi fCableLess = fCableLess - 25;
3061*53ee8cc1Swenshuai.xi else
3062*53ee8cc1Swenshuai.xi fCableLess = fCableLess - 5;
3063*53ee8cc1Swenshuai.xi */
3064*53ee8cc1Swenshuai.xi
3065*53ee8cc1Swenshuai.xi if (fCableLess < 0)
3066*53ee8cc1Swenshuai.xi fCableLess = 0;
3067*53ee8cc1Swenshuai.xi if (fCableLess > 920)
3068*53ee8cc1Swenshuai.xi fCableLess = 920;
3069*53ee8cc1Swenshuai.xi
3070*53ee8cc1Swenshuai.xi fCableLess = (-1.0)*(fCableLess/10.0);
3071*53ee8cc1Swenshuai.xi
3072*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS GetSignalStrength %f\n", fCableLess));
3073*53ee8cc1Swenshuai.xi
3074*53ee8cc1Swenshuai.xi return fCableLess;
3075*53ee8cc1Swenshuai.xi }
3076*53ee8cc1Swenshuai.xi
3077*53ee8cc1Swenshuai.xi /****************************************************************************
3078*53ee8cc1Swenshuai.xi Subject: To get the Post viterbi BER
3079*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_GetPostViterbiBer
3080*53ee8cc1Swenshuai.xi Parmeter: Quility
3081*53ee8cc1Swenshuai.xi Return: E_RESULT_SUCCESS
3082*53ee8cc1Swenshuai.xi E_RESULT_FAILURE =>Read I2C fail, INTERN_DVBC_VIT_STATUS_NG
3083*53ee8cc1Swenshuai.xi Remark: For the Performance issue, here we just return the Post Value.(Not BER)
3084*53ee8cc1Swenshuai.xi We will not read the Period, and have the "/256/8"
3085*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_GetPostViterbiBer(float * postber)3086*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetPostViterbiBer(float *postber)//POST BER //V
3087*53ee8cc1Swenshuai.xi {
3088*53ee8cc1Swenshuai.xi MS_BOOL status = true;
3089*53ee8cc1Swenshuai.xi MS_U8 reg = 0, reg_frz = 0;
3090*53ee8cc1Swenshuai.xi MS_U16 BitErrPeriod;
3091*53ee8cc1Swenshuai.xi MS_U32 BitErr;
3092*53ee8cc1Swenshuai.xi
3093*53ee8cc1Swenshuai.xi /////////// Post-Viterbi BER /////////////After Viterbi
3094*53ee8cc1Swenshuai.xi
3095*53ee8cc1Swenshuai.xi // freeze ,DVBSRS_BACKEND_BIT_ERR_NUM_FREEZE
3096*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x1*2+1, ®_frz);//h0001 h0001 8 8 reg_ber_en
3097*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBSFEC_REG_BASE+0x1*2+1, reg_frz|0x01);
3098*53ee8cc1Swenshuai.xi
3099*53ee8cc1Swenshuai.xi // bank 1f 0x46 [7:0] reg_bit_err_sblprd_7_0 ,DVBSFEC_BIT_ERR_SBLPRD_7_0
3100*53ee8cc1Swenshuai.xi // 0x47 [15:8] reg_bit_err_sblprd_15_8
3101*53ee8cc1Swenshuai.xi //KRIS register table
3102*53ee8cc1Swenshuai.xi //h0018 h0018 7 0 reg_bit_err_sblprd_7_0
3103*53ee8cc1Swenshuai.xi //h0018 h0018 15 8 reg_bit_err_sblprd_15_8
3104*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x18*2+1, ®);
3105*53ee8cc1Swenshuai.xi BitErrPeriod = reg;
3106*53ee8cc1Swenshuai.xi
3107*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x18*2, ®);
3108*53ee8cc1Swenshuai.xi BitErrPeriod = (BitErrPeriod << 8)|reg;
3109*53ee8cc1Swenshuai.xi
3110*53ee8cc1Swenshuai.xi
3111*53ee8cc1Swenshuai.xi //h001d h001d 7 0 reg_bit_err_num_7_0
3112*53ee8cc1Swenshuai.xi //h001d h001d 15 8 reg_bit_err_num_15_8
3113*53ee8cc1Swenshuai.xi //h001e h001e 7 0 reg_bit_err_num_23_16
3114*53ee8cc1Swenshuai.xi //h001e h001e 15 8 reg_bit_err_num_31_24
3115*53ee8cc1Swenshuai.xi
3116*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x1E*2+1, ®);
3117*53ee8cc1Swenshuai.xi BitErr = reg;
3118*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x1E*2, ®);
3119*53ee8cc1Swenshuai.xi BitErr = (BitErr << 8)|reg;
3120*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x1D*2+1, ®);
3121*53ee8cc1Swenshuai.xi BitErr = (BitErr << 8)|reg;
3122*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x1D*2, ®);
3123*53ee8cc1Swenshuai.xi BitErr = (BitErr << 8)|reg;
3124*53ee8cc1Swenshuai.xi
3125*53ee8cc1Swenshuai.xi // bank 1f 0x03 [1:0] reg_bit_err_num_freeze
3126*53ee8cc1Swenshuai.xi reg_frz=reg_frz&(~0x01);
3127*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBSFEC_REG_BASE+0x1*2+1, reg_frz);
3128*53ee8cc1Swenshuai.xi
3129*53ee8cc1Swenshuai.xi if (BitErrPeriod == 0 ) //PRD
3130*53ee8cc1Swenshuai.xi BitErrPeriod = 1;
3131*53ee8cc1Swenshuai.xi
3132*53ee8cc1Swenshuai.xi if (BitErr <= 0 )
3133*53ee8cc1Swenshuai.xi *postber = 0.5f / ((float)BitErrPeriod*128*188*8);
3134*53ee8cc1Swenshuai.xi else
3135*53ee8cc1Swenshuai.xi *postber = (float)BitErr / ((float)BitErrPeriod*128*188*8);
3136*53ee8cc1Swenshuai.xi
3137*53ee8cc1Swenshuai.xi if (*postber <= 0.0f)
3138*53ee8cc1Swenshuai.xi *postber = 1.0e-10f;
3139*53ee8cc1Swenshuai.xi
3140*53ee8cc1Swenshuai.xi DBG_GET_SIGNAL_DVBS(printf("INTERN_DVBS PostVitBER = %8.3e \n", *postber));
3141*53ee8cc1Swenshuai.xi
3142*53ee8cc1Swenshuai.xi return status;
3143*53ee8cc1Swenshuai.xi }
3144*53ee8cc1Swenshuai.xi
3145*53ee8cc1Swenshuai.xi
INTERN_DVBS_GetPreViterbiBer(float * preber)3146*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetPreViterbiBer(float *preber)//PER BER // not yet
3147*53ee8cc1Swenshuai.xi {
3148*53ee8cc1Swenshuai.xi MS_BOOL status = true;
3149*53ee8cc1Swenshuai.xi //MS_U8 reg = 0, reg_frz = 0;
3150*53ee8cc1Swenshuai.xi //MS_U16 BitErrPeriod;
3151*53ee8cc1Swenshuai.xi //MS_U32 BitErr;
3152*53ee8cc1Swenshuai.xi
3153*53ee8cc1Swenshuai.xi #if 0
3154*53ee8cc1Swenshuai.xi /////////// Pre-Viterbi BER /////////////Before Viterbi
3155*53ee8cc1Swenshuai.xi
3156*53ee8cc1Swenshuai.xi // freeze ,DVBSRS_BACKEND_BIT_ERR_NUM_FREEZE
3157*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE+0x10, ®_frz);
3158*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBSTFEC_REG_BASE+0x10, reg_frz|0x08);
3159*53ee8cc1Swenshuai.xi
3160*53ee8cc1Swenshuai.xi // bank 1f 0x46 [7:0] reg_bit_err_sblprd_7_0 ,DVBSFEC_BIT_ERR_SBLPRD_7_0
3161*53ee8cc1Swenshuai.xi // 0x47 [15:8] reg_bit_err_sblprd_15_8
3162*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE+0x19, ®);
3163*53ee8cc1Swenshuai.xi BitErrPeriod = reg;
3164*53ee8cc1Swenshuai.xi
3165*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE+0x18, ®);
3166*53ee8cc1Swenshuai.xi BitErrPeriod = (BitErrPeriod << 8)|reg;
3167*53ee8cc1Swenshuai.xi
3168*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE+0x17, ®);
3169*53ee8cc1Swenshuai.xi BitErrPeriod = (BitErrPeriod << 8)|reg;
3170*53ee8cc1Swenshuai.xi
3171*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE+0x16, ®);
3172*53ee8cc1Swenshuai.xi BitErrPeriod = (BitErrPeriod << 8)|reg;
3173*53ee8cc1Swenshuai.xi BitErrPeriod = (BitErrPeriod & 0x3FFF);
3174*53ee8cc1Swenshuai.xi
3175*53ee8cc1Swenshuai.xi // bank 1f 0x6a [7:0] reg_bit_err_num_7_0
3176*53ee8cc1Swenshuai.xi // 0x6b [15:8] reg_bit_err_num_15_8
3177*53ee8cc1Swenshuai.xi // bank 1f 0x6c [7:0] reg_bit_err_num_23_16
3178*53ee8cc1Swenshuai.xi // 0x6d [15:8] reg_bit_err_num_31_24
3179*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE+0x1F, ®);
3180*53ee8cc1Swenshuai.xi BitErr = reg;
3181*53ee8cc1Swenshuai.xi
3182*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE+0x1E, ®);
3183*53ee8cc1Swenshuai.xi BitErr = (BitErr << 8)|reg;
3184*53ee8cc1Swenshuai.xi
3185*53ee8cc1Swenshuai.xi // bank 1f 0x03 [1:0] reg_bit_err_num_freeze
3186*53ee8cc1Swenshuai.xi reg_frz=reg_frz&(~0x08);
3187*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBSFEC_REG_BASE+0x10, reg_frz);
3188*53ee8cc1Swenshuai.xi
3189*53ee8cc1Swenshuai.xi if (BitErrPeriod ==0 )//protect 0
3190*53ee8cc1Swenshuai.xi BitErrPeriod=1;
3191*53ee8cc1Swenshuai.xi if (BitErr <=0 )
3192*53ee8cc1Swenshuai.xi *perber=0.5f / (float)BitErrPeriod / 256;
3193*53ee8cc1Swenshuai.xi else
3194*53ee8cc1Swenshuai.xi *perber=(float)BitErr / (float)BitErrPeriod / 256;
3195*53ee8cc1Swenshuai.xi
3196*53ee8cc1Swenshuai.xi if (*perber <= 0.0f)
3197*53ee8cc1Swenshuai.xi *perber = 1.0e-10f;
3198*53ee8cc1Swenshuai.xi
3199*53ee8cc1Swenshuai.xi DBG_GET_SIGNAL_DVBS(printf("INTERN_DVBS PerVitBER = %8.3e \n", *perber));
3200*53ee8cc1Swenshuai.xi #endif
3201*53ee8cc1Swenshuai.xi
3202*53ee8cc1Swenshuai.xi return status;
3203*53ee8cc1Swenshuai.xi }
3204*53ee8cc1Swenshuai.xi
3205*53ee8cc1Swenshuai.xi /****************************************************************************
3206*53ee8cc1Swenshuai.xi Subject: To get the Packet error
3207*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_GetPacketErr
3208*53ee8cc1Swenshuai.xi Parmeter: pktErr
3209*53ee8cc1Swenshuai.xi Return: E_RESULT_SUCCESS
3210*53ee8cc1Swenshuai.xi E_RESULT_FAILURE =>Read I2C fail, INTERN_DVBT_VIT_STATUS_NG
3211*53ee8cc1Swenshuai.xi Remark: For the Performance issue, here we just return the Post Value.(Not BER)
3212*53ee8cc1Swenshuai.xi We will not read the Period, and have the "/256/8"
3213*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_GetPacketErr(MS_U16 * pktErr)3214*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetPacketErr(MS_U16 *pktErr)//V
3215*53ee8cc1Swenshuai.xi {
3216*53ee8cc1Swenshuai.xi MS_BOOL status = true;
3217*53ee8cc1Swenshuai.xi MS_U8 u8Data = 0;
3218*53ee8cc1Swenshuai.xi MS_U16 u16PktErr = 0;
3219*53ee8cc1Swenshuai.xi
3220*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SYSTEM_TYPE, &u8Data);
3221*53ee8cc1Swenshuai.xi if(!u8Data) //DVB-S2
3222*53ee8cc1Swenshuai.xi {
3223*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_REG_BASE+0x02*2, &u8Data);//DVBS2FEC_OUTER_FREEZE (_REG_DVBS2FEC(0x02)+0) //[0]
3224*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2FEC_REG_BASE+0x02*2, u8Data|0x01);
3225*53ee8cc1Swenshuai.xi
3226*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_REG_BASE+0x26*2+1, &u8Data);//DVBS2FEC_BCH_EFLAG2_SUM1 (_REG_DVBS2FEC(0x2B)+1)
3227*53ee8cc1Swenshuai.xi u16PktErr = u8Data;
3228*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_REG_BASE+0x26*2, &u8Data);
3229*53ee8cc1Swenshuai.xi u16PktErr = (u16PktErr << 8)|u8Data;
3230*53ee8cc1Swenshuai.xi
3231*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_REG_BASE+0x02*2, &u8Data);
3232*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2FEC_REG_BASE+0x02*2, u8Data&(~0x01));
3233*53ee8cc1Swenshuai.xi }
3234*53ee8cc1Swenshuai.xi else
3235*53ee8cc1Swenshuai.xi { //DVB-S
3236*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x19*2, &u8Data); //0x19 [7] reg_bit_err_num_freeze
3237*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBSFEC_REG_BASE+0x19*2, u8Data|0x80);
3238*53ee8cc1Swenshuai.xi
3239*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(REG_BACKEND+0x33*2+1, &u8Data);// DVBSFEC_UNCRT_PKT_NUM_15_8 (_REG_DVBSFEC(0x1F)+1)
3240*53ee8cc1Swenshuai.xi u16PktErr = u8Data;
3241*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(REG_BACKEND+0x33*2, &u8Data);
3242*53ee8cc1Swenshuai.xi u16PktErr = (u16PktErr << 8)|u8Data;
3243*53ee8cc1Swenshuai.xi
3244*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x19*2, &u8Data); //0x19 [7] reg_bit_err_num_freeze
3245*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBSFEC_REG_BASE+0x19*2, u8Data&(~0x80));
3246*53ee8cc1Swenshuai.xi }
3247*53ee8cc1Swenshuai.xi *pktErr = u16PktErr;
3248*53ee8cc1Swenshuai.xi
3249*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS PktErr = %d \n", (int)u16PktErr));
3250*53ee8cc1Swenshuai.xi
3251*53ee8cc1Swenshuai.xi return status;
3252*53ee8cc1Swenshuai.xi }
3253*53ee8cc1Swenshuai.xi
3254*53ee8cc1Swenshuai.xi /****************************************************************************
3255*53ee8cc1Swenshuai.xi Subject: Read the signal to noise ratio (SNR)
3256*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_GetSNR
3257*53ee8cc1Swenshuai.xi Parmeter: None
3258*53ee8cc1Swenshuai.xi Return: -1 mean I2C fail, otherwise I2C success then return SNR value
3259*53ee8cc1Swenshuai.xi Remark:
3260*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_GetSNR(float * f_snr)3261*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetSNR(float *f_snr)//V
3262*53ee8cc1Swenshuai.xi {
3263*53ee8cc1Swenshuai.xi MS_BOOL status= TRUE;
3264*53ee8cc1Swenshuai.xi MS_U8 u8Data =0, reg_frz =0;
3265*53ee8cc1Swenshuai.xi //NDA SNR
3266*53ee8cc1Swenshuai.xi MS_U32 u32NDA_SNR_A =0;
3267*53ee8cc1Swenshuai.xi MS_U32 u32NDA_SNR_AB =0;
3268*53ee8cc1Swenshuai.xi //NDA SNR
3269*53ee8cc1Swenshuai.xi float NDA_SNR_A =0.0;
3270*53ee8cc1Swenshuai.xi float NDA_SNR_AB =0.0;
3271*53ee8cc1Swenshuai.xi float NDA_SNR =0.0;
3272*53ee8cc1Swenshuai.xi double NDA_SNR_LINEAR=0.0;
3273*53ee8cc1Swenshuai.xi //float snr_poly =0.0;
3274*53ee8cc1Swenshuai.xi //float Fixed_SNR =0.0;
3275*53ee8cc1Swenshuai.xi
3276*53ee8cc1Swenshuai.xi if (INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK, 200.0f, -200.0f, 0)== FALSE)
3277*53ee8cc1Swenshuai.xi {
3278*53ee8cc1Swenshuai.xi return 0;
3279*53ee8cc1Swenshuai.xi }
3280*53ee8cc1Swenshuai.xi
3281*53ee8cc1Swenshuai.xi // freeze
3282*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE+0x04*2, ®_frz);
3283*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_INNER_REG_BASE+0x04*2, reg_frz|0x10);//INNE_LATCH bit[4]
3284*53ee8cc1Swenshuai.xi
3285*53ee8cc1Swenshuai.xi //NDA SNR_A
3286*53ee8cc1Swenshuai.xi // read Linear_SNR
3287*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x47*2, &u8Data);
3288*53ee8cc1Swenshuai.xi u32NDA_SNR_A=(u8Data&0x03);
3289*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x46*2 + 1, &u8Data);
3290*53ee8cc1Swenshuai.xi u32NDA_SNR_A=(u32NDA_SNR_A<<8)|u8Data;
3291*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x46*2, &u8Data);
3292*53ee8cc1Swenshuai.xi u32NDA_SNR_A=(u32NDA_SNR_A<<8)|u8Data;
3293*53ee8cc1Swenshuai.xi //NDA SNR_AB
3294*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x49*2+1, &u8Data);
3295*53ee8cc1Swenshuai.xi u32NDA_SNR_AB=(u8Data&0x3F);
3296*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x49*2, &u8Data);
3297*53ee8cc1Swenshuai.xi u32NDA_SNR_AB = (u32NDA_SNR_AB<<8)|u8Data;
3298*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x48*2 + 1, &u8Data);
3299*53ee8cc1Swenshuai.xi u32NDA_SNR_AB=(u32NDA_SNR_AB<<8)|u8Data;
3300*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x48*2, &u8Data);
3301*53ee8cc1Swenshuai.xi u32NDA_SNR_AB=(u32NDA_SNR_AB<<8)|u8Data;
3302*53ee8cc1Swenshuai.xi
3303*53ee8cc1Swenshuai.xi //UN_freeze
3304*53ee8cc1Swenshuai.xi reg_frz=reg_frz&(~0x10);
3305*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_INNER_REG_BASE+0x08, reg_frz);
3306*53ee8cc1Swenshuai.xi
3307*53ee8cc1Swenshuai.xi if (status== FALSE)
3308*53ee8cc1Swenshuai.xi {
3309*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetSNR Fail! \n"));
3310*53ee8cc1Swenshuai.xi return 0;
3311*53ee8cc1Swenshuai.xi }
3312*53ee8cc1Swenshuai.xi //NDA SNR
3313*53ee8cc1Swenshuai.xi NDA_SNR_A=(float)u32NDA_SNR_A/65536;
3314*53ee8cc1Swenshuai.xi NDA_SNR_AB=(float)u32NDA_SNR_AB/4194304;
3315*53ee8cc1Swenshuai.xi //
3316*53ee8cc1Swenshuai.xi //since support 16,32APSK we need to add judgement
3317*53ee8cc1Swenshuai.xi if(modulation_order==4)
3318*53ee8cc1Swenshuai.xi NDA_SNR_AB=(float)sqrt(NDA_SNR_AB/(2-1.252295758529242));//for 16APSK CR2/3
3319*53ee8cc1Swenshuai.xi else if(modulation_order==5)//(2-1.41333232789)
3320*53ee8cc1Swenshuai.xi NDA_SNR_AB=(float)sqrt(NDA_SNR_AB/(2-1.41333232789));//for 32APSK CR3/4
3321*53ee8cc1Swenshuai.xi else
3322*53ee8cc1Swenshuai.xi NDA_SNR_AB=(float)sqrt(NDA_SNR_AB);
3323*53ee8cc1Swenshuai.xi
3324*53ee8cc1Swenshuai.xi NDA_SNR_LINEAR =(1/((NDA_SNR_A/NDA_SNR_AB)-1)) ;
3325*53ee8cc1Swenshuai.xi
3326*53ee8cc1Swenshuai.xi if(NDA_SNR_LINEAR<=0)
3327*53ee8cc1Swenshuai.xi NDA_SNR=1.0;
3328*53ee8cc1Swenshuai.xi else
3329*53ee8cc1Swenshuai.xi NDA_SNR=10*log10(NDA_SNR_LINEAR);
3330*53ee8cc1Swenshuai.xi
3331*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("[DVBS]: NDA_SNR ================================: %.1f\n", NDA_SNR));
3332*53ee8cc1Swenshuai.xi _f_DVBS_CurrentSNR = NDA_SNR;
3333*53ee8cc1Swenshuai.xi /*
3334*53ee8cc1Swenshuai.xi //[DVBS/S2, QPSK/8PSK, 1/2~9/10 the same CN]
3335*53ee8cc1Swenshuai.xi snr_poly = 0.0; //use Polynomial curve fitting to fix SNR
3336*53ee8cc1Swenshuai.xi snr_poly = 0.005261367463671*pow(NDA_SNR, 3)-0.116517828301214*pow(NDA_SNR, 2)+0.744836970505452*pow(NDA_SNR, 1)-0.86727609780167;
3337*53ee8cc1Swenshuai.xi Fixed_SNR = NDA_SNR + snr_poly;
3338*53ee8cc1Swenshuai.xi //printf("[DVBS]: NDA_SNR + snr_poly =====================: %.1f\n", Fixed_SNR);
3339*53ee8cc1Swenshuai.xi
3340*53ee8cc1Swenshuai.xi if (Fixed_SNR < 17.0)
3341*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR;
3342*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 20.0) && (Fixed_SNR >= 17.0))
3343*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 0.8;
3344*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 22.5) && (Fixed_SNR >= 20.0))
3345*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 2.0;
3346*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 27.0) && (Fixed_SNR >= 22.5))
3347*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 3.0;
3348*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 29.0) && (Fixed_SNR >= 27.0))
3349*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 3.5;
3350*53ee8cc1Swenshuai.xi else if (Fixed_SNR >= 29.0)
3351*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 3.0;
3352*53ee8cc1Swenshuai.xi
3353*53ee8cc1Swenshuai.xi if (Fixed_SNR < 1.0)
3354*53ee8cc1Swenshuai.xi Fixed_SNR = 1.0;
3355*53ee8cc1Swenshuai.xi if (Fixed_SNR > 30.0)
3356*53ee8cc1Swenshuai.xi Fixed_SNR = 30.0;
3357*53ee8cc1Swenshuai.xi */
3358*53ee8cc1Swenshuai.xi *f_snr = NDA_SNR;
3359*53ee8cc1Swenshuai.xi //printf("[DVBS]: NDA_SNR=============================: %.1f\n", NDA_SNR);
3360*53ee8cc1Swenshuai.xi
3361*53ee8cc1Swenshuai.xi return status;
3362*53ee8cc1Swenshuai.xi }
3363*53ee8cc1Swenshuai.xi
3364*53ee8cc1Swenshuai.xi //SSI
INTERN_DVBS_GetSignalStrength(MS_U16 * pu16SignalBar,const DMD_DVBS_InitData * sDMD_DVBS_InitData,MS_U8 u8SarValue,float fRFPowerDbm)3365*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetSignalStrength(MS_U16 *pu16SignalBar, const DMD_DVBS_InitData *sDMD_DVBS_InitData, MS_U8 u8SarValue, float fRFPowerDbm)
3366*53ee8cc1Swenshuai.xi {
3367*53ee8cc1Swenshuai.xi //-1.2~-92.2 dBm
3368*53ee8cc1Swenshuai.xi MS_BOOL status = true;
3369*53ee8cc1Swenshuai.xi MS_U8 u8Data =0;
3370*53ee8cc1Swenshuai.xi MS_U8 _u8_DVBS2_CurrentCodeRateLocal = 0;
3371*53ee8cc1Swenshuai.xi float ch_power_db=0.0f, ch_power_db_rel=0.0f;
3372*53ee8cc1Swenshuai.xi
3373*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS_TIME(printf("INTERN_DVBS_GetSignalStrength, t=%d, RF level=%f, Table=%x\n",MsOS_GetSystemTime(), fRFPowerDbm, (MS_U32)(sDMD_DVBS_InitData->pTuner_RfagcSsi)));
3374*53ee8cc1Swenshuai.xi
3375*53ee8cc1Swenshuai.xi // if (INTERN_DVBC_Lock(COFDM_TPS_LOCK))
3376*53ee8cc1Swenshuai.xi // if (INTERN_DVBC_Lock(COFDM_AGC_LOCK))
3377*53ee8cc1Swenshuai.xi // Actually, it's more reasonable, that signal level depended on cable input power level
3378*53ee8cc1Swenshuai.xi // thougth the signal isn't dvb-t signal.
3379*53ee8cc1Swenshuai.xi //
3380*53ee8cc1Swenshuai.xi // use pointer of IFAGC table to identify
3381*53ee8cc1Swenshuai.xi // case 1: RFAGC from SAR, IFAGC controlled by demod
3382*53ee8cc1Swenshuai.xi // case 2: RFAGC from tuner, ,IFAGC controlled by demod
3383*53ee8cc1Swenshuai.xi //status=HAL_DMD_GetRFLevel(&ch_power_db, fRFPowerDbm, u8SarValue,
3384*53ee8cc1Swenshuai.xi // sDMD_DVBS_InitData->pTuner_RfagcSsi, sDMD_DVBS_InitData->u16Tuner_RfagcSsi_Size,
3385*53ee8cc1Swenshuai.xi // sDMD_DVBS_InitData->pTuner_IfagcSsi_HiRef, sDMD_DVBS_InitData->u16Tuner_IfagcSsi_HiRef_Size,
3386*53ee8cc1Swenshuai.xi // sDMD_DVBS_InitData->pTuner_IfagcSsi_LoRef, sDMD_DVBS_InitData->u16Tuner_IfagcSsi_LoRef_Size,
3387*53ee8cc1Swenshuai.xi // sDMD_DVBS_InitData->pTuner_IfagcErr_HiRef, sDMD_DVBS_InitData->u16Tuner_IfagcErr_HiRef_Size,
3388*53ee8cc1Swenshuai.xi // sDMD_DVBS_InitData->pTuner_IfagcErr_LoRef, sDMD_DVBS_InitData->u16Tuner_IfagcErr_LoRef_Size);
3389*53ee8cc1Swenshuai.xi ch_power_db = INTERN_DVBS_GetTunrSignalLevel_PWR();
3390*53ee8cc1Swenshuai.xi //printf("@@@@@@@@@ ch_power_db = %f \n", ch_power_db);
3391*53ee8cc1Swenshuai.xi
3392*53ee8cc1Swenshuai.xi MS_U8 u8Data2 = 0;
3393*53ee8cc1Swenshuai.xi MS_U8 _u8_DVBS2_CurrentConstellationLocal = 0;
3394*53ee8cc1Swenshuai.xi DMD_DVBS_DEMOD_TYPE pDemodType = 0;
3395*53ee8cc1Swenshuai.xi
3396*53ee8cc1Swenshuai.xi
3397*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_GetCurrentDemodType(&pDemodType);
3398*53ee8cc1Swenshuai.xi
3399*53ee8cc1Swenshuai.xi if((MS_U8)pDemodType == (MS_U8)DMD_SAT_DVBS)//S
3400*53ee8cc1Swenshuai.xi {
3401*53ee8cc1Swenshuai.xi float fDVBS_SSI_Pref[]=
3402*53ee8cc1Swenshuai.xi {
3403*53ee8cc1Swenshuai.xi //0, 1, 2, 3, 4
3404*53ee8cc1Swenshuai.xi -78.9, -77.15, -76.14, -75.19, -74.57,//QPSK
3405*53ee8cc1Swenshuai.xi };
3406*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE + 0x84, &u8Data);
3407*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRateLocal = (u8Data & 0x07);
3408*53ee8cc1Swenshuai.xi ch_power_db_rel = ch_power_db - fDVBS_SSI_Pref[_u8_DVBS2_CurrentCodeRateLocal];
3409*53ee8cc1Swenshuai.xi }
3410*53ee8cc1Swenshuai.xi else
3411*53ee8cc1Swenshuai.xi {
3412*53ee8cc1Swenshuai.xi float fDVBS2_SSI_Pref[][11]=
3413*53ee8cc1Swenshuai.xi {
3414*53ee8cc1Swenshuai.xi // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
3415*53ee8cc1Swenshuai.xi //1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 9/10
3416*53ee8cc1Swenshuai.xi {-85.17, -84.08, -83.15, -81.86, -80.63, -79.77, -78.84, -78.19, -77.69, -76.68, -76.46}, //QPSK
3417*53ee8cc1Swenshuai.xi { 0.0, 0.0, 0.0, 0.0, -77.36, -76.24, -74.95, 0.0, -73.52, -72.18, -71.84} //8PSK
3418*53ee8cc1Swenshuai.xi };
3419*53ee8cc1Swenshuai.xi
3420*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0xD7, &u8Data);
3421*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRateLocal = (u8Data & 0x3C)>>2;
3422*53ee8cc1Swenshuai.xi
3423*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0xD7, &u8Data);
3424*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0xD6, &u8Data2);
3425*53ee8cc1Swenshuai.xi
3426*53ee8cc1Swenshuai.xi if(((u8Data & 0x03)==0x01) && ((u8Data2 & 0x80)==0x00))
3427*53ee8cc1Swenshuai.xi {
3428*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentConstellationLocal = DMD_DVBS_QPSK;
3429*53ee8cc1Swenshuai.xi }
3430*53ee8cc1Swenshuai.xi else if (((u8Data & 0x03)==0x01) && ((u8Data2 & 0x80)==0x80))
3431*53ee8cc1Swenshuai.xi {
3432*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentConstellationLocal = DMD_DVBS_8PSK;//8PSK
3433*53ee8cc1Swenshuai.xi }
3434*53ee8cc1Swenshuai.xi ch_power_db_rel = ch_power_db - fDVBS2_SSI_Pref[_u8_DVBS2_CurrentConstellationLocal][_u8_DVBS2_CurrentCodeRateLocal];
3435*53ee8cc1Swenshuai.xi }
3436*53ee8cc1Swenshuai.xi
3437*53ee8cc1Swenshuai.xi if(ch_power_db_rel <= -15.0f)
3438*53ee8cc1Swenshuai.xi {
3439*53ee8cc1Swenshuai.xi *pu16SignalBar = 0;
3440*53ee8cc1Swenshuai.xi }
3441*53ee8cc1Swenshuai.xi else if (ch_power_db_rel <= 0.0f)
3442*53ee8cc1Swenshuai.xi {
3443*53ee8cc1Swenshuai.xi *pu16SignalBar = (MS_U16)(2.0f/3 * (ch_power_db_rel+15.0f));
3444*53ee8cc1Swenshuai.xi }
3445*53ee8cc1Swenshuai.xi else if (ch_power_db_rel <= 20.0f)
3446*53ee8cc1Swenshuai.xi {
3447*53ee8cc1Swenshuai.xi *pu16SignalBar = (MS_U16)(4.0f * ch_power_db_rel + 10.0f);
3448*53ee8cc1Swenshuai.xi }
3449*53ee8cc1Swenshuai.xi else if (ch_power_db_rel <= 35.0f)
3450*53ee8cc1Swenshuai.xi {
3451*53ee8cc1Swenshuai.xi *pu16SignalBar = (MS_U16)(2.0f/3 * (ch_power_db_rel-20.0f) + 90.0);
3452*53ee8cc1Swenshuai.xi }
3453*53ee8cc1Swenshuai.xi else
3454*53ee8cc1Swenshuai.xi {
3455*53ee8cc1Swenshuai.xi *pu16SignalBar = 100;
3456*53ee8cc1Swenshuai.xi }
3457*53ee8cc1Swenshuai.xi
3458*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>>>Signal Strength(SSI) = %d\n", (int)*pu16SignalBar));
3459*53ee8cc1Swenshuai.xi
3460*53ee8cc1Swenshuai.xi return status;
3461*53ee8cc1Swenshuai.xi }
3462*53ee8cc1Swenshuai.xi
3463*53ee8cc1Swenshuai.xi //SQI
3464*53ee8cc1Swenshuai.xi /****************************************************************************
3465*53ee8cc1Swenshuai.xi Subject: To get the DVT Signal quility
3466*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_GetSignalQuality
3467*53ee8cc1Swenshuai.xi Parmeter: Quility
3468*53ee8cc1Swenshuai.xi Return: E_RESULT_SUCCESS
3469*53ee8cc1Swenshuai.xi E_RESULT_FAILURE
3470*53ee8cc1Swenshuai.xi Remark: Here we have 4 level range
3471*53ee8cc1Swenshuai.xi <1>.First Range => Quility =100 (You can define it by INTERN_DVBT_SIGNAL_BASE_100)
3472*53ee8cc1Swenshuai.xi <2>.2th Range => 60 < Quality < 100 (You can define it by INTERN_DVBT_SIGNAL_BASE_60)
3473*53ee8cc1Swenshuai.xi <3>.3th Range => 10 < Quality < 60 (You can define it by INTERN_DVBT_SIGNAL_BASE_10)
3474*53ee8cc1Swenshuai.xi <4>.4th Range => Quality <10
3475*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_GetSignalQuality(MS_U16 * quality,const DMD_DVBS_InitData * sDMD_DVBS_InitData,MS_U8 u8SarValue,float fRFPowerDbm)3476*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetSignalQuality(MS_U16 *quality, const DMD_DVBS_InitData *sDMD_DVBS_InitData, MS_U8 u8SarValue, float fRFPowerDbm)
3477*53ee8cc1Swenshuai.xi {
3478*53ee8cc1Swenshuai.xi
3479*53ee8cc1Swenshuai.xi float fber = 0.0;
3480*53ee8cc1Swenshuai.xi //float log_ber;
3481*53ee8cc1Swenshuai.xi MS_BOOL status = TRUE;
3482*53ee8cc1Swenshuai.xi float f_snr = 0.0, ber_sqi = 0.0, cn_rel = 0.0;
3483*53ee8cc1Swenshuai.xi MS_U8 u8Data =0;
3484*53ee8cc1Swenshuai.xi MS_U16 u16Data =0;
3485*53ee8cc1Swenshuai.xi DMD_DVBS_CODE_RATE_TYPE _u8_DVBS2_CurrentCodeRateLocal ;
3486*53ee8cc1Swenshuai.xi MS_U16 bchpkt_error,BCH_Eflag2_Window;
3487*53ee8cc1Swenshuai.xi //fRFPowerDbm = fRFPowerDbm;
3488*53ee8cc1Swenshuai.xi float snr_poly =0.0;
3489*53ee8cc1Swenshuai.xi float Fixed_SNR =0.0;
3490*53ee8cc1Swenshuai.xi double eFlag_PER=0.0;
3491*53ee8cc1Swenshuai.xi
3492*53ee8cc1Swenshuai.xi if (TRUE == INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK, 200.0f, -200.0f, 0))
3493*53ee8cc1Swenshuai.xi {
3494*53ee8cc1Swenshuai.xi if(_bDemodType) //S2
3495*53ee8cc1Swenshuai.xi {
3496*53ee8cc1Swenshuai.xi
3497*53ee8cc1Swenshuai.xi //INTERN_DVBS_GetSNR(&f_snr);
3498*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_7, &u8Data);
3499*53ee8cc1Swenshuai.xi u16Data=u8Data;
3500*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_6, &u8Data);
3501*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
3502*53ee8cc1Swenshuai.xi f_snr=(float)u16Data/256.0;
3503*53ee8cc1Swenshuai.xi snr_poly = 0.005261367463671*pow(f_snr, 3)-0.116517828301214*pow(f_snr, 2)+0.744836970505452*pow(f_snr, 1)-0.86727609780167;
3504*53ee8cc1Swenshuai.xi Fixed_SNR = f_snr + snr_poly;
3505*53ee8cc1Swenshuai.xi
3506*53ee8cc1Swenshuai.xi if (Fixed_SNR < 17.0)
3507*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR;
3508*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 20.0) && (Fixed_SNR >= 17.0))
3509*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 0.8;
3510*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 22.5) && (Fixed_SNR >= 20.0))
3511*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 2.0;
3512*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 27.0) && (Fixed_SNR >= 22.5))
3513*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 3.0;
3514*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 29.0) && (Fixed_SNR >= 27.0))
3515*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 3.5;
3516*53ee8cc1Swenshuai.xi else if (Fixed_SNR >= 29.0)
3517*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 3.0;
3518*53ee8cc1Swenshuai.xi
3519*53ee8cc1Swenshuai.xi
3520*53ee8cc1Swenshuai.xi if (Fixed_SNR < 1.0)
3521*53ee8cc1Swenshuai.xi Fixed_SNR = 1.0;
3522*53ee8cc1Swenshuai.xi if (Fixed_SNR > 30.0)
3523*53ee8cc1Swenshuai.xi Fixed_SNR = 30.0;
3524*53ee8cc1Swenshuai.xi
3525*53ee8cc1Swenshuai.xi //BCH EFLAG2_Window, window size 0x2000
3526*53ee8cc1Swenshuai.xi BCH_Eflag2_Window=0x2000;
3527*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2FEC_REG_BASE + 0x25*2 + 1, (BCH_Eflag2_Window>>8));
3528*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2FEC_REG_BASE + 0x25*2 , (BCH_Eflag2_Window&0xff));
3529*53ee8cc1Swenshuai.xi INTERN_DVBS_GetPacketErr(&bchpkt_error);
3530*53ee8cc1Swenshuai.xi eFlag_PER = (float)(bchpkt_error)/(float)(BCH_Eflag2_Window);
3531*53ee8cc1Swenshuai.xi if(eFlag_PER>0)
3532*53ee8cc1Swenshuai.xi fber = 0.089267531133002*pow(eFlag_PER, 2) + 0.019640560289510*eFlag_PER + 0.0000001;
3533*53ee8cc1Swenshuai.xi else
3534*53ee8cc1Swenshuai.xi fber = 0;
3535*53ee8cc1Swenshuai.xi
3536*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
3537*53ee8cc1Swenshuai.xi //log_ber = ( - 1) *log10f(1 / fber);
3538*53ee8cc1Swenshuai.xi if (fber > 1.0E-1)
3539*53ee8cc1Swenshuai.xi ber_sqi = (log10f(1.0f/fber))*20.0f + 8.0f;
3540*53ee8cc1Swenshuai.xi else if(fber > 8.5E-7)
3541*53ee8cc1Swenshuai.xi ber_sqi = (log10f(1.0f/fber))*20.0f - 30.0f;
3542*53ee8cc1Swenshuai.xi else
3543*53ee8cc1Swenshuai.xi ber_sqi = 100.0;
3544*53ee8cc1Swenshuai.xi #else
3545*53ee8cc1Swenshuai.xi //log_ber = ( - 1) *Log10Approx(1 / fber);
3546*53ee8cc1Swenshuai.xi if (fber > 1.0E-1)
3547*53ee8cc1Swenshuai.xi ber_sqi = (Log10Approx(1.0f/fber))*20.0f + 8.0f;
3548*53ee8cc1Swenshuai.xi else if(fber > 8.5E-7)
3549*53ee8cc1Swenshuai.xi ber_sqi = (Log10Approx(1.0f/fber))*20.0f - 30.0f;
3550*53ee8cc1Swenshuai.xi else
3551*53ee8cc1Swenshuai.xi ber_sqi = 100.0;
3552*53ee8cc1Swenshuai.xi
3553*53ee8cc1Swenshuai.xi #endif
3554*53ee8cc1Swenshuai.xi
3555*53ee8cc1Swenshuai.xi *quality = Fixed_SNR/30*ber_sqi;
3556*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" Fixed_SNR %f\n",Fixed_SNR));
3557*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" BCH_Eflag2_Window %d\n",BCH_Eflag2_Window));
3558*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" eFlag_PER [%f]\n fber [%8.3e]\n ber_sqi [%f]\n",eFlag_PER,fber,ber_sqi));
3559*53ee8cc1Swenshuai.xi }
3560*53ee8cc1Swenshuai.xi else //S
3561*53ee8cc1Swenshuai.xi {
3562*53ee8cc1Swenshuai.xi if (INTERN_DVBS_GetPostViterbiBer(&fber) == FALSE)//ViterbiBer
3563*53ee8cc1Swenshuai.xi {
3564*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("\nGetPostViterbiBer Fail!"));
3565*53ee8cc1Swenshuai.xi return FALSE;
3566*53ee8cc1Swenshuai.xi }
3567*53ee8cc1Swenshuai.xi _fPostBer=fber;
3568*53ee8cc1Swenshuai.xi
3569*53ee8cc1Swenshuai.xi
3570*53ee8cc1Swenshuai.xi if (status==FALSE)
3571*53ee8cc1Swenshuai.xi {
3572*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("MSB131X_DTV_GetSignalQuality GetPostViterbiBer Fail!\n"));
3573*53ee8cc1Swenshuai.xi return 0;
3574*53ee8cc1Swenshuai.xi }
3575*53ee8cc1Swenshuai.xi float fDVBS_SQI_CNref[]=
3576*53ee8cc1Swenshuai.xi { //0, 1, 2, 3, 4
3577*53ee8cc1Swenshuai.xi 4.2, 5.9, 6, 6.9, 7.5,//QPSK
3578*53ee8cc1Swenshuai.xi };
3579*53ee8cc1Swenshuai.xi
3580*53ee8cc1Swenshuai.xi INTERN_DVBS_GetCurrentDemodCodeRate(&_u8_DVBS2_CurrentCodeRateLocal);
3581*53ee8cc1Swenshuai.xi #if 0
3582*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
3583*53ee8cc1Swenshuai.xi log_ber = ( - 1.0f) *log10f(1.0f / fber); //BY modify
3584*53ee8cc1Swenshuai.xi #else
3585*53ee8cc1Swenshuai.xi log_ber = ( - 1.0f) *Log10Approx(1.0f / fber); //BY modify
3586*53ee8cc1Swenshuai.xi #endif
3587*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("\nLog(BER) = %f\n",log_ber));
3588*53ee8cc1Swenshuai.xi #endif
3589*53ee8cc1Swenshuai.xi if (fber > 2.5E-2)
3590*53ee8cc1Swenshuai.xi ber_sqi = 0.0;
3591*53ee8cc1Swenshuai.xi else if(fber > 8.5E-7)
3592*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
3593*53ee8cc1Swenshuai.xi ber_sqi = (log10f(1.0f/fber))*20.0f - 32.0f; //40.0f;
3594*53ee8cc1Swenshuai.xi #else
3595*53ee8cc1Swenshuai.xi ber_sqi = (Log10Approx(1.0f/fber))*20.0f - 32.0f;//40.0f;
3596*53ee8cc1Swenshuai.xi #endif
3597*53ee8cc1Swenshuai.xi else
3598*53ee8cc1Swenshuai.xi ber_sqi = 100.0;
3599*53ee8cc1Swenshuai.xi
3600*53ee8cc1Swenshuai.xi //status &= INTERN_DVBS_GetSNR(&f_snr);
3601*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_7, &u8Data);
3602*53ee8cc1Swenshuai.xi u16Data=u8Data;
3603*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_6, &u8Data);
3604*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
3605*53ee8cc1Swenshuai.xi f_snr=(float)u16Data/256.0;
3606*53ee8cc1Swenshuai.xi DBG_GET_SIGNAL_DVBS(printf("INTERN_DVBS GetSNR = %d \n", (int)f_snr));
3607*53ee8cc1Swenshuai.xi
3608*53ee8cc1Swenshuai.xi cn_rel = f_snr - fDVBS_SQI_CNref[_u8_DVBS2_CurrentCodeRateLocal];
3609*53ee8cc1Swenshuai.xi
3610*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" fber = %f\n",fber));
3611*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" f_snr = %f\n",f_snr));
3612*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" cn_nordig_s1 = %f\n",fDVBS_SQI_CNref[_u8_DVBS2_CurrentCodeRateLocal]));
3613*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" cn_rel = %f\n",cn_rel));
3614*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" ber_sqi = %f\n",ber_sqi));
3615*53ee8cc1Swenshuai.xi
3616*53ee8cc1Swenshuai.xi if (cn_rel < -7.0f)
3617*53ee8cc1Swenshuai.xi {
3618*53ee8cc1Swenshuai.xi *quality = 0;
3619*53ee8cc1Swenshuai.xi }
3620*53ee8cc1Swenshuai.xi else if (cn_rel < 3.0)
3621*53ee8cc1Swenshuai.xi {
3622*53ee8cc1Swenshuai.xi *quality = (MS_U16)(ber_sqi*((cn_rel - 3.0)/10.0 + 1.0));
3623*53ee8cc1Swenshuai.xi }
3624*53ee8cc1Swenshuai.xi else
3625*53ee8cc1Swenshuai.xi {
3626*53ee8cc1Swenshuai.xi *quality = (MS_U16)ber_sqi;
3627*53ee8cc1Swenshuai.xi }
3628*53ee8cc1Swenshuai.xi
3629*53ee8cc1Swenshuai.xi
3630*53ee8cc1Swenshuai.xi }
3631*53ee8cc1Swenshuai.xi //INTERN_DVBS_GetTunrSignalLevel_PWR();//For Debug.
3632*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>>>>Signal Quility(SQI) = %d\n", *quality));
3633*53ee8cc1Swenshuai.xi return TRUE;
3634*53ee8cc1Swenshuai.xi }
3635*53ee8cc1Swenshuai.xi else
3636*53ee8cc1Swenshuai.xi {
3637*53ee8cc1Swenshuai.xi *quality = 0;
3638*53ee8cc1Swenshuai.xi }
3639*53ee8cc1Swenshuai.xi
3640*53ee8cc1Swenshuai.xi return TRUE;
3641*53ee8cc1Swenshuai.xi }
3642*53ee8cc1Swenshuai.xi
3643*53ee8cc1Swenshuai.xi /****************************************************************************
3644*53ee8cc1Swenshuai.xi Subject: To get the Cell ID
3645*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_Get_CELL_ID
3646*53ee8cc1Swenshuai.xi Parmeter: point to return parameter cell_id
3647*53ee8cc1Swenshuai.xi
3648*53ee8cc1Swenshuai.xi Return: TRUE
3649*53ee8cc1Swenshuai.xi FALSE
3650*53ee8cc1Swenshuai.xi Remark:
3651*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_Get_CELL_ID(MS_U16 * cell_id)3652*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Get_CELL_ID(MS_U16 *cell_id)
3653*53ee8cc1Swenshuai.xi {
3654*53ee8cc1Swenshuai.xi MS_BOOL status = true;
3655*53ee8cc1Swenshuai.xi MS_U8 value1 = 0;
3656*53ee8cc1Swenshuai.xi MS_U8 value2 = 0;
3657*53ee8cc1Swenshuai.xi
3658*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FDP_REG_BASE+0x2B, &value2); //TPS Cell ID [15:8]
3659*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FDP_REG_BASE+0x2A, &value1); //TPS Cell ID [7:0]
3660*53ee8cc1Swenshuai.xi
3661*53ee8cc1Swenshuai.xi *cell_id = ((MS_U16)value1<<8)|value2;
3662*53ee8cc1Swenshuai.xi return status;
3663*53ee8cc1Swenshuai.xi }
3664*53ee8cc1Swenshuai.xi
3665*53ee8cc1Swenshuai.xi /****************************************************************************
3666*53ee8cc1Swenshuai.xi Subject: To get the DVBC Carrier Freq Offset
3667*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_Get_FreqOffset
3668*53ee8cc1Swenshuai.xi Parmeter: Frequency offset (in KHz), bandwidth
3669*53ee8cc1Swenshuai.xi Return: E_RESULT_SUCCESS
3670*53ee8cc1Swenshuai.xi E_RESULT_FAILURE
3671*53ee8cc1Swenshuai.xi Remark:
3672*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_Get_FreqOffset(float * pFreqOff,MS_U8 u8BW)3673*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Get_FreqOffset(float *pFreqOff, MS_U8 u8BW)
3674*53ee8cc1Swenshuai.xi {
3675*53ee8cc1Swenshuai.xi //MS_U8 u8Data;
3676*53ee8cc1Swenshuai.xi //MS_U16 u16Data;
3677*53ee8cc1Swenshuai.xi //MS_S16 s16CFO;
3678*53ee8cc1Swenshuai.xi //float FreqOffset;
3679*53ee8cc1Swenshuai.xi //MS_U32 u32FreqOffset = 0;
3680*53ee8cc1Swenshuai.xi //MS_U8 reg = 0;
3681*53ee8cc1Swenshuai.xi MS_BOOL status = TRUE;
3682*53ee8cc1Swenshuai.xi #if 0
3683*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>> INTERN_DVBS_Get_FreqOffset DVBS_Estimated_CFO <<<\n"));
3684*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_97, &u8Data);
3685*53ee8cc1Swenshuai.xi u16Data=u8Data;
3686*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_96, &u8Data);
3687*53ee8cc1Swenshuai.xi u16Data=(u16Data<<8)|u8Data; //Center_Freq_Offset
3688*53ee8cc1Swenshuai.xi if (u16Data >= 0x8000)
3689*53ee8cc1Swenshuai.xi {
3690*53ee8cc1Swenshuai.xi u16Data=0x10000- u16Data;
3691*53ee8cc1Swenshuai.xi s16CFO=-1*u16Data;
3692*53ee8cc1Swenshuai.xi }
3693*53ee8cc1Swenshuai.xi else
3694*53ee8cc1Swenshuai.xi {
3695*53ee8cc1Swenshuai.xi s16CFO=u16Data;
3696*53ee8cc1Swenshuai.xi }
3697*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>> INTERN_DVBS_Get_FreqOffset CFO = %d[KHz] <<<\n", s16CFO));
3698*53ee8cc1Swenshuai.xi if(abs(s16CFO)%1000 >= 500)
3699*53ee8cc1Swenshuai.xi {
3700*53ee8cc1Swenshuai.xi if(s16CFO < 0)
3701*53ee8cc1Swenshuai.xi *pFreqOff=(s16CFO/1000)-1.0;
3702*53ee8cc1Swenshuai.xi else
3703*53ee8cc1Swenshuai.xi *pFreqOff=(s16CFO/1000)+1.0;
3704*53ee8cc1Swenshuai.xi }
3705*53ee8cc1Swenshuai.xi else
3706*53ee8cc1Swenshuai.xi *pFreqOff = s16CFO/1000;
3707*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(">>> INTERN_DVBS_Get_FreqOffset *pFreqOff = %d[MHz] <<<\n", (MS_S16)*pFreqOff));
3708*53ee8cc1Swenshuai.xi // no use.
3709*53ee8cc1Swenshuai.xi u8BW = u8BW;
3710*53ee8cc1Swenshuai.xi /*
3711*53ee8cc1Swenshuai.xi printf("INTERN_DVBS_Get_FreqOffset\n");//DBG_INTERN_DVBS(printf("INTERN_DVBS_Get_FreqOffset\n"));
3712*53ee8cc1Swenshuai.xi
3713*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTENDEXT2_REG_BASE + 0x1C*2 + 1, 0x08);
3714*53ee8cc1Swenshuai.xi
3715*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x05, ®);
3716*53ee8cc1Swenshuai.xi reg|=0x80;
3717*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE + 0x05, reg);
3718*53ee8cc1Swenshuai.xi
3719*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT2_REG_BASE + 0x23*2, ®);
3720*53ee8cc1Swenshuai.xi u32FreqOffset=reg;
3721*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT2_REG_BASE + 0x22*2 + 1, ®);
3722*53ee8cc1Swenshuai.xi u32FreqOffset=(u32FreqOffset<<8)|reg;
3723*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT2_REG_BASE + 0x22*2, ®);
3724*53ee8cc1Swenshuai.xi u32FreqOffset=(u32FreqOffset<<8)|reg;
3725*53ee8cc1Swenshuai.xi
3726*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x05, ®);
3727*53ee8cc1Swenshuai.xi reg&=~(0x80);
3728*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE + 0x05, reg);
3729*53ee8cc1Swenshuai.xi
3730*53ee8cc1Swenshuai.xi FreqOffset=(float)u32FreqOffset;
3731*53ee8cc1Swenshuai.xi if (FreqOffset>=2048)
3732*53ee8cc1Swenshuai.xi {
3733*53ee8cc1Swenshuai.xi FreqOffset=FreqOffset-4096;
3734*53ee8cc1Swenshuai.xi }
3735*53ee8cc1Swenshuai.xi FreqOffset=(FreqOffset/4096)*SAMPLING_RATE_FS;
3736*53ee8cc1Swenshuai.xi
3737*53ee8cc1Swenshuai.xi *pFreqOff = FreqOffset/1000; //KHz
3738*53ee8cc1Swenshuai.xi printf("INTERN_DVBS_Get_FreqOffset:%d[MHz]\n", (MS_S16)FreqOffset/1000);//DBG_INTERN_DVBS(printf("INTERN_DVBS_Get_FreqOffset:%f[MHz]\n", FreqOffset/1000));
3739*53ee8cc1Swenshuai.xi */
3740*53ee8cc1Swenshuai.xi #endif
3741*53ee8cc1Swenshuai.xi return status;
3742*53ee8cc1Swenshuai.xi }
3743*53ee8cc1Swenshuai.xi
3744*53ee8cc1Swenshuai.xi /****************************************************************************
3745*53ee8cc1Swenshuai.xi Subject: To get the current modulation type at the DVB-S Demod
3746*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_GetCurrentModulationType
3747*53ee8cc1Swenshuai.xi Parmeter: pointer for return QAM type
3748*53ee8cc1Swenshuai.xi
3749*53ee8cc1Swenshuai.xi Return: TRUE
3750*53ee8cc1Swenshuai.xi FALSE
3751*53ee8cc1Swenshuai.xi Remark:
3752*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_GetCurrentModulationType(DMD_DVBS_MODULATION_TYPE * pQAMMode)3753*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetCurrentModulationType(DMD_DVBS_MODULATION_TYPE *pQAMMode)
3754*53ee8cc1Swenshuai.xi {
3755*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
3756*53ee8cc1Swenshuai.xi MS_U16 u16tmp=0;
3757*53ee8cc1Swenshuai.xi MS_U8 MOD_type;
3758*53ee8cc1Swenshuai.xi MS_BOOL status = true;
3759*53ee8cc1Swenshuai.xi //DMD_DVBS_DEMOD_TYPE pDemodType = 0;
3760*53ee8cc1Swenshuai.xi
3761*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetCurrentModulationType\n"));
3762*53ee8cc1Swenshuai.xi
3763*53ee8cc1Swenshuai.xi //status &= INTERN_DVBS_GetCurrentDemodType(&pDemodType);
3764*53ee8cc1Swenshuai.xi
3765*53ee8cc1Swenshuai.xi // read code rate, pilot on/off, long/short FEC type, and modulation type for calculating TOP_DVBTM_TS_CLK_DIVNUM
3766*53ee8cc1Swenshuai.xi // pilot_flag => 0 : off 1 : on
3767*53ee8cc1Swenshuai.xi // fec_type_idx => 0 : normal 1 : short
3768*53ee8cc1Swenshuai.xi // mod_type_idx => 0 : QPSK 1 : 8PSK 2 : 16APSK
3769*53ee8cc1Swenshuai.xi // code_rate_idx => 0 : 1/4 1 : 1/3 2 : 2/5 3 : 1/2 4 : 3/5 5 : 2/3
3770*53ee8cc1Swenshuai.xi // 6 : 3/4 7 : 4/5 8 : 5/6 9 : 8/9 10 : 9/10
3771*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SYSTEM_TYPE, &u8Data);//V
3772*53ee8cc1Swenshuai.xi if(u8Data)
3773*53ee8cc1Swenshuai.xi {
3774*53ee8cc1Swenshuai.xi *pQAMMode = DMD_DVBS_QPSK;
3775*53ee8cc1Swenshuai.xi modulation_order=2;
3776*53ee8cc1Swenshuai.xi printf("INTERN_DVBS_GetCurrentModulationType [dvbs]ModulationType=DVBS_QPSK\n");//DBG_INTERN_DVBS_LOCK(printf("[dvbs]ModulationType=DVBS_QPSK\n"));
3777*53ee8cc1Swenshuai.xi //return TRUE;
3778*53ee8cc1Swenshuai.xi }
3779*53ee8cc1Swenshuai.xi else //S2
3780*53ee8cc1Swenshuai.xi {
3781*53ee8cc1Swenshuai.xi //MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x96, &u8Data);
3782*53ee8cc1Swenshuai.xi //printf(">>> INTERN_DVBS_GetCurrentModulationType INNER 0x4B = 0x%x <<<\n", u8Data);
3783*53ee8cc1Swenshuai.xi //if((u8Data & 0x0F)==0x02) //QPSK
3784*53ee8cc1Swenshuai.xi /*MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MOD_TYPE, &u8Data1);
3785*53ee8cc1Swenshuai.xi printf("@@@@@E_DMD_S2_MOD_TYPE = %d \n ",u8Data1);
3786*53ee8cc1Swenshuai.xi printf("@@@@@ E_DMD_S2_MOD_TYPE=%d \n",E_DMD_S2_MOD_TYPE);
3787*53ee8cc1Swenshuai.xi
3788*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_IS_ID, &u8Data1);
3789*53ee8cc1Swenshuai.xi printf("@@@@@E_DMD_S2_IS_ID = %d \n ",u8Data1);
3790*53ee8cc1Swenshuai.xi printf("@@@@@ E_DMD_S2_IS_ID=%d \n",E_DMD_S2_IS_ID);*/
3791*53ee8cc1Swenshuai.xi
3792*53ee8cc1Swenshuai.xi // INNER_DEBUG_SEL
3793*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(0x3b00+0x04*2+1, &u8Data);
3794*53ee8cc1Swenshuai.xi u8Data = u8Data & 0xc0;
3795*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(0x3b00+0x04*2+1, u8Data);
3796*53ee8cc1Swenshuai.xi
3797*53ee8cc1Swenshuai.xi // reg_plscdec_debug_out
3798*53ee8cc1Swenshuai.xi // PLSCDEC info
3799*53ee8cc1Swenshuai.xi //[0:4] PLSC MODCOD
3800*53ee8cc1Swenshuai.xi //[5] dummy frame
3801*53ee8cc1Swenshuai.xi //[6] reserve frame
3802*53ee8cc1Swenshuai.xi //[7:9] modulation type
3803*53ee8cc1Swenshuai.xi //[10:13] code rate type
3804*53ee8cc1Swenshuai.xi //[14] FEC type
3805*53ee8cc1Swenshuai.xi //[15] pilot type
3806*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(0x3b00+0x6b*2 , &u8Data);
3807*53ee8cc1Swenshuai.xi u16tmp = (MS_U16)u8Data;
3808*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(0x3b00+0x6b*2+1 , &u8Data);
3809*53ee8cc1Swenshuai.xi u16tmp |= (MS_U16)u8Data << 8;
3810*53ee8cc1Swenshuai.xi MOD_type = ((MS_U8)(u16tmp>>7)&0x07); // 2:QPSK, 3:8PSK, 4:16APSK, 5:32APSK
3811*53ee8cc1Swenshuai.xi
3812*53ee8cc1Swenshuai.xi if(MOD_type==2)
3813*53ee8cc1Swenshuai.xi {
3814*53ee8cc1Swenshuai.xi *pQAMMode = DMD_DVBS_QPSK;
3815*53ee8cc1Swenshuai.xi modulation_order=2;
3816*53ee8cc1Swenshuai.xi printf("INTERN_DVBS_GetCurrentModulationType [dvbs2]ModulationType=DVBS2_QPSK\n");//DBG_INTERN_DVBS_LOCK(printf("[dvbs]ModulationType=DVBS2_QPSK\n"));
3817*53ee8cc1Swenshuai.xi //return TRUE;
3818*53ee8cc1Swenshuai.xi }
3819*53ee8cc1Swenshuai.xi else if(MOD_type==3)
3820*53ee8cc1Swenshuai.xi {
3821*53ee8cc1Swenshuai.xi *pQAMMode = DMD_DVBS_8PSK;
3822*53ee8cc1Swenshuai.xi modulation_order=3;
3823*53ee8cc1Swenshuai.xi printf("INTERN_DVBS_GetCurrentModulationType [dvbs2]ModulationType=DVBS2_8PSK\n");//DBG_INTERN_DVBS_LOCK(printf("[dvbs]ModulationType=DVBS2_8PSK\n"));
3824*53ee8cc1Swenshuai.xi //return TRUE;
3825*53ee8cc1Swenshuai.xi }
3826*53ee8cc1Swenshuai.xi else if(MOD_type==4)
3827*53ee8cc1Swenshuai.xi {
3828*53ee8cc1Swenshuai.xi *pQAMMode = DMD_DVBS_16APSK;
3829*53ee8cc1Swenshuai.xi modulation_order=4;
3830*53ee8cc1Swenshuai.xi printf("INTERN_DVBS_GetCurrentModulationType [dvbs2]ModulationType=DVBS2_16APSK\n");
3831*53ee8cc1Swenshuai.xi }
3832*53ee8cc1Swenshuai.xi else
3833*53ee8cc1Swenshuai.xi {
3834*53ee8cc1Swenshuai.xi *pQAMMode = DMD_DVBS_QPSK;
3835*53ee8cc1Swenshuai.xi modulation_order=2;
3836*53ee8cc1Swenshuai.xi printf("INTERN_DVBS_GetCurrentModulationType [dvbs2]ModulationType=NOT SUPPORT\n");
3837*53ee8cc1Swenshuai.xi return FALSE;
3838*53ee8cc1Swenshuai.xi }
3839*53ee8cc1Swenshuai.xi
3840*53ee8cc1Swenshuai.xi }
3841*53ee8cc1Swenshuai.xi
3842*53ee8cc1Swenshuai.xi return status;
3843*53ee8cc1Swenshuai.xi /*#else
3844*53ee8cc1Swenshuai.xi *pQAMMode = DMD_DVBS_QPSK;
3845*53ee8cc1Swenshuai.xi printf("[dvbs]ModulationType=DVBS_QPSK\n");//DBG_INTERN_DVBS_LOCK(printf("[dvbs]ModulationType=DVBS_QPSK\n"));
3846*53ee8cc1Swenshuai.xi //return true;
3847*53ee8cc1Swenshuai.xi #endif*/
3848*53ee8cc1Swenshuai.xi }
3849*53ee8cc1Swenshuai.xi
3850*53ee8cc1Swenshuai.xi /****************************************************************************
3851*53ee8cc1Swenshuai.xi Subject: To get the current DemodType at the DVB-S Demod
3852*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_GetCurrentDemodType
3853*53ee8cc1Swenshuai.xi Parmeter: pointer for return DVBS/DVBS2 type
3854*53ee8cc1Swenshuai.xi
3855*53ee8cc1Swenshuai.xi Return: TRUE
3856*53ee8cc1Swenshuai.xi FALSE
3857*53ee8cc1Swenshuai.xi Remark:
3858*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_GetCurrentDemodType(DMD_DVBS_DEMOD_TYPE * pDemodType)3859*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetCurrentDemodType(DMD_DVBS_DEMOD_TYPE *pDemodType)//V
3860*53ee8cc1Swenshuai.xi {
3861*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
3862*53ee8cc1Swenshuai.xi MS_BOOL status = true;
3863*53ee8cc1Swenshuai.xi
3864*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetCurrentDemodType\n"));
3865*53ee8cc1Swenshuai.xi
3866*53ee8cc1Swenshuai.xi //MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x80, &u8Data);//status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x80, &u8Data);
3867*53ee8cc1Swenshuai.xi //printf(">>> INTERN_DVBS_GetCurrentDemodType INNER 0x40 = 0x%x <<<\n", u8Data);
3868*53ee8cc1Swenshuai.xi //if ((u8Data & 0x01) == 0)
3869*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SYSTEM_TYPE, &u8Data);//E_DMD_S2_SYSTEM_TYPE 0: S2 ; 1 :S
3870*53ee8cc1Swenshuai.xi if(!u8Data) //S2
3871*53ee8cc1Swenshuai.xi {
3872*53ee8cc1Swenshuai.xi *pDemodType = DMD_SAT_DVBS2;
3873*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("[dvbs]DemodType=DVBS2\n"));
3874*53ee8cc1Swenshuai.xi }
3875*53ee8cc1Swenshuai.xi else //S
3876*53ee8cc1Swenshuai.xi {
3877*53ee8cc1Swenshuai.xi *pDemodType = DMD_SAT_DVBS;
3878*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("[dvbs]DemodType=DVBS\n"));
3879*53ee8cc1Swenshuai.xi }
3880*53ee8cc1Swenshuai.xi return status;
3881*53ee8cc1Swenshuai.xi }
3882*53ee8cc1Swenshuai.xi /****************************************************************************
3883*53ee8cc1Swenshuai.xi Subject: To get the current CodeRate at the DVB-S Demod
3884*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_GetCurrentCodeRate
3885*53ee8cc1Swenshuai.xi Parmeter: pointer for return Code Rate type
3886*53ee8cc1Swenshuai.xi
3887*53ee8cc1Swenshuai.xi Return: TRUE
3888*53ee8cc1Swenshuai.xi FALSE
3889*53ee8cc1Swenshuai.xi Remark:
3890*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_GetCurrentDemodCodeRate(DMD_DVBS_CODE_RATE_TYPE * pCodeRate)3891*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetCurrentDemodCodeRate(DMD_DVBS_CODE_RATE_TYPE *pCodeRate)
3892*53ee8cc1Swenshuai.xi {
3893*53ee8cc1Swenshuai.xi MS_U8 u8Data = 0;//, u8_gCodeRate = 0;
3894*53ee8cc1Swenshuai.xi MS_BOOL status = true;
3895*53ee8cc1Swenshuai.xi
3896*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetCurrentCodeRate\n"));
3897*53ee8cc1Swenshuai.xi //DMD_DVBS_DEMOD_TYPE pDemodType = 0;
3898*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SYSTEM_TYPE, &u8Data);
3899*53ee8cc1Swenshuai.xi //status &= INTERN_DVBS_GetCurrentDemodType(&pDemodType);
3900*53ee8cc1Swenshuai.xi if(!u8Data)
3901*53ee8cc1Swenshuai.xi //if((MS_U8)pDemodType == (MS_U8)DMD_SAT_DVBS2 ) //S2
3902*53ee8cc1Swenshuai.xi {
3903*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_CODE_RATE, &u8Data);
3904*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0xD7, &u8Data);
3905*53ee8cc1Swenshuai.xi //u8_gCodeRate = (u8Data & 0x3C);
3906*53ee8cc1Swenshuai.xi //_u8_DVBS2_CurrentCodeRate = 0;
3907*53ee8cc1Swenshuai.xi switch (u8Data)
3908*53ee8cc1Swenshuai.xi //switch (u8_gCodeRate)
3909*53ee8cc1Swenshuai.xi {
3910*53ee8cc1Swenshuai.xi case 0x03:
3911*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_1_2;
3912*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 5;//0;
3913*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS2_GetCurrentCodeRate=1_2\n"));
3914*53ee8cc1Swenshuai.xi break;
3915*53ee8cc1Swenshuai.xi case 0x01:
3916*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_1_3;
3917*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 6;//1;
3918*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS2_GetCurrentCodeRate=1_3\n"));
3919*53ee8cc1Swenshuai.xi break;
3920*53ee8cc1Swenshuai.xi case 0x05:
3921*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_2_3;
3922*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 7;//2;
3923*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS2_GetCurrentCodeRate=2_3\n"));
3924*53ee8cc1Swenshuai.xi break;
3925*53ee8cc1Swenshuai.xi case 0x00:
3926*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_1_4;
3927*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 8;//3;
3928*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS2_GetCurrentCodeRate=1_4\n"));
3929*53ee8cc1Swenshuai.xi break;
3930*53ee8cc1Swenshuai.xi case 0x06:
3931*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_3_4;
3932*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 9;//4;
3933*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS2_GetCurrentCodeRate=3_4\n"));
3934*53ee8cc1Swenshuai.xi break;
3935*53ee8cc1Swenshuai.xi case 0x02:
3936*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_2_5;
3937*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 10;//5;
3938*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS2_GetCurrentCodeRate=2_5\n"));
3939*53ee8cc1Swenshuai.xi break;
3940*53ee8cc1Swenshuai.xi case 0x04:
3941*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_3_5;
3942*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 11;//6;
3943*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS2_GetCurrentCodeRate=3_5\n"));
3944*53ee8cc1Swenshuai.xi break;
3945*53ee8cc1Swenshuai.xi case 0x07:
3946*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_4_5;
3947*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 12;//7;
3948*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS2_GetCurrentCodeRate=4_5\n"));
3949*53ee8cc1Swenshuai.xi break;
3950*53ee8cc1Swenshuai.xi case 0x08:
3951*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_5_6;
3952*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 13;//8;
3953*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS2_GetCurrentCodeRate=5_6\n"));
3954*53ee8cc1Swenshuai.xi break;
3955*53ee8cc1Swenshuai.xi case 0x09:
3956*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_8_9;
3957*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 14;//9;
3958*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS2_GetCurrentCodeRate=8_9\n"));
3959*53ee8cc1Swenshuai.xi break;
3960*53ee8cc1Swenshuai.xi case 0x0a:
3961*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_9_10;
3962*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 15;//10;
3963*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS2_GetCurrentCodeRate=9_10\n"));
3964*53ee8cc1Swenshuai.xi break;
3965*53ee8cc1Swenshuai.xi default:
3966*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_9_10;
3967*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 15;//10;
3968*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS2_GetCurrentCodeRate=DVBS2_Default\n"));
3969*53ee8cc1Swenshuai.xi }
3970*53ee8cc1Swenshuai.xi }
3971*53ee8cc1Swenshuai.xi else //S
3972*53ee8cc1Swenshuai.xi {
3973*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_CODE_RATE, &u8Data);
3974*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE + 0x3A*2, &u8Data);
3975*53ee8cc1Swenshuai.xi //u8_gCodeRate = (u8Data & 0x70)>>4;
3976*53ee8cc1Swenshuai.xi switch (u8Data)
3977*53ee8cc1Swenshuai.xi //switch (u8_gCodeRate)
3978*53ee8cc1Swenshuai.xi {
3979*53ee8cc1Swenshuai.xi case 0x00:
3980*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_1_2;
3981*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 0;
3982*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetCurrentCodeRate=1_2\n"));
3983*53ee8cc1Swenshuai.xi break;
3984*53ee8cc1Swenshuai.xi case 0x01:
3985*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_2_3;
3986*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 1;
3987*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetCurrentCodeRate=2_3\n"));
3988*53ee8cc1Swenshuai.xi break;
3989*53ee8cc1Swenshuai.xi case 0x02:
3990*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_3_4;
3991*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 2;
3992*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetCurrentCodeRate=3_4\n"));
3993*53ee8cc1Swenshuai.xi break;
3994*53ee8cc1Swenshuai.xi case 0x03:
3995*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_5_6;
3996*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 3;
3997*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetCurrentCodeRate=5_6\n"));
3998*53ee8cc1Swenshuai.xi break;
3999*53ee8cc1Swenshuai.xi case 0x04:
4000*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_7_8;
4001*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 4;
4002*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetCurrentCodeRate=7_8\n"));
4003*53ee8cc1Swenshuai.xi break;
4004*53ee8cc1Swenshuai.xi default:
4005*53ee8cc1Swenshuai.xi *pCodeRate = DMD_CONV_CODE_RATE_7_8;
4006*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentCodeRate = 4;
4007*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetCurrentCodeRate=DVBS_Default\n"));
4008*53ee8cc1Swenshuai.xi }
4009*53ee8cc1Swenshuai.xi }
4010*53ee8cc1Swenshuai.xi return status;
4011*53ee8cc1Swenshuai.xi }
4012*53ee8cc1Swenshuai.xi
4013*53ee8cc1Swenshuai.xi /****************************************************************************
4014*53ee8cc1Swenshuai.xi Subject: To get the current symbol rate at the DVB-S Demod
4015*53ee8cc1Swenshuai.xi Function: INTERN_DVBS_GetCurrentSymbolRate
4016*53ee8cc1Swenshuai.xi Parmeter: pointer pData for return Symbolrate
4017*53ee8cc1Swenshuai.xi
4018*53ee8cc1Swenshuai.xi Return: TRUE
4019*53ee8cc1Swenshuai.xi FALSE
4020*53ee8cc1Swenshuai.xi Remark:
4021*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_GetCurrentSymbolRate(MS_U32 * u32SymbolRate)4022*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetCurrentSymbolRate(MS_U32 *u32SymbolRate)
4023*53ee8cc1Swenshuai.xi {
4024*53ee8cc1Swenshuai.xi MS_U8 tmp = 0;
4025*53ee8cc1Swenshuai.xi MS_U16 u16SymbolRateTmp = 0;
4026*53ee8cc1Swenshuai.xi
4027*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H, &tmp);
4028*53ee8cc1Swenshuai.xi u16SymbolRateTmp = tmp;
4029*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L, &tmp);
4030*53ee8cc1Swenshuai.xi u16SymbolRateTmp = (u16SymbolRateTmp<<8)|tmp;
4031*53ee8cc1Swenshuai.xi
4032*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_5, &tmp);
4033*53ee8cc1Swenshuai.xi *u32SymbolRate = (tmp<<16)|u16SymbolRateTmp;
4034*53ee8cc1Swenshuai.xi
4035*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS_LOCK(printf("[dvbs]Symbol Rate=%d\n",*u32SymbolRate));
4036*53ee8cc1Swenshuai.xi
4037*53ee8cc1Swenshuai.xi return TRUE;
4038*53ee8cc1Swenshuai.xi }
4039*53ee8cc1Swenshuai.xi
INTERN_DVBS_Version(MS_U16 * ver)4040*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Version(MS_U16 *ver)
4041*53ee8cc1Swenshuai.xi {
4042*53ee8cc1Swenshuai.xi MS_U8 status = true;
4043*53ee8cc1Swenshuai.xi MS_U8 tmp = 0;
4044*53ee8cc1Swenshuai.xi MS_U16 u16_INTERN_DVBS_Version;
4045*53ee8cc1Swenshuai.xi
4046*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_FW_VERSION_L, &tmp);
4047*53ee8cc1Swenshuai.xi u16_INTERN_DVBS_Version = tmp;
4048*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_FW_VERSION_H, &tmp);
4049*53ee8cc1Swenshuai.xi u16_INTERN_DVBS_Version = u16_INTERN_DVBS_Version<<8|tmp;
4050*53ee8cc1Swenshuai.xi *ver = u16_INTERN_DVBS_Version;
4051*53ee8cc1Swenshuai.xi
4052*53ee8cc1Swenshuai.xi return status;
4053*53ee8cc1Swenshuai.xi }
4054*53ee8cc1Swenshuai.xi
INTERN_DVBS_Show_Demod_Version(void)4055*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Show_Demod_Version(void)
4056*53ee8cc1Swenshuai.xi {
4057*53ee8cc1Swenshuai.xi MS_BOOL status = true;
4058*53ee8cc1Swenshuai.xi MS_U16 u16_INTERN_DVBS_Version;
4059*53ee8cc1Swenshuai.xi
4060*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_Version(&u16_INTERN_DVBS_Version);
4061*53ee8cc1Swenshuai.xi
4062*53ee8cc1Swenshuai.xi // printf(">>> [Macan]Demod FW Version: R%d.%d <<<\n", ((u16_INTERN_DVBS_Version>>8)&0x00FF),(u16_INTERN_DVBS_Version&0x00FF));
4063*53ee8cc1Swenshuai.xi printf(">>> Demod FW Version: R%d.%d <<<\n", ((u16_INTERN_DVBS_Version>>8)&0x00FF),(u16_INTERN_DVBS_Version&0x00FF));
4064*53ee8cc1Swenshuai.xi
4065*53ee8cc1Swenshuai.xi
4066*53ee8cc1Swenshuai.xi return status;
4067*53ee8cc1Swenshuai.xi }
4068*53ee8cc1Swenshuai.xi
INTERN_DVBS_GetRollOff(MS_U8 * pRollOff)4069*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetRollOff(MS_U8 *pRollOff)
4070*53ee8cc1Swenshuai.xi {
4071*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
4072*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
4073*53ee8cc1Swenshuai.xi
4074*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x1E, &u8Data);//#define INNER_TR_ROLLOFF (_REG_INNER(0x0F)+0)
4075*53ee8cc1Swenshuai.xi if ((u8Data&0x03)==0x00)
4076*53ee8cc1Swenshuai.xi *pRollOff = 0; //Rolloff 0.35
4077*53ee8cc1Swenshuai.xi else if (((u8Data&0x03)==0x01) || ((u8Data&0x03)==0x03))
4078*53ee8cc1Swenshuai.xi *pRollOff = 1; //Rolloff 0.25
4079*53ee8cc1Swenshuai.xi else
4080*53ee8cc1Swenshuai.xi *pRollOff = 2; //Rolloff 0.20
4081*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_GetRollOff:%d\n", *pRollOff));
4082*53ee8cc1Swenshuai.xi
4083*53ee8cc1Swenshuai.xi return status;
4084*53ee8cc1Swenshuai.xi }
4085*53ee8cc1Swenshuai.xi
INTERN_DVBS_Get_DTV_SQuality_BAR(MS_U8 * u8_gSQValue)4086*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Get_DTV_SQuality_BAR(MS_U8 *u8_gSQValue)
4087*53ee8cc1Swenshuai.xi {
4088*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
4089*53ee8cc1Swenshuai.xi MS_U16 u16_gSignalQualityValue;
4090*53ee8cc1Swenshuai.xi MS_U16 _u16_packetError;
4091*53ee8cc1Swenshuai.xi
4092*53ee8cc1Swenshuai.xi status = INTERN_DVBS_GetSignalQuality(&u16_gSignalQualityValue,0,0,0);
4093*53ee8cc1Swenshuai.xi status = INTERN_DVBS_GetPacketErr(&_u16_packetError);
4094*53ee8cc1Swenshuai.xi
4095*53ee8cc1Swenshuai.xi if ((_u16_packetError >= 1) && (u16_gSignalQualityValue > 30)) //Average
4096*53ee8cc1Swenshuai.xi {
4097*53ee8cc1Swenshuai.xi *u8_gSQValue = 30;
4098*53ee8cc1Swenshuai.xi }
4099*53ee8cc1Swenshuai.xi else if ((_u16_packetError >= 1) && (u16_gSignalQualityValue > 10)) //Poor
4100*53ee8cc1Swenshuai.xi {
4101*53ee8cc1Swenshuai.xi *u8_gSQValue = 10;
4102*53ee8cc1Swenshuai.xi }
4103*53ee8cc1Swenshuai.xi
4104*53ee8cc1Swenshuai.xi return status;
4105*53ee8cc1Swenshuai.xi }
4106*53ee8cc1Swenshuai.xi
4107*53ee8cc1Swenshuai.xi /****************************************************************************
4108*53ee8cc1Swenshuai.xi ** Function: Read demod related information
4109*53ee8cc1Swenshuai.xi ** Polling after demod lock
4110*53ee8cc1Swenshuai.xi ** GAIN & DCR /Fine CFO & PR & IIS & IQB & SNR /PacketErr & BER
4111*53ee8cc1Swenshuai.xi ****************************************************************************/
INTERN_DVBS_Show_AGC_Info(void)4112*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Show_AGC_Info(void)
4113*53ee8cc1Swenshuai.xi {
4114*53ee8cc1Swenshuai.xi MS_BOOL status = TRUE;
4115*53ee8cc1Swenshuai.xi
4116*53ee8cc1Swenshuai.xi //MS_U8 tmp = 0;
4117*53ee8cc1Swenshuai.xi //MS_U8 agc_k = 0,d0_k = 0,d0_ref = 0,d1_k = 0,d1_ref = 0,d2_k = 0,d2_ref = 0,d3_k = 0,d3_ref = 0;
4118*53ee8cc1Swenshuai.xi //MS_U16 if_agc_gain = 0,d0_gain = 0,d1_gain = 0,d2_gain = 0,d3_gain = 0, agc_ref = 0;
4119*53ee8cc1Swenshuai.xi //MS_U16 if_agc_err = 0;
4120*53ee8cc1Swenshuai.xi #if 0
4121*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x08*2 + 1,&agc_k);
4122*53ee8cc1Swenshuai.xi agc_k = ((agc_k & 0xF0)>>4);
4123*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x09*2 + 1,&tmp);
4124*53ee8cc1Swenshuai.xi agc_ref = tmp;
4125*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0xE8,&tmp);
4126*53ee8cc1Swenshuai.xi //agc_ref = (agc_ref<<8)|tmp;
4127*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x38*2,&d0_k);
4128*53ee8cc1Swenshuai.xi d0_k = ((d0_k & 0xF0)>>4);
4129*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x38*2 + 1,&d0_ref);
4130*53ee8cc1Swenshuai.xi d0_ref = (d0_ref & 0xFF);
4131*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x58*2,&d1_k);
4132*53ee8cc1Swenshuai.xi d1_k = (d1_k & 0xF0)>>4;
4133*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x58*2 + 1,&d1_ref);
4134*53ee8cc1Swenshuai.xi d1_ref = (d1_ref & 0xFF);
4135*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x5E*2,&d2_k);
4136*53ee8cc1Swenshuai.xi d2_k = ((d2_k & 0xF0)>>4);
4137*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x5E*2 + 1,&d2_ref);
4138*53ee8cc1Swenshuai.xi d2_ref = (d2_ref & 0xFF);
4139*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x6A*2,&d3_k);
4140*53ee8cc1Swenshuai.xi d3_k = ((d3_k & 0xF0)>>4);
4141*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT2_REG_BASE + 0x6A*2 + 1,&d3_ref);
4142*53ee8cc1Swenshuai.xi d3_ref = (d3_ref & 0xFF);
4143*53ee8cc1Swenshuai.xi
4144*53ee8cc1Swenshuai.xi
4145*53ee8cc1Swenshuai.xi // select IF gain to read
4146*53ee8cc1Swenshuai.xi //Debug Select
4147*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x13*2, &tmp);
4148*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE + 0x13*2, (tmp&0xF0)|0x03);
4149*53ee8cc1Swenshuai.xi //IF_AGC_GAIN
4150*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x14*2 + 1, &tmp);
4151*53ee8cc1Swenshuai.xi if_agc_gain = tmp;
4152*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x14*2, &tmp);
4153*53ee8cc1Swenshuai.xi if_agc_gain = (if_agc_gain<<8)|tmp;
4154*53ee8cc1Swenshuai.xi
4155*53ee8cc1Swenshuai.xi
4156*53ee8cc1Swenshuai.xi // select d0 gain to read.
4157*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x74*2 + 1, &tmp);
4158*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE + 0x74*2 + 1, (tmp&0xF0)|0x03);
4159*53ee8cc1Swenshuai.xi //DAGC0_GAIN
4160*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x3D*2, &tmp);
4161*53ee8cc1Swenshuai.xi d0_gain = tmp;
4162*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x3C*2 + 1, &tmp);
4163*53ee8cc1Swenshuai.xi d0_gain = (d0_gain<<8)|tmp;
4164*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x3C*2, &tmp);
4165*53ee8cc1Swenshuai.xi d0_gain = (d0_gain<<4)|(tmp>>4);
4166*53ee8cc1Swenshuai.xi
4167*53ee8cc1Swenshuai.xi
4168*53ee8cc1Swenshuai.xi // select d1 gain to read.
4169*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x8C, &tmp);
4170*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE + 0x8C, (tmp&0xF0)|0x00);
4171*53ee8cc1Swenshuai.xi //DAGC1_GAIN
4172*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x5C*2 + 1, &tmp);
4173*53ee8cc1Swenshuai.xi d1_gain = tmp;
4174*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x5C*2, &tmp);
4175*53ee8cc1Swenshuai.xi d1_gain = (d1_gain<<8)|tmp;
4176*53ee8cc1Swenshuai.xi
4177*53ee8cc1Swenshuai.xi
4178*53ee8cc1Swenshuai.xi // select d2 gain to read.
4179*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x06, &tmp);
4180*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTENDEXT_REG_BASE + 0x06, (tmp&0xF0)|0x03);
4181*53ee8cc1Swenshuai.xi //DAGC2_GAIN
4182*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x62*2 + 1, &tmp);
4183*53ee8cc1Swenshuai.xi d2_gain = tmp;
4184*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x62*2, &tmp);
4185*53ee8cc1Swenshuai.xi d2_gain = (d2_gain<<8)|tmp;
4186*53ee8cc1Swenshuai.xi
4187*53ee8cc1Swenshuai.xi
4188*53ee8cc1Swenshuai.xi // select d3 gain to read.
4189*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT2_REG_BASE + 0x6D*2, &tmp);
4190*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTENDEXT2_REG_BASE + 0x6D*2, (tmp&0xF0)|0x03);
4191*53ee8cc1Swenshuai.xi //DAGC3_GAIN
4192*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x6F*2, &tmp);
4193*53ee8cc1Swenshuai.xi d3_gain = tmp;
4194*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x6E*2 + 1, &tmp);
4195*53ee8cc1Swenshuai.xi d3_gain = (d3_gain<<8)|tmp;
4196*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x6E*2, &tmp);
4197*53ee8cc1Swenshuai.xi d3_gain = (d3_gain<<4)|(tmp>>4);
4198*53ee8cc1Swenshuai.xi
4199*53ee8cc1Swenshuai.xi
4200*53ee8cc1Swenshuai.xi // select IF gain err to read
4201*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x13*2, &tmp);
4202*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE + 0x13*2, (tmp&0xF0)|0x00);
4203*53ee8cc1Swenshuai.xi
4204*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x14*2 + 1, &tmp);
4205*53ee8cc1Swenshuai.xi if_agc_err = tmp;
4206*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x14*2, &tmp);
4207*53ee8cc1Swenshuai.xi if_agc_err = (if_agc_err<<8)|tmp;
4208*53ee8cc1Swenshuai.xi
4209*53ee8cc1Swenshuai.xi
4210*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("[dvbs]agc_k=0x%x, agc_ref=0x%x, d0_k=0x%x, d0_ref=0x%x, d1_k=0x%x, d1_ref=0x%x, d2_k=0x%x, d2_ref=0x%x, d3_k=0x%x, d3_ref=0x%x\n",
4211*53ee8cc1Swenshuai.xi agc_k, agc_ref, d0_k, d0_ref, d1_k, d1_ref, d2_k, d2_ref, d3_k, d3_ref));
4212*53ee8cc1Swenshuai.xi
4213*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("[dvbs]agc_g=0x%x, d0_g=0x%x, d1_g=0x%x, d2_g=0x%x, d3_g=0x%x, agc_err=0x%x\n", if_agc_gain, d0_gain, d1_gain, d2_gain, d3_gain, if_agc_err));
4214*53ee8cc1Swenshuai.xi
4215*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("[dvbs]agc_k=0x%x, agc_ref=0x%x, d0_k=0x%x, d0_ref=0x%x, d1_k=0x%x, d1_ref=0x%x, d2_k=0x%x, d2_ref=0x%x, d3_k=0x%x, d3_ref=0x%x\n",
4216*53ee8cc1Swenshuai.xi agc_k, agc_ref, d0_k, d0_ref, d1_k, d1_ref, d2_k, d2_ref, d3_k, d3_ref));
4217*53ee8cc1Swenshuai.xi
4218*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("[dvbs]agc_g=0x%x, d0_g=0x%x, d1_g=0x%x, d2_g=0x%x, d3_g=0x%x, agc_err=0x%x\n", if_agc_gain, d0_gain, d1_gain, d2_gain, d3_gain, if_agc_err));
4219*53ee8cc1Swenshuai.xi #endif
4220*53ee8cc1Swenshuai.xi return status;
4221*53ee8cc1Swenshuai.xi }
4222*53ee8cc1Swenshuai.xi
INTERN_DVBS_info(void)4223*53ee8cc1Swenshuai.xi void INTERN_DVBS_info(void)
4224*53ee8cc1Swenshuai.xi {
4225*53ee8cc1Swenshuai.xi //status &= INTERN_DVBS_Show_Demod_Version();
4226*53ee8cc1Swenshuai.xi //status &= INTERN_DVBS_Demod_Get_Debug_Info_get_once();
4227*53ee8cc1Swenshuai.xi //status &= INTERN_DVBS_Demod_Get_Debug_Info_polling();
4228*53ee8cc1Swenshuai.xi }
4229*53ee8cc1Swenshuai.xi
INTERN_DVBS_Demod_Get_Debug_Info_get_once(void)4230*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Demod_Get_Debug_Info_get_once(void)
4231*53ee8cc1Swenshuai.xi {
4232*53ee8cc1Swenshuai.xi MS_BOOL status = TRUE;
4233*53ee8cc1Swenshuai.xi //MS_U8 u8Data = 0;
4234*53ee8cc1Swenshuai.xi //MS_U16 u16Data = 0, u16Address = 0;
4235*53ee8cc1Swenshuai.xi //float psd_smooth_factor;
4236*53ee8cc1Swenshuai.xi //float srd_right_bottom_value, srd_right_top_value, srd_left_bottom_value, srd_left_top_value;
4237*53ee8cc1Swenshuai.xi //MS_U16 u32temp5;
4238*53ee8cc1Swenshuai.xi //MS_U16 srd_left, srd_right, srd_left_top, srd_left_bottom, srd_right_top, srd_right_bottom;
4239*53ee8cc1Swenshuai.xi
4240*53ee8cc1Swenshuai.xi #if 0
4241*53ee8cc1Swenshuai.xi //Lock Flag
4242*53ee8cc1Swenshuai.xi printf("========================================================================\n");
4243*53ee8cc1Swenshuai.xi printf("Debug Message Flag [Lock Flag]==========================================\n");
4244*53ee8cc1Swenshuai.xi
4245*53ee8cc1Swenshuai.xi u16Address = (AGC_LOCK>>16)&0xffff;
4246*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4247*53ee8cc1Swenshuai.xi if ((u16Data&(AGC_LOCK&0xffff))!=(AGC_LOCK&0xffff))
4248*53ee8cc1Swenshuai.xi printf("[DVBS]: AGC LOCK ======================: Fail. \n");
4249*53ee8cc1Swenshuai.xi else
4250*53ee8cc1Swenshuai.xi printf("[DVBS]: AGC LOCK ======================: OK. \n");
4251*53ee8cc1Swenshuai.xi
4252*53ee8cc1Swenshuai.xi u16Address = (DAGC0_LOCK>>16)&0xffff;
4253*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4254*53ee8cc1Swenshuai.xi if ((u16Data&(DAGC0_LOCK&0xffff))!=(DAGC0_LOCK&0xffff))
4255*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC0 LOCK ====================: Fail. \n");
4256*53ee8cc1Swenshuai.xi else
4257*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC0 LOCK ====================: OK. \n");
4258*53ee8cc1Swenshuai.xi
4259*53ee8cc1Swenshuai.xi u16Address = (DAGC1_LOCK>>16)&0xffff;
4260*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4261*53ee8cc1Swenshuai.xi if ((u16Data&(DAGC1_LOCK&0xffff))!=(DAGC1_LOCK&0xffff))
4262*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC1 LOCK ====================: Fail. \n");
4263*53ee8cc1Swenshuai.xi else
4264*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC1 LOCK ====================: OK. \n");
4265*53ee8cc1Swenshuai.xi
4266*53ee8cc1Swenshuai.xi u16Address = (DAGC2_LOCK>>16)&0xffff;
4267*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4268*53ee8cc1Swenshuai.xi if ((u16Data&(DAGC2_LOCK&0xffff))!=(DAGC2_LOCK&0xffff))
4269*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC2 LOCK ====================: Fail. \n");
4270*53ee8cc1Swenshuai.xi else
4271*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC2 LOCK ====================: OK. \n");
4272*53ee8cc1Swenshuai.xi
4273*53ee8cc1Swenshuai.xi u16Address = (DAGC3_LOCK>>16)&0xffff;
4274*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4275*53ee8cc1Swenshuai.xi if ((u16Data&(DAGC3_LOCK&0xffff))!=(DAGC3_LOCK&0xffff))
4276*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC3 LOCK ====================: Fail. \n");
4277*53ee8cc1Swenshuai.xi else
4278*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC3 LOCK ====================: OK. \n");
4279*53ee8cc1Swenshuai.xi
4280*53ee8cc1Swenshuai.xi u16Address = (DCR_LOCK>>16)&0xffff;
4281*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4282*53ee8cc1Swenshuai.xi if ((u16Data&(DCR_LOCK&0xffff))!=(DCR_LOCK&0xffff))
4283*53ee8cc1Swenshuai.xi printf("[DVBS]: DCR LOCK ======================: Fail. \n");
4284*53ee8cc1Swenshuai.xi else
4285*53ee8cc1Swenshuai.xi printf("[DVBS]: DCR LOCK ======================: OK. \n");
4286*53ee8cc1Swenshuai.xi //Mark Coarse SRD
4287*53ee8cc1Swenshuai.xi //Mark Fine SRD
4288*53ee8cc1Swenshuai.xi /*
4289*53ee8cc1Swenshuai.xi u16Address = (CLOSE_COARSE_CFO_LOCK>>16)&0xffff;
4290*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4291*53ee8cc1Swenshuai.xi if ((u16Data&(CLOSE_COARSE_CFO_LOCK&0xffff))!=(CLOSE_COARSE_CFO_LOCK&0xffff))
4292*53ee8cc1Swenshuai.xi printf("[DVBS]: Close CFO =====================: Fail. \n");
4293*53ee8cc1Swenshuai.xi else
4294*53ee8cc1Swenshuai.xi printf("[DVBS]: Close CFO =====================: OK. \n");
4295*53ee8cc1Swenshuai.xi */
4296*53ee8cc1Swenshuai.xi u16Address = (TR_LOCK>>16)&0xffff;
4297*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4298*53ee8cc1Swenshuai.xi if ((u16Data&(TR_LOCK&0xffff))!=(TR_LOCK&0xffff))
4299*53ee8cc1Swenshuai.xi printf("[DVBS]: TR LOCK =======================: Fail. \n");
4300*53ee8cc1Swenshuai.xi else
4301*53ee8cc1Swenshuai.xi printf("[DVBS]: TR LOCK =======================: OK. \n");
4302*53ee8cc1Swenshuai.xi
4303*53ee8cc1Swenshuai.xi u16Address = (FRAME_SYNC_ACQUIRE>>16)&0xffff;
4304*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4305*53ee8cc1Swenshuai.xi if ((u16Data&(FRAME_SYNC_ACQUIRE&0xffff))!=(FRAME_SYNC_ACQUIRE&0xffff))
4306*53ee8cc1Swenshuai.xi printf("[DVBS]: FS Acquire ====================: Fail. \n");
4307*53ee8cc1Swenshuai.xi else
4308*53ee8cc1Swenshuai.xi printf("[DVBS]: FS Acquire ====================: OK. \n");
4309*53ee8cc1Swenshuai.xi
4310*53ee8cc1Swenshuai.xi u16Address = (PR_LOCK>>16)&0xffff;
4311*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4312*53ee8cc1Swenshuai.xi if ((u16Data&(PR_LOCK&0xffff))!=(PR_LOCK&0xffff))
4313*53ee8cc1Swenshuai.xi printf("[DVBS]: PR LOCK =======================: Fail. \n");
4314*53ee8cc1Swenshuai.xi else
4315*53ee8cc1Swenshuai.xi printf("[DVBS]: PR LOCK =======================: OK. \n");
4316*53ee8cc1Swenshuai.xi
4317*53ee8cc1Swenshuai.xi u16Address = (EQ_LOCK>>16)&0xffff;
4318*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4319*53ee8cc1Swenshuai.xi if ((u16Data&(EQ_LOCK&0xffff))!=(EQ_LOCK&0xffff))
4320*53ee8cc1Swenshuai.xi printf("[DVBS]: EQ LOCK =======================: Fail. \n");
4321*53ee8cc1Swenshuai.xi else
4322*53ee8cc1Swenshuai.xi printf("[DVBS]: EQ LOCK =======================: OK. \n");
4323*53ee8cc1Swenshuai.xi
4324*53ee8cc1Swenshuai.xi u16Address = (P_SYNC_LOCK>>16)&0xffff;
4325*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4326*53ee8cc1Swenshuai.xi if ((u16Data&0x0002)!=0x0002)
4327*53ee8cc1Swenshuai.xi printf("[DVBS]: P_sync ========================: Fail. \n");
4328*53ee8cc1Swenshuai.xi else
4329*53ee8cc1Swenshuai.xi printf("[DVBS]: P_sync ========================: OK. \n");
4330*53ee8cc1Swenshuai.xi
4331*53ee8cc1Swenshuai.xi u16Address = (IN_SYNC_LOCK>>16)&0xffff;
4332*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4333*53ee8cc1Swenshuai.xi if ((u16Data&0x8000)!=0x8000)
4334*53ee8cc1Swenshuai.xi printf("[DVBS]: In_sync =======================: Fail. \n");
4335*53ee8cc1Swenshuai.xi else
4336*53ee8cc1Swenshuai.xi printf("[DVBS]: In_sync =======================: OK. \n");
4337*53ee8cc1Swenshuai.xi //---------------------------------------------------------
4338*53ee8cc1Swenshuai.xi //Lock Time
4339*53ee8cc1Swenshuai.xi printf("------------------------------------------------------------------------\n");
4340*53ee8cc1Swenshuai.xi printf("Debug Message [Lock Time]===============================================\n");
4341*53ee8cc1Swenshuai.xi
4342*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_INFO_05, &u8Data);
4343*53ee8cc1Swenshuai.xi printf("[DVBS]: AGC Lock Time =================: %d\n",u8Data&0x00FF);
4344*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_INFO_06, &u8Data);
4345*53ee8cc1Swenshuai.xi printf("[DVBS]: DCR Lock Time =================: %d\n",u8Data&0x00FF);
4346*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_2, &u8Data);
4347*53ee8cc1Swenshuai.xi printf("[DVBS]: TR Lock Time ==================: %d\n",u8Data&0x00FF);
4348*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_3, &u8Data);
4349*53ee8cc1Swenshuai.xi printf("[DVBS]: FS Lock Time ==================: %d\n",u8Data&0x00FF);
4350*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_4, &u8Data);
4351*53ee8cc1Swenshuai.xi printf("[DVBS]: PR Lock Time ==================: %d\n",u8Data&0x00FF);
4352*53ee8cc1Swenshuai.xi //printf("[DVBS]: PLSC Lock Time ================: %d\n",(u16Data>>8)&0x00FF);//No used
4353*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_6, &u8Data);
4354*53ee8cc1Swenshuai.xi printf("[DVBS]: EQ Lock Time ==================: %d\n",u8Data&0x00FF);
4355*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_7, &u8Data);
4356*53ee8cc1Swenshuai.xi printf("[DVBS]: FEC Lock Time =================: %d\n",u8Data&0x00FF);
4357*53ee8cc1Swenshuai.xi
4358*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_0, &u8Data);
4359*53ee8cc1Swenshuai.xi printf("[DVBS]: CSRD ==========================: %d\n",u8Data&0x00FF);
4360*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_1, &u8Data);
4361*53ee8cc1Swenshuai.xi printf("[DVBS]: FSRD ==========================: %d\n",u8Data&0x00FF);
4362*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_INFO_01, &u8Data);
4363*53ee8cc1Swenshuai.xi printf("[DVBS]: CCFO ==========================: %d\n",u8Data&0x00FF);
4364*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_INFO_02, &u8Data);
4365*53ee8cc1Swenshuai.xi printf("[DVBS]: FCFO ==========================: %d\n",u8Data&0x00FF);
4366*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_STATE_FLAG, &u8Data);
4367*53ee8cc1Swenshuai.xi printf("[DVBS]: State =========================: %d\n",u8Data&0x00FF);
4368*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SUBSTATE_FLAG, &u8Data);
4369*53ee8cc1Swenshuai.xi printf("[DVBS]: SubState ======================: %d\n",u8Data&0x00FF);
4370*53ee8cc1Swenshuai.xi
4371*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE00H, &u8Data);
4372*53ee8cc1Swenshuai.xi u16Data = u8Data;
4373*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE00L, &u8Data);
4374*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4375*53ee8cc1Swenshuai.xi printf("[DVBS]: DBG1: =========================: 0x%x\n",u16Data);
4376*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE01H, &u8Data);
4377*53ee8cc1Swenshuai.xi u16Data = u8Data;
4378*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE01L, &u8Data);
4379*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4380*53ee8cc1Swenshuai.xi printf("[DVBS]: DBG2: =========================: 0x%x\n",u16Data);
4381*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE02H, &u8Data);
4382*53ee8cc1Swenshuai.xi u16Data = u8Data;
4383*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE02L, &u8Data);
4384*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4385*53ee8cc1Swenshuai.xi printf("[DVBS]: DBG3: =========================: 0x%x\n",u16Data);
4386*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE03H, &u8Data);
4387*53ee8cc1Swenshuai.xi u16Data = u8Data;
4388*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE03L, &u8Data);
4389*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4390*53ee8cc1Swenshuai.xi printf("[DVBS]: DBG4: =========================: 0x%x\n",u16Data);
4391*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE04H, &u8Data);
4392*53ee8cc1Swenshuai.xi u16Data = u8Data;
4393*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE04L, &u8Data);
4394*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4395*53ee8cc1Swenshuai.xi printf("[DVBS]: DBG5: =========================: 0x%x\n",u16Data);
4396*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE05H, &u8Data);
4397*53ee8cc1Swenshuai.xi u16Data = u8Data;
4398*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE05L, &u8Data);
4399*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4400*53ee8cc1Swenshuai.xi printf("[DVBS]: DBG6: =========================: 0x%x\n",u16Data);
4401*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE06H, &u8Data);
4402*53ee8cc1Swenshuai.xi u16Data = u8Data;
4403*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE06L, &u8Data);
4404*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4405*53ee8cc1Swenshuai.xi printf("[DVBS]: EQ Sum: =======================: 0x%x\n",u16Data);
4406*53ee8cc1Swenshuai.xi //---------------------------------------------------------
4407*53ee8cc1Swenshuai.xi //FIQ Status
4408*53ee8cc1Swenshuai.xi printf("------------------------------------------------------------------------\n");
4409*53ee8cc1Swenshuai.xi printf("Debug Message [FIQ Status]==============================================\n");
4410*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE00H, &u8Data);
4411*53ee8cc1Swenshuai.xi u16Data = u8Data;
4412*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE00L, &u8Data);
4413*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4414*53ee8cc1Swenshuai.xi
4415*53ee8cc1Swenshuai.xi if ((u16Data&0x0001)==0x0000)
4416*53ee8cc1Swenshuai.xi printf("[DVBS]: AGC Lock ======================: Fail. \n");
4417*53ee8cc1Swenshuai.xi else
4418*53ee8cc1Swenshuai.xi printf("[DVBS]: AGC Lock ======================: OK. \n");
4419*53ee8cc1Swenshuai.xi
4420*53ee8cc1Swenshuai.xi if ((u16Data&0x0002)==0x0000)
4421*53ee8cc1Swenshuai.xi printf("[DVBS]: Hum Detect ====================: Fail. \n");
4422*53ee8cc1Swenshuai.xi else
4423*53ee8cc1Swenshuai.xi printf("[DVBS]: Hum Detect ====================: OK. \n");
4424*53ee8cc1Swenshuai.xi
4425*53ee8cc1Swenshuai.xi if ((u16Data&0x0004)==0x0000)
4426*53ee8cc1Swenshuai.xi printf("[DVBS]: DCR Lock ======================: Fail. \n");
4427*53ee8cc1Swenshuai.xi else
4428*53ee8cc1Swenshuai.xi printf("[DVBS]: DCR Lock ======================: OK. \n");
4429*53ee8cc1Swenshuai.xi
4430*53ee8cc1Swenshuai.xi if ((u16Data&0x0008)==0x0000)
4431*53ee8cc1Swenshuai.xi printf("[DVBS]: IIS Detect ====================: Fail. \n");
4432*53ee8cc1Swenshuai.xi else
4433*53ee8cc1Swenshuai.xi printf("[DVBS]: IIS Detect ====================: OK. \n");
4434*53ee8cc1Swenshuai.xi
4435*53ee8cc1Swenshuai.xi if ((u16Data&0x0010)==0x0000)
4436*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC0 Lock ====================: Fail. \n");
4437*53ee8cc1Swenshuai.xi else
4438*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC0 Lock ====================: OK. \n");
4439*53ee8cc1Swenshuai.xi
4440*53ee8cc1Swenshuai.xi if ((u16Data&0x0020)==0x0000)
4441*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC1 Lock ====================: Fail. \n");
4442*53ee8cc1Swenshuai.xi else
4443*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC1 Lock ====================: OK. \n");
4444*53ee8cc1Swenshuai.xi
4445*53ee8cc1Swenshuai.xi if ((u16Data&0x0040)==0x0000)
4446*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC2 Lock ====================: Fail. \n");
4447*53ee8cc1Swenshuai.xi else
4448*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC2 Lock ====================: OK. \n");
4449*53ee8cc1Swenshuai.xi
4450*53ee8cc1Swenshuai.xi if ((u16Data&0x0080)==0x0000)
4451*53ee8cc1Swenshuai.xi printf("[DVBS]: CCI Detect ====================: Fail. \n");
4452*53ee8cc1Swenshuai.xi else
4453*53ee8cc1Swenshuai.xi printf("[DVBS]: CCI Detect ====================: OK. \n");
4454*53ee8cc1Swenshuai.xi
4455*53ee8cc1Swenshuai.xi if ((u16Data&0x0100)==0x0000)
4456*53ee8cc1Swenshuai.xi printf("[DVBS]: SRD Coarse Done ===============: Fail. \n");
4457*53ee8cc1Swenshuai.xi else
4458*53ee8cc1Swenshuai.xi printf("[DVBS]: SRD Coarse Done ===============: OK. \n");
4459*53ee8cc1Swenshuai.xi
4460*53ee8cc1Swenshuai.xi if ((u16Data&0x0200)==0x0000)
4461*53ee8cc1Swenshuai.xi printf("[DVBS]: SRD Fine Done =================: Fail. \n");
4462*53ee8cc1Swenshuai.xi else
4463*53ee8cc1Swenshuai.xi printf("[DVBS]: SRD Fine Done =================: OK. \n");
4464*53ee8cc1Swenshuai.xi
4465*53ee8cc1Swenshuai.xi if ((u16Data&0x0400)==0x0000)
4466*53ee8cc1Swenshuai.xi printf("[DVBS]: EQ Lock =======================: Fail. \n");
4467*53ee8cc1Swenshuai.xi else
4468*53ee8cc1Swenshuai.xi printf("[DVBS]: EQ Lock =======================: OK. \n");
4469*53ee8cc1Swenshuai.xi
4470*53ee8cc1Swenshuai.xi if ((u16Data&0x0800)==0x0000)
4471*53ee8cc1Swenshuai.xi printf("[DVBS]: FineFE Done ===================: Fail. \n");
4472*53ee8cc1Swenshuai.xi else
4473*53ee8cc1Swenshuai.xi printf("[DVBS]: FineFE Done ===================: OK. \n");
4474*53ee8cc1Swenshuai.xi
4475*53ee8cc1Swenshuai.xi if ((u16Data&0x1000)==0x0000)
4476*53ee8cc1Swenshuai.xi printf("[DVBS]: PR Lock =======================: Fail. \n");
4477*53ee8cc1Swenshuai.xi else
4478*53ee8cc1Swenshuai.xi printf("[DVBS]: PR Lock =======================: OK. \n");
4479*53ee8cc1Swenshuai.xi
4480*53ee8cc1Swenshuai.xi if ((u16Data&0x2000)==0x0000)
4481*53ee8cc1Swenshuai.xi printf("[DVBS]: Reserved Frame ================: Fail. \n");
4482*53ee8cc1Swenshuai.xi else
4483*53ee8cc1Swenshuai.xi printf("[DVBS]: Reserved Frame ================: OK. \n");
4484*53ee8cc1Swenshuai.xi
4485*53ee8cc1Swenshuai.xi if ((u16Data&0x4000)==0x0000)
4486*53ee8cc1Swenshuai.xi printf("[DVBS]: Dummy Frame ===================: Fail. \n");
4487*53ee8cc1Swenshuai.xi else
4488*53ee8cc1Swenshuai.xi printf("[DVBS]: Dummy Frame ===================: OK. \n");
4489*53ee8cc1Swenshuai.xi
4490*53ee8cc1Swenshuai.xi if ((u16Data&0x8000)==0x0000)
4491*53ee8cc1Swenshuai.xi printf("[DVBS]: PLSC Done =====================: Fail. \n");
4492*53ee8cc1Swenshuai.xi else
4493*53ee8cc1Swenshuai.xi printf("[DVBS]: PLSC Done =====================: OK. \n");
4494*53ee8cc1Swenshuai.xi
4495*53ee8cc1Swenshuai.xi printf("------------------------------------------------------------------------\n");
4496*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE01H, &u8Data);
4497*53ee8cc1Swenshuai.xi u16Data = u8Data;
4498*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE01L, &u8Data);
4499*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4500*53ee8cc1Swenshuai.xi if ((u16Data&0x0001)==0x0000)
4501*53ee8cc1Swenshuai.xi printf("[DVBS]: FS Get Info From Len ==========: Fail. \n");
4502*53ee8cc1Swenshuai.xi else
4503*53ee8cc1Swenshuai.xi printf("[DVBS]: FS Get Info From Len ==========: OK. \n");
4504*53ee8cc1Swenshuai.xi
4505*53ee8cc1Swenshuai.xi if ((u16Data&0x0002)==0x0000)
4506*53ee8cc1Swenshuai.xi printf("[DVBS]: IQ Swap Detect ================: Fail. \n");
4507*53ee8cc1Swenshuai.xi else
4508*53ee8cc1Swenshuai.xi printf("[DVBS]: IQ Swap Detect ================: OK. \n");
4509*53ee8cc1Swenshuai.xi
4510*53ee8cc1Swenshuai.xi if ((u16Data&0x0004)==0x0000)
4511*53ee8cc1Swenshuai.xi printf("[DVBS]: FS Acquisition ================: Fail. \n");
4512*53ee8cc1Swenshuai.xi else
4513*53ee8cc1Swenshuai.xi printf("[DVBS]: FS Acquisition ================: OK. \n");
4514*53ee8cc1Swenshuai.xi
4515*53ee8cc1Swenshuai.xi if ((u16Data&0x0008)==0x0000)
4516*53ee8cc1Swenshuai.xi printf("[DVBS]: TR Lock =======================: Fail. \n");
4517*53ee8cc1Swenshuai.xi else
4518*53ee8cc1Swenshuai.xi printf("[DVBS]: TR Lock =======================: OK. \n");
4519*53ee8cc1Swenshuai.xi
4520*53ee8cc1Swenshuai.xi if ((u16Data&0x0010)==0x0000)
4521*53ee8cc1Swenshuai.xi printf("[DVBS]: CLCFE Lock ====================: Fail. \n");
4522*53ee8cc1Swenshuai.xi else
4523*53ee8cc1Swenshuai.xi printf("[DVBS]: CLCFE Lock ====================: OK. \n");
4524*53ee8cc1Swenshuai.xi
4525*53ee8cc1Swenshuai.xi if ((u16Data&0x0020)==0x0000)
4526*53ee8cc1Swenshuai.xi printf("[DVBS]: OLCFE Lock ====================: Fail. \n");
4527*53ee8cc1Swenshuai.xi else
4528*53ee8cc1Swenshuai.xi printf("[DVBS]: OLCFE Lock ====================: OK. \n");
4529*53ee8cc1Swenshuai.xi
4530*53ee8cc1Swenshuai.xi if ((u16Data&0x0040)==0x0000)
4531*53ee8cc1Swenshuai.xi printf("[DVBS]: Fsync Found ===================: Fail. \n");
4532*53ee8cc1Swenshuai.xi else
4533*53ee8cc1Swenshuai.xi printf("[DVBS]: Fsync Found ===================: OK. \n");
4534*53ee8cc1Swenshuai.xi
4535*53ee8cc1Swenshuai.xi if ((u16Data&0x0080)==0x0000)
4536*53ee8cc1Swenshuai.xi printf("[DVBS]: Fsync Lock ====================: Fail. \n");
4537*53ee8cc1Swenshuai.xi else
4538*53ee8cc1Swenshuai.xi printf("[DVBS]: Fsync Lock ====================: OK. \n");
4539*53ee8cc1Swenshuai.xi
4540*53ee8cc1Swenshuai.xi if ((u16Data&0x0100)==0x0000)
4541*53ee8cc1Swenshuai.xi printf("[DVBS]: Fsync Fail Search =============: Fail. \n");
4542*53ee8cc1Swenshuai.xi else
4543*53ee8cc1Swenshuai.xi printf("[DVBS]: Fsync Fail Search =============: OK. \n");
4544*53ee8cc1Swenshuai.xi
4545*53ee8cc1Swenshuai.xi if ((u16Data&0x0200)==0x0000)
4546*53ee8cc1Swenshuai.xi printf("[DVBS]: Fsync Fail Lock ===============: Fail. \n");
4547*53ee8cc1Swenshuai.xi else
4548*53ee8cc1Swenshuai.xi printf("[DVBS]: Fsync Fail Lock ===============: OK. \n");
4549*53ee8cc1Swenshuai.xi
4550*53ee8cc1Swenshuai.xi if ((u16Data&0x0400)==0x0000)
4551*53ee8cc1Swenshuai.xi printf("[DVBS]: False Alarm ===================: Fail. \n");
4552*53ee8cc1Swenshuai.xi else
4553*53ee8cc1Swenshuai.xi printf("[DVBS]: False Alarm ===================: OK. \n");
4554*53ee8cc1Swenshuai.xi
4555*53ee8cc1Swenshuai.xi if ((u16Data&0x0800)==0x0000)
4556*53ee8cc1Swenshuai.xi printf("[DVBS]: Viterbi In Sync ===============: Fail. \n");
4557*53ee8cc1Swenshuai.xi else
4558*53ee8cc1Swenshuai.xi printf("[DVBS]: Viterbi In Sync ===============: OK. \n");
4559*53ee8cc1Swenshuai.xi
4560*53ee8cc1Swenshuai.xi if ((u16Data&0x1000)==0x0000)
4561*53ee8cc1Swenshuai.xi printf("[DVBS]: Uncrt Over ====================: Fail. \n");
4562*53ee8cc1Swenshuai.xi else
4563*53ee8cc1Swenshuai.xi printf("[DVBS]: Uncrt Over ====================: OK. \n");
4564*53ee8cc1Swenshuai.xi
4565*53ee8cc1Swenshuai.xi if ((u16Data&0x2000)==0x0000)
4566*53ee8cc1Swenshuai.xi printf("[DVBS]: CLK Cnt Over ==================: Fail. \n");
4567*53ee8cc1Swenshuai.xi else
4568*53ee8cc1Swenshuai.xi printf("[DVBS]: CLK Cnt Over ==================: OK. \n");
4569*53ee8cc1Swenshuai.xi
4570*53ee8cc1Swenshuai.xi //if ((u16Data&0x4000)==0x0000)
4571*53ee8cc1Swenshuai.xi // printf("[DVBS]: Data In Ready FIFO ============: Fail. \n");
4572*53ee8cc1Swenshuai.xi //else
4573*53ee8cc1Swenshuai.xi // printf("[DVBS]: Data In Ready FIFO ============: OK. \n");
4574*53ee8cc1Swenshuai.xi
4575*53ee8cc1Swenshuai.xi //if ((u16Data&0x8000)==0x0000)
4576*53ee8cc1Swenshuai.xi // printf("[DVBS]: IIR Buff Busy =================: Fail. \n");
4577*53ee8cc1Swenshuai.xi //else
4578*53ee8cc1Swenshuai.xi // printf("[DVBS]: IIR Buff Busy =================: OK. \n");
4579*53ee8cc1Swenshuai.xi
4580*53ee8cc1Swenshuai.xi /*
4581*53ee8cc1Swenshuai.xi printf("------------------------------------------------------------------------\n");
4582*53ee8cc1Swenshuai.xi u16Address = 0x0B64;
4583*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(u16Address+1, &u8Data);
4584*53ee8cc1Swenshuai.xi u16Data = u8Data;
4585*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(u16Address , &u8Data);
4586*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4587*53ee8cc1Swenshuai.xi if ((u16Data&0x0001)==0x0000)
4588*53ee8cc1Swenshuai.xi printf("[DVBS]: IIR Busy LDPC =================: Fail. \n");
4589*53ee8cc1Swenshuai.xi else
4590*53ee8cc1Swenshuai.xi printf("[DVBS]: IIR Busy LDPC =================: OK. \n");
4591*53ee8cc1Swenshuai.xi
4592*53ee8cc1Swenshuai.xi if ((u16Data&0x0002)==0x0000)
4593*53ee8cc1Swenshuai.xi printf("[DVBS]: BCH Busy ======================: Fail. \n");
4594*53ee8cc1Swenshuai.xi else
4595*53ee8cc1Swenshuai.xi printf("[DVBS]: BCH Busy ======================: OK. \n");
4596*53ee8cc1Swenshuai.xi
4597*53ee8cc1Swenshuai.xi if ((u16Data&0x0004)==0x0000)
4598*53ee8cc1Swenshuai.xi printf("[DVBS]: Oppro Ready Out ===============: Fail. \n");
4599*53ee8cc1Swenshuai.xi else
4600*53ee8cc1Swenshuai.xi printf("[DVBS]: Oppro Ready Out ===============: OK. \n");
4601*53ee8cc1Swenshuai.xi
4602*53ee8cc1Swenshuai.xi if ((u16Data&0x0008)==0x0000)
4603*53ee8cc1Swenshuai.xi printf("[DVBS]: LDPC Win ======================: Fail. \n");
4604*53ee8cc1Swenshuai.xi else
4605*53ee8cc1Swenshuai.xi printf("[DVBS]: LDPC Win ======================: OK. \n");
4606*53ee8cc1Swenshuai.xi
4607*53ee8cc1Swenshuai.xi if ((u16Data&0x0010)==0x0000)
4608*53ee8cc1Swenshuai.xi printf("[DVBS]: LDPC Error ====================: Fail. \n");
4609*53ee8cc1Swenshuai.xi else
4610*53ee8cc1Swenshuai.xi printf("[DVBS]: LDPC Error ====================: OK. \n");
4611*53ee8cc1Swenshuai.xi
4612*53ee8cc1Swenshuai.xi if ((u16Data&0x0020)==0x0000)
4613*53ee8cc1Swenshuai.xi printf("[DVBS]: Out BCH Error =================: Fail. \n");
4614*53ee8cc1Swenshuai.xi else
4615*53ee8cc1Swenshuai.xi printf("[DVBS]: Out BCH Error =================: OK. \n");
4616*53ee8cc1Swenshuai.xi
4617*53ee8cc1Swenshuai.xi if ((u16Data&0x0040)==0x0000)
4618*53ee8cc1Swenshuai.xi printf("[DVBS]: Descr BCH FEC Num Error =======: Fail. \n");
4619*53ee8cc1Swenshuai.xi else
4620*53ee8cc1Swenshuai.xi printf("[DVBS]: Descr BCH FEC Num Error =======: OK. \n");
4621*53ee8cc1Swenshuai.xi
4622*53ee8cc1Swenshuai.xi if ((u16Data&0x0080)==0x0000)
4623*53ee8cc1Swenshuai.xi printf("[DVBS]: Descr BCH Data Num Error ======: Fail. \n");
4624*53ee8cc1Swenshuai.xi else
4625*53ee8cc1Swenshuai.xi printf("[DVBS]: Descr BCH Data Num Error ======: OK. \n");
4626*53ee8cc1Swenshuai.xi
4627*53ee8cc1Swenshuai.xi if ((u16Data&0x0100)==0x0000)
4628*53ee8cc1Swenshuai.xi printf("[DVBS]: Packet Error Out ==============: Fail. \n");
4629*53ee8cc1Swenshuai.xi else
4630*53ee8cc1Swenshuai.xi printf("[DVBS]: Packet Error Out ==============: OK. \n");
4631*53ee8cc1Swenshuai.xi
4632*53ee8cc1Swenshuai.xi if ((u16Data&0x0200)==0x0000)
4633*53ee8cc1Swenshuai.xi printf("[DVBS]: BBH CRC Error =================: Fail. \n");
4634*53ee8cc1Swenshuai.xi else
4635*53ee8cc1Swenshuai.xi printf("[DVBS]: BBH CRC Error =================: OK. \n");
4636*53ee8cc1Swenshuai.xi
4637*53ee8cc1Swenshuai.xi if ((u16Data&0x0400)==0x0000)
4638*53ee8cc1Swenshuai.xi printf("[DVBS]: BBH Decode Done ===============: Fail. \n");
4639*53ee8cc1Swenshuai.xi else
4640*53ee8cc1Swenshuai.xi printf("[DVBS]: BBH Decode Done ===============: OK. \n");
4641*53ee8cc1Swenshuai.xi
4642*53ee8cc1Swenshuai.xi if ((u16Data&0x0800)==0x0000)
4643*53ee8cc1Swenshuai.xi printf("[DVBS]: ISRC Calculate Done ===========: Fail. \n");
4644*53ee8cc1Swenshuai.xi else
4645*53ee8cc1Swenshuai.xi printf("[DVBS]: ISRC Calculate Done ===========: OK. \n");
4646*53ee8cc1Swenshuai.xi
4647*53ee8cc1Swenshuai.xi if ((u16Data&0x1000)==0x0000)
4648*53ee8cc1Swenshuai.xi printf("[DVBS]: Syncd Check Error =============: Fail. \n");
4649*53ee8cc1Swenshuai.xi else
4650*53ee8cc1Swenshuai.xi printf("[DVBS]: Syncd Check Error =============: OK. \n");
4651*53ee8cc1Swenshuai.xi
4652*53ee8cc1Swenshuai.xi //if ((u16Data&0x2000)==0x0000)
4653*53ee8cc1Swenshuai.xi // printf("[DVBS]: Syncd Check Error======: Fail. \n");
4654*53ee8cc1Swenshuai.xi //else
4655*53ee8cc1Swenshuai.xi // printf("[DVBS]: Syncd Check Error======: OK. \n");
4656*53ee8cc1Swenshuai.xi
4657*53ee8cc1Swenshuai.xi if ((u16Data&0x4000)==0x0000)
4658*53ee8cc1Swenshuai.xi printf("[DVBS]: Demap Init ====================: Fail. \n");
4659*53ee8cc1Swenshuai.xi else
4660*53ee8cc1Swenshuai.xi printf("[DVBS]: Demap Init ====================: OK. \n");
4661*53ee8cc1Swenshuai.xi */
4662*53ee8cc1Swenshuai.xi //Spectrum Information
4663*53ee8cc1Swenshuai.xi printf("------------------------------------------------------------------------\n");
4664*53ee8cc1Swenshuai.xi
4665*53ee8cc1Swenshuai.xi u16Address = 0x2836;
4666*53ee8cc1Swenshuai.xi status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4667*53ee8cc1Swenshuai.xi psd_smooth_factor=(u16Data>>8)&0x7F;
4668*53ee8cc1Swenshuai.xi
4669*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE12H, &u8Data);
4670*53ee8cc1Swenshuai.xi u16Data = u8Data;
4671*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE12L, &u8Data);
4672*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4673*53ee8cc1Swenshuai.xi u32temp5=u16Data;
4674*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE13H, &u8Data);
4675*53ee8cc1Swenshuai.xi u16Data = u8Data;
4676*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE13L, &u8Data);
4677*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4678*53ee8cc1Swenshuai.xi u32temp5|=(u16Data<<16);
4679*53ee8cc1Swenshuai.xi if (psd_smooth_factor!=0)
4680*53ee8cc1Swenshuai.xi srd_left_top_value=(float)u32temp5/256.0/psd_smooth_factor;
4681*53ee8cc1Swenshuai.xi else
4682*53ee8cc1Swenshuai.xi srd_left_top_value=0;
4683*53ee8cc1Swenshuai.xi
4684*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14H, &u8Data);
4685*53ee8cc1Swenshuai.xi u16Data = u8Data;
4686*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14L, &u8Data);
4687*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4688*53ee8cc1Swenshuai.xi u32temp5=u16Data;
4689*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE15H, &u8Data);
4690*53ee8cc1Swenshuai.xi u16Data = u8Data;
4691*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE15L, &u8Data);
4692*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4693*53ee8cc1Swenshuai.xi u32temp5|=(u16Data<<16);
4694*53ee8cc1Swenshuai.xi if (psd_smooth_factor!=0)
4695*53ee8cc1Swenshuai.xi srd_left_bottom_value=(float)u32temp5/256.0/psd_smooth_factor;
4696*53ee8cc1Swenshuai.xi else
4697*53ee8cc1Swenshuai.xi srd_left_bottom_value=0;
4698*53ee8cc1Swenshuai.xi
4699*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE16H, &u8Data);
4700*53ee8cc1Swenshuai.xi u16Data = u8Data;
4701*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE16L, &u8Data);
4702*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4703*53ee8cc1Swenshuai.xi u32temp5=u16Data;
4704*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE17H, &u8Data);
4705*53ee8cc1Swenshuai.xi u16Data = u8Data;
4706*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE17L, &u8Data);
4707*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4708*53ee8cc1Swenshuai.xi u32temp5|=(u16Data<<16);
4709*53ee8cc1Swenshuai.xi if (psd_smooth_factor!=0)
4710*53ee8cc1Swenshuai.xi srd_right_top_value=(float)u32temp5/256.0/psd_smooth_factor;
4711*53ee8cc1Swenshuai.xi else
4712*53ee8cc1Swenshuai.xi srd_right_top_value=0;
4713*53ee8cc1Swenshuai.xi
4714*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE18H, &u8Data);
4715*53ee8cc1Swenshuai.xi u16Data = u8Data;
4716*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE18L, &u8Data);
4717*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4718*53ee8cc1Swenshuai.xi u32temp5=u16Data;
4719*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE19H, &u8Data);
4720*53ee8cc1Swenshuai.xi u16Data = u8Data;
4721*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE19L, &u8Data);
4722*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4723*53ee8cc1Swenshuai.xi u32temp5|=(u16Data<<16);
4724*53ee8cc1Swenshuai.xi if (psd_smooth_factor!=0)
4725*53ee8cc1Swenshuai.xi srd_right_bottom_value=(float)u32temp5/256.0/psd_smooth_factor;
4726*53ee8cc1Swenshuai.xi else
4727*53ee8cc1Swenshuai.xi srd_right_bottom_value=0;
4728*53ee8cc1Swenshuai.xi
4729*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1AH, &u8Data);
4730*53ee8cc1Swenshuai.xi u16Data = u8Data;
4731*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1AL, &u8Data);
4732*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4733*53ee8cc1Swenshuai.xi srd_left=u16Data;
4734*53ee8cc1Swenshuai.xi printf("[DVBS]: FFT Left ======================: %d, %f\n", srd_left, srd_left_top_value - srd_left_bottom_value);
4735*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1BH, &u8Data);
4736*53ee8cc1Swenshuai.xi u16Data = u8Data;
4737*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1BL, &u8Data);
4738*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4739*53ee8cc1Swenshuai.xi srd_right=u16Data;
4740*53ee8cc1Swenshuai.xi printf("[DVBS]: FFT Right =====================: %d, %f\n", srd_right, srd_right_top_value - srd_right_bottom_value);
4741*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1CH, &u8Data);
4742*53ee8cc1Swenshuai.xi u16Data = u8Data;
4743*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1CL, &u8Data);
4744*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4745*53ee8cc1Swenshuai.xi srd_left_top=u16Data;
4746*53ee8cc1Swenshuai.xi printf("[DVBS]: FFT Left Top ==================: %d, %f\n", srd_left_top, srd_left_top_value);
4747*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1DH, &u8Data);
4748*53ee8cc1Swenshuai.xi u16Data = u8Data;
4749*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1DL, &u8Data);
4750*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4751*53ee8cc1Swenshuai.xi srd_left_bottom=u16Data;
4752*53ee8cc1Swenshuai.xi printf("[DVBS]: FFT Left Bottom ===============: %d, %f\n", srd_left_bottom, srd_left_bottom_value);
4753*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1EH, &u8Data);
4754*53ee8cc1Swenshuai.xi u16Data = u8Data;
4755*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1EL, &u8Data);
4756*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4757*53ee8cc1Swenshuai.xi srd_right_top=u16Data;
4758*53ee8cc1Swenshuai.xi printf("[DVBS]: FFT Right Top =================: %d, %f\n", srd_right_top, srd_right_top_value);
4759*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1FH, &u8Data);
4760*53ee8cc1Swenshuai.xi u16Data = u8Data;
4761*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1FL, &u8Data);
4762*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4763*53ee8cc1Swenshuai.xi srd_right_bottom=u16Data;
4764*53ee8cc1Swenshuai.xi printf("[DVBS]: FFT Right Bottom ==============: %d, %f\n", srd_right_bottom, srd_right_bottom_value);
4765*53ee8cc1Swenshuai.xi
4766*53ee8cc1Swenshuai.xi printf("-----------------------------------------\n");
4767*53ee8cc1Swenshuai.xi printf("[DVBS]: Left-Bottom ===================: %d\n", srd_left-srd_left_bottom);
4768*53ee8cc1Swenshuai.xi printf("[DVBS]: Left-Top ======================: %d\n", srd_left_top - srd_left);
4769*53ee8cc1Swenshuai.xi printf("[DVBS]: Right-Top =====================: %d\n", srd_right - srd_right_top);
4770*53ee8cc1Swenshuai.xi printf("[DVBS]: Right-Bottom ==================: %d\n", srd_right_bottom - srd_right);
4771*53ee8cc1Swenshuai.xi
4772*53ee8cc1Swenshuai.xi if (psd_smooth_factor!=0)
4773*53ee8cc1Swenshuai.xi {
4774*53ee8cc1Swenshuai.xi if ((srd_left_top-srd_left_bottom)!=0)
4775*53ee8cc1Swenshuai.xi printf("[DVBS]: Left Slope ====================: %f\n", (srd_left_top_value - srd_left_bottom_value)/(srd_left_top-srd_left_bottom));
4776*53ee8cc1Swenshuai.xi else
4777*53ee8cc1Swenshuai.xi printf("[DVBS]: Left Slope ====================: %f\n", 0.000000);
4778*53ee8cc1Swenshuai.xi
4779*53ee8cc1Swenshuai.xi if((srd_right_bottom - srd_right_top)!=0)
4780*53ee8cc1Swenshuai.xi printf("[DVBS]: Right Slope ===================: %f\n", (srd_right_top_value - srd_right_bottom_value)/(srd_right_bottom - srd_right_top));
4781*53ee8cc1Swenshuai.xi else
4782*53ee8cc1Swenshuai.xi printf("[DVBS]: Right Slope ===================: %f\n", 0.000000);
4783*53ee8cc1Swenshuai.xi
4784*53ee8cc1Swenshuai.xi if (((srd_right_top_value - srd_right_bottom_value)!=0)&&((srd_right_bottom - srd_right_top))!=0)
4785*53ee8cc1Swenshuai.xi printf("[DVBS]: Slope Ratio ===================: %f\n", ((srd_left_top_value - srd_left_bottom_value)/(srd_left_top-srd_left_bottom))/((srd_right_top_value - srd_right_bottom_value)/(srd_right_bottom - srd_right_top)));
4786*53ee8cc1Swenshuai.xi else
4787*53ee8cc1Swenshuai.xi printf("[DVBS]: Slope Ratio ===================: %f\n", 0.000000);
4788*53ee8cc1Swenshuai.xi }
4789*53ee8cc1Swenshuai.xi else
4790*53ee8cc1Swenshuai.xi {
4791*53ee8cc1Swenshuai.xi printf("[DVBS]: Left Slope ======================: %d\n", 0);
4792*53ee8cc1Swenshuai.xi printf("[DVBS]: Right Slope =====================: %d\n", 0);
4793*53ee8cc1Swenshuai.xi printf("[DVBS]: Slope Ratio =====================: %d\n", 0);
4794*53ee8cc1Swenshuai.xi }
4795*53ee8cc1Swenshuai.xi #endif
4796*53ee8cc1Swenshuai.xi return status;
4797*53ee8cc1Swenshuai.xi }
4798*53ee8cc1Swenshuai.xi
INTERN_DVBS_Demod_Get_Debug_Info_polling(void)4799*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Demod_Get_Debug_Info_polling(void)
4800*53ee8cc1Swenshuai.xi {
4801*53ee8cc1Swenshuai.xi MS_BOOL bRet = FALSE;
4802*53ee8cc1Swenshuai.xi #if 0
4803*53ee8cc1Swenshuai.xi MS_U8 u8Data = 0;
4804*53ee8cc1Swenshuai.xi MS_U16 u16Data = 0;
4805*53ee8cc1Swenshuai.xi MS_U16 u16Address = 0;
4806*53ee8cc1Swenshuai.xi MS_U32 u32DebugInfo_Fb = 0; //Fb, SymbolRate
4807*53ee8cc1Swenshuai.xi MS_U32 u32DebugInfo_Fs = 96000; //Fs, 96000k
4808*53ee8cc1Swenshuai.xi float AGC_IF_Gain;
4809*53ee8cc1Swenshuai.xi float DAGC0_Gain, DAGC1_Gain, DAGC2_Gain, DAGC3_Gain, DAGC0_Peak_Mean, DAGC1_Peak_Mean, DAGC2_Peak_Mean, DAGC3_Peak_Mean;
4810*53ee8cc1Swenshuai.xi short AGC_Err, DAGC0_Err, DAGC1_Err, DAGC2_Err, DAGC3_Err;
4811*53ee8cc1Swenshuai.xi float DCR_Offset_I, DCR_Offset_Q;
4812*53ee8cc1Swenshuai.xi float FineCFO_loop_input_value, FineCFO_loop_out_value;
4813*53ee8cc1Swenshuai.xi double FineCFO_loop_ki_value, TR_loop_ki;
4814*53ee8cc1Swenshuai.xi float PR_in_value, PR_out_value, PR_loop_ki, PR_loopback_ki;
4815*53ee8cc1Swenshuai.xi float IQB_Phase, IQB_Gain;
4816*53ee8cc1Swenshuai.xi MS_U16 IIS_cnt, ConvegenceLen;
4817*53ee8cc1Swenshuai.xi float Linear_SNR_dd, SNR_dd_dB, Linear_SNR_da, SNR_da_dB, SNR_nda_dB, Linear_SNR;
4818*53ee8cc1Swenshuai.xi float Packet_Err, BER;
4819*53ee8cc1Swenshuai.xi float TR_Indicator_ff, TR_SFO_Converge, Fs_value, Fb_value;
4820*53ee8cc1Swenshuai.xi float TR_Loop_Output, TR_Loop_Ki, TR_loop_input, TR_tmp0, TR_tmp1, TR_tmp2;
4821*53ee8cc1Swenshuai.xi float Eq_variance_da, Eq_variance_dd;
4822*53ee8cc1Swenshuai.xi float ndasnr_ratio, ndasnr_a, ndasnr_ab;
4823*53ee8cc1Swenshuai.xi MS_U16 BitErr, BitErrPeriod;
4824*53ee8cc1Swenshuai.xi MS_BOOL BEROver;
4825*53ee8cc1Swenshuai.xi
4826*53ee8cc1Swenshuai.xi //Fb
4827*53ee8cc1Swenshuai.xi bRet &= MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
4828*53ee8cc1Swenshuai.xi //bRet &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, &u8Data);
4829*53ee8cc1Swenshuai.xi if((u8Data&0x02)==0x00) //Manual Tune
4830*53ee8cc1Swenshuai.xi {
4831*53ee8cc1Swenshuai.xi u32DebugInfo_Fb = 0x0;//_u32CurrentSR;
4832*53ee8cc1Swenshuai.xi }
4833*53ee8cc1Swenshuai.xi else //Blind Scan
4834*53ee8cc1Swenshuai.xi {
4835*53ee8cc1Swenshuai.xi bRet &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14H, &u8Data);
4836*53ee8cc1Swenshuai.xi u16Data = u8Data;
4837*53ee8cc1Swenshuai.xi bRet &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14L, &u8Data);
4838*53ee8cc1Swenshuai.xi u16Data = (u16Data<<8)|u8Data;
4839*53ee8cc1Swenshuai.xi u32DebugInfo_Fb = u16Data;
4840*53ee8cc1Swenshuai.xi }
4841*53ee8cc1Swenshuai.xi printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
4842*53ee8cc1Swenshuai.xi printf("Fs ====================================: %lu [kHz]\n",u32DebugInfo_Fs);
4843*53ee8cc1Swenshuai.xi printf("Fb ====================================: %lu [kHz]\n",u32DebugInfo_Fb);
4844*53ee8cc1Swenshuai.xi //---------------------------------------------------------
4845*53ee8cc1Swenshuai.xi //Page1-GAIN & DCR
4846*53ee8cc1Swenshuai.xi //---------------------------------------------------------
4847*53ee8cc1Swenshuai.xi //GAIN
4848*53ee8cc1Swenshuai.xi printf("\n");
4849*53ee8cc1Swenshuai.xi printf("========================================================================\n");
4850*53ee8cc1Swenshuai.xi printf("Debug Message [GAIN & DCR]==============================================\n");
4851*53ee8cc1Swenshuai.xi
4852*53ee8cc1Swenshuai.xi //Debug select
4853*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_IF_AGC_GAIN>>16)&0xffff;
4854*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4855*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0xfff0)|DEBUG_SEL_IF_AGC_GAIN)&0xffff);
4856*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
4857*53ee8cc1Swenshuai.xi
4858*53ee8cc1Swenshuai.xi //Freeze and dump
4859*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
4860*53ee8cc1Swenshuai.xi //AGC_IF_GAIN
4861*53ee8cc1Swenshuai.xi u16Address = (DEBUG_OUT_AGC)&0xffff;
4862*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4863*53ee8cc1Swenshuai.xi AGC_IF_Gain=u16Data;
4864*53ee8cc1Swenshuai.xi //Unfreeze
4865*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
4866*53ee8cc1Swenshuai.xi
4867*53ee8cc1Swenshuai.xi AGC_IF_Gain=AGC_IF_Gain/0x8000; //(16, 15)
4868*53ee8cc1Swenshuai.xi printf("[DVBS]: AGC_IF_Gain ===================: %f\n", AGC_IF_Gain);
4869*53ee8cc1Swenshuai.xi //---------------------------------------------------------
4870*53ee8cc1Swenshuai.xi //Debug select
4871*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_DAGC0_GAIN>>16)&0xffff;
4872*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4873*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC0_GAIN)&0xffff);
4874*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
4875*53ee8cc1Swenshuai.xi
4876*53ee8cc1Swenshuai.xi //Freeze and dump
4877*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
4878*53ee8cc1Swenshuai.xi //DAGC0_GAIN
4879*53ee8cc1Swenshuai.xi u16Address = (DEBUG_OUT_DAGC0)&0xffff;
4880*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4881*53ee8cc1Swenshuai.xi u16Data = (u16Data>>4);
4882*53ee8cc1Swenshuai.xi DAGC0_Gain=(u16Data&0x0fff);
4883*53ee8cc1Swenshuai.xi //Unfreeze
4884*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
4885*53ee8cc1Swenshuai.xi //---------------------------------------------------------
4886*53ee8cc1Swenshuai.xi //Debug select
4887*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_DAGC1_GAIN>>16)&0xffff;
4888*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4889*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC1_GAIN)&0xffff);
4890*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
4891*53ee8cc1Swenshuai.xi
4892*53ee8cc1Swenshuai.xi //Freeze and dump
4893*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
4894*53ee8cc1Swenshuai.xi //DAGC1_GAIN
4895*53ee8cc1Swenshuai.xi u16Address = (DEBUG_OUT_DAGC1)&0xffff;
4896*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4897*53ee8cc1Swenshuai.xi DAGC1_Gain=(u16Data&0x07ff);
4898*53ee8cc1Swenshuai.xi //Unfreeze
4899*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
4900*53ee8cc1Swenshuai.xi //---------------------------------------------------------
4901*53ee8cc1Swenshuai.xi //Debug select
4902*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_DAGC2_GAIN>>16)&0xffff;
4903*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4904*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC2_GAIN)&0xffff);
4905*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
4906*53ee8cc1Swenshuai.xi
4907*53ee8cc1Swenshuai.xi //Freeze and dump
4908*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
4909*53ee8cc1Swenshuai.xi //DAGC2_GAIN
4910*53ee8cc1Swenshuai.xi u16Address = (DEBUG_OUT_DAGC2)&0xffff;
4911*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4912*53ee8cc1Swenshuai.xi DAGC2_Gain=(u16Data&0x0fff);
4913*53ee8cc1Swenshuai.xi //Unfreeze
4914*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
4915*53ee8cc1Swenshuai.xi //---------------------------------------------------------
4916*53ee8cc1Swenshuai.xi //Debug select
4917*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_DAGC3_GAIN>>16)&0xffff;
4918*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4919*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC3_GAIN)&0xffff);
4920*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
4921*53ee8cc1Swenshuai.xi
4922*53ee8cc1Swenshuai.xi //Freeze and dump
4923*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
4924*53ee8cc1Swenshuai.xi //DAGC3_GAIN
4925*53ee8cc1Swenshuai.xi u16Address = (DEBUG_OUT_DAGC3)&0xffff;
4926*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4927*53ee8cc1Swenshuai.xi u16Data = (u16Data>>4);
4928*53ee8cc1Swenshuai.xi DAGC3_Gain=(u16Data&0x0fff);
4929*53ee8cc1Swenshuai.xi //Unfreeze
4930*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
4931*53ee8cc1Swenshuai.xi //---------------------------------------------------------
4932*53ee8cc1Swenshuai.xi
4933*53ee8cc1Swenshuai.xi DAGC0_Gain=DAGC0_Gain/0x200; //<12,9>
4934*53ee8cc1Swenshuai.xi DAGC1_Gain=DAGC1_Gain/0x200; //<11,9>
4935*53ee8cc1Swenshuai.xi DAGC2_Gain=DAGC2_Gain/0x200; //<12,9>
4936*53ee8cc1Swenshuai.xi DAGC3_Gain=DAGC3_Gain/0x200; //<12,9>
4937*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC0_Gain ====================: %f\n", DAGC0_Gain);
4938*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC1_Gain ====================: %f\n", DAGC1_Gain);
4939*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC2_Gain ====================: %f\n", DAGC2_Gain);
4940*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC3_Gain ====================: %f\n", DAGC3_Gain);
4941*53ee8cc1Swenshuai.xi
4942*53ee8cc1Swenshuai.xi //---------------------------------------------------------
4943*53ee8cc1Swenshuai.xi //ERROR
4944*53ee8cc1Swenshuai.xi //Debug select
4945*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_AGC_ERR>>16)&0xffff;
4946*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4947*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0xfff0)|DEBUG_SEL_AGC_ERR)&0xffff);
4948*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
4949*53ee8cc1Swenshuai.xi
4950*53ee8cc1Swenshuai.xi //Freeze and dump
4951*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
4952*53ee8cc1Swenshuai.xi //AGC_ERR
4953*53ee8cc1Swenshuai.xi u16Address = (DEBUG_OUT_AGC)&0xffff;
4954*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4955*53ee8cc1Swenshuai.xi AGC_Err=(u16Data&0x03ff);
4956*53ee8cc1Swenshuai.xi //Unfreeze
4957*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
4958*53ee8cc1Swenshuai.xi
4959*53ee8cc1Swenshuai.xi //Debug select
4960*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_DAGC0_ERR>>16)&0xffff;
4961*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4962*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC0_ERR)&0xffff);
4963*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
4964*53ee8cc1Swenshuai.xi
4965*53ee8cc1Swenshuai.xi //Freeze and dump
4966*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
4967*53ee8cc1Swenshuai.xi //DAGC0_ERR
4968*53ee8cc1Swenshuai.xi u16Address = (DEBUG_OUT_DAGC0)&0xffff;
4969*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4970*53ee8cc1Swenshuai.xi u16Data = (u16Data>>4);
4971*53ee8cc1Swenshuai.xi DAGC0_Err=(u16Data&0x7fff);
4972*53ee8cc1Swenshuai.xi //Unfreeze
4973*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
4974*53ee8cc1Swenshuai.xi
4975*53ee8cc1Swenshuai.xi //Debug select
4976*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_DAGC1_ERR>>16)&0xffff;
4977*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4978*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC1_ERR)&0xffff);
4979*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
4980*53ee8cc1Swenshuai.xi
4981*53ee8cc1Swenshuai.xi //Freeze and dump
4982*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
4983*53ee8cc1Swenshuai.xi //DAGC1_ERR
4984*53ee8cc1Swenshuai.xi u16Address = (DEBUG_OUT_DAGC1)&0xffff;
4985*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4986*53ee8cc1Swenshuai.xi DAGC1_Err=(u16Data&0x7fff);
4987*53ee8cc1Swenshuai.xi //Unfreeze
4988*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
4989*53ee8cc1Swenshuai.xi
4990*53ee8cc1Swenshuai.xi //Debug select
4991*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_DAGC2_ERR>>16)&0xffff;
4992*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4993*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC2_ERR)&0xffff);
4994*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
4995*53ee8cc1Swenshuai.xi
4996*53ee8cc1Swenshuai.xi //Freeze and dump
4997*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
4998*53ee8cc1Swenshuai.xi //DAGC2_ERR
4999*53ee8cc1Swenshuai.xi u16Address = (DEBUG_OUT_DAGC2)&0xffff;
5000*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5001*53ee8cc1Swenshuai.xi DAGC2_Err=(u16Data&0x7fff);
5002*53ee8cc1Swenshuai.xi //Unfreeze
5003*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5004*53ee8cc1Swenshuai.xi
5005*53ee8cc1Swenshuai.xi //Debug select
5006*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_DAGC3_ERR>>16)&0xffff;
5007*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5008*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC3_ERR)&0xffff);
5009*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5010*53ee8cc1Swenshuai.xi
5011*53ee8cc1Swenshuai.xi //Freeze and dump
5012*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5013*53ee8cc1Swenshuai.xi //DAGC3_ERR
5014*53ee8cc1Swenshuai.xi u16Address = (DEBUG_OUT_DAGC3)&0xffff;
5015*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5016*53ee8cc1Swenshuai.xi u16Data = (u16Data>>4);
5017*53ee8cc1Swenshuai.xi DAGC3_Err=(u16Data&0x7fff);
5018*53ee8cc1Swenshuai.xi //Unfreeze
5019*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5020*53ee8cc1Swenshuai.xi
5021*53ee8cc1Swenshuai.xi if (AGC_Err>=0x200)
5022*53ee8cc1Swenshuai.xi AGC_Err=AGC_Err-0x400;
5023*53ee8cc1Swenshuai.xi if (DAGC0_Err>=0x4000)
5024*53ee8cc1Swenshuai.xi DAGC0_Err=DAGC0_Err-0x8000;
5025*53ee8cc1Swenshuai.xi if (DAGC1_Err>=0x4000)
5026*53ee8cc1Swenshuai.xi DAGC1_Err=DAGC1_Err-0x8000;
5027*53ee8cc1Swenshuai.xi if (DAGC2_Err>=0x4000)
5028*53ee8cc1Swenshuai.xi DAGC2_Err=DAGC2_Err-0x8000;
5029*53ee8cc1Swenshuai.xi if (DAGC3_Err>=0x4000)
5030*53ee8cc1Swenshuai.xi DAGC3_Err=DAGC3_Err-0x8000;
5031*53ee8cc1Swenshuai.xi
5032*53ee8cc1Swenshuai.xi printf("[DVBS]: AGC_Err =========================: %.3f\n", (float)AGC_Err);
5033*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC0_Err =======================: %.3f\n", (float)DAGC0_Err);
5034*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC1_Err =======================: %.3f\n", (float)DAGC1_Err);
5035*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC2_Err =======================: %.3f\n", (float)DAGC2_Err);
5036*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC3_Err =======================: %.3f\n", (float)DAGC3_Err);
5037*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5038*53ee8cc1Swenshuai.xi //PEAK_MEAN
5039*53ee8cc1Swenshuai.xi //Debug select
5040*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_DAGC0_PEAK_MEAN>>16)&0xffff;
5041*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5042*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC0_PEAK_MEAN)&0xffff);
5043*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5044*53ee8cc1Swenshuai.xi
5045*53ee8cc1Swenshuai.xi //Freeze and dump
5046*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5047*53ee8cc1Swenshuai.xi //DAGC0_PEAK_MEAN
5048*53ee8cc1Swenshuai.xi u16Address = (DEBUG_OUT_DAGC0)&0xffff;
5049*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5050*53ee8cc1Swenshuai.xi u16Data = (u16Data>>4);
5051*53ee8cc1Swenshuai.xi DAGC0_Peak_Mean=(u16Data&0x0fff);
5052*53ee8cc1Swenshuai.xi //Unfreeze
5053*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5054*53ee8cc1Swenshuai.xi
5055*53ee8cc1Swenshuai.xi //Debug select
5056*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_DAGC1_PEAK_MEAN>>16)&0xffff;
5057*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5058*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC1_PEAK_MEAN)&0xffff);
5059*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5060*53ee8cc1Swenshuai.xi
5061*53ee8cc1Swenshuai.xi //Freeze and dump
5062*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5063*53ee8cc1Swenshuai.xi //DAGC1_PEAK_MEAN
5064*53ee8cc1Swenshuai.xi u16Address = (DEBUG_OUT_DAGC1)&0xffff;
5065*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5066*53ee8cc1Swenshuai.xi DAGC1_Peak_Mean=(u16Data&0x0fff);
5067*53ee8cc1Swenshuai.xi //Unfreeze
5068*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5069*53ee8cc1Swenshuai.xi
5070*53ee8cc1Swenshuai.xi //Debug select
5071*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_DAGC2_PEAK_MEAN>>16)&0xffff;
5072*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5073*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC2_PEAK_MEAN)&0xffff);
5074*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5075*53ee8cc1Swenshuai.xi
5076*53ee8cc1Swenshuai.xi //Freeze and dump
5077*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5078*53ee8cc1Swenshuai.xi //DAGC2_PEAK_MEAN
5079*53ee8cc1Swenshuai.xi u16Address = (DEBUG_OUT_DAGC2)&0xffff;
5080*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5081*53ee8cc1Swenshuai.xi DAGC2_Peak_Mean=(u16Data&0x0fff);
5082*53ee8cc1Swenshuai.xi //Unfreeze
5083*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5084*53ee8cc1Swenshuai.xi
5085*53ee8cc1Swenshuai.xi //Debug select
5086*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_DAGC3_PEAK_MEAN>>16)&0xffff;
5087*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5088*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC3_PEAK_MEAN)&0xffff);
5089*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5090*53ee8cc1Swenshuai.xi
5091*53ee8cc1Swenshuai.xi //Freeze and dump
5092*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5093*53ee8cc1Swenshuai.xi //DAGC3_PEAK_MEAN
5094*53ee8cc1Swenshuai.xi u16Address = (DEBUG_OUT_DAGC3)&0xffff;
5095*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5096*53ee8cc1Swenshuai.xi u16Data = (u16Data>>4);
5097*53ee8cc1Swenshuai.xi DAGC3_Peak_Mean=(u16Data&0x0fff);
5098*53ee8cc1Swenshuai.xi //Unfreeze
5099*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5100*53ee8cc1Swenshuai.xi
5101*53ee8cc1Swenshuai.xi
5102*53ee8cc1Swenshuai.xi DAGC0_Peak_Mean = DAGC0_Peak_Mean / 0x800; //<12,11>
5103*53ee8cc1Swenshuai.xi DAGC1_Peak_Mean = DAGC1_Peak_Mean / 0x800; //<12,11>
5104*53ee8cc1Swenshuai.xi DAGC2_Peak_Mean = DAGC2_Peak_Mean / 0x800; //<12,11>
5105*53ee8cc1Swenshuai.xi DAGC3_Peak_Mean = DAGC3_Peak_Mean / 0x800; //<12,11>
5106*53ee8cc1Swenshuai.xi
5107*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC0_Peak_Mean ===============: %f\n", DAGC0_Peak_Mean);
5108*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC1_Peak_Mean ===============: %f\n", DAGC1_Peak_Mean);
5109*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC2_Peak_Mean ===============: %f\n", DAGC2_Peak_Mean);
5110*53ee8cc1Swenshuai.xi printf("[DVBS]: DAGC3_Peak_Mean ===============: %f\n", DAGC3_Peak_Mean);
5111*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5112*53ee8cc1Swenshuai.xi //Freeze and dump
5113*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5114*53ee8cc1Swenshuai.xi
5115*53ee8cc1Swenshuai.xi u16Address = (DCR_OFFSET)&0xffff;
5116*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5117*53ee8cc1Swenshuai.xi
5118*53ee8cc1Swenshuai.xi DCR_Offset_I=(u16Data&0xff);
5119*53ee8cc1Swenshuai.xi if (DCR_Offset_I >= 0x80)
5120*53ee8cc1Swenshuai.xi DCR_Offset_I = DCR_Offset_I-0x100;
5121*53ee8cc1Swenshuai.xi DCR_Offset_I = DCR_Offset_I/0x80;
5122*53ee8cc1Swenshuai.xi
5123*53ee8cc1Swenshuai.xi DCR_Offset_Q=(u16Data>>8)&0xff;
5124*53ee8cc1Swenshuai.xi if (DCR_Offset_Q >= 0x80)
5125*53ee8cc1Swenshuai.xi DCR_Offset_Q = DCR_Offset_Q-0x100;
5126*53ee8cc1Swenshuai.xi DCR_Offset_Q = DCR_Offset_Q/0x80;
5127*53ee8cc1Swenshuai.xi
5128*53ee8cc1Swenshuai.xi //Unfreeze
5129*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5130*53ee8cc1Swenshuai.xi
5131*53ee8cc1Swenshuai.xi printf("[DVBS]: DCR_Offset_I ==================: %f\n", DCR_Offset_I);
5132*53ee8cc1Swenshuai.xi printf("[DVBS]: DCR_Offset_Q ==================: %f\n", DCR_Offset_Q);
5133*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5134*53ee8cc1Swenshuai.xi ////Page1-FineCFO & PR & IIS & IQB
5135*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5136*53ee8cc1Swenshuai.xi //FineCFO
5137*53ee8cc1Swenshuai.xi printf("------------------------------------------------------------------------\n");
5138*53ee8cc1Swenshuai.xi printf("Debug Message [FineCFO & PR & IIS & IQB & SNR Status]===================\n");
5139*53ee8cc1Swenshuai.xi //Debug Select
5140*53ee8cc1Swenshuai.xi u16Address = INNER_DEBUG_SEL;
5141*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5142*53ee8cc1Swenshuai.xi u16Data=((u16Data&0xC0FF)|0x0400);
5143*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5144*53ee8cc1Swenshuai.xi
5145*53ee8cc1Swenshuai.xi //Freeze and dump
5146*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5147*53ee8cc1Swenshuai.xi
5148*53ee8cc1Swenshuai.xi u16Address = INNEREXT_FINEFE_DBG_OUT0;
5149*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5150*53ee8cc1Swenshuai.xi FineCFO_loop_out_value=u16Data;
5151*53ee8cc1Swenshuai.xi u16Address = INNEREXT_FINEFE_DBG_OUT2;
5152*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5153*53ee8cc1Swenshuai.xi FineCFO_loop_out_value=(FineCFO_loop_out_value+(float)u16Data*pow(2.0, 16));
5154*53ee8cc1Swenshuai.xi
5155*53ee8cc1Swenshuai.xi //Too large.Use 10Bit
5156*53ee8cc1Swenshuai.xi u16Address = INNEREXT_FINEFE_KI_FF0;
5157*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5158*53ee8cc1Swenshuai.xi FineCFO_loop_ki_value=u16Data;
5159*53ee8cc1Swenshuai.xi u16Address = INNEREXT_FINEFE_KI_FF2;
5160*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5161*53ee8cc1Swenshuai.xi FineCFO_loop_ki_value=(FineCFO_loop_ki_value+(float)u16Data*pow(2.0, 16));
5162*53ee8cc1Swenshuai.xi u16Address = INNEREXT_FINEFE_KI_FF4;
5163*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5164*53ee8cc1Swenshuai.xi FineCFO_loop_ki_value=(FineCFO_loop_ki_value+(double)(u16Data&0x00FF)*pow(2.0, 32));
5165*53ee8cc1Swenshuai.xi //Unfreeze
5166*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5167*53ee8cc1Swenshuai.xi
5168*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5169*53ee8cc1Swenshuai.xi //Debug Select
5170*53ee8cc1Swenshuai.xi u16Address = INNER_DEBUG_SEL;
5171*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5172*53ee8cc1Swenshuai.xi u16Data=((u16Data&0xC0FF)|0x0100);
5173*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5174*53ee8cc1Swenshuai.xi
5175*53ee8cc1Swenshuai.xi //Freeze and dump
5176*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5177*53ee8cc1Swenshuai.xi
5178*53ee8cc1Swenshuai.xi u16Address = INNEREXT_FINEFE_DBG_OUT0;
5179*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5180*53ee8cc1Swenshuai.xi FineCFO_loop_input_value=u16Data;
5181*53ee8cc1Swenshuai.xi u16Address = INNEREXT_FINEFE_DBG_OUT2;
5182*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5183*53ee8cc1Swenshuai.xi FineCFO_loop_input_value=(FineCFO_loop_input_value+(float)u16Data*pow(2.0, 16));
5184*53ee8cc1Swenshuai.xi
5185*53ee8cc1Swenshuai.xi //Unfreeze
5186*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5187*53ee8cc1Swenshuai.xi
5188*53ee8cc1Swenshuai.xi FineCFO_loop_ki_value = FineCFO_loop_ki_value/1024;
5189*53ee8cc1Swenshuai.xi
5190*53ee8cc1Swenshuai.xi if (FineCFO_loop_out_value > 8388608)
5191*53ee8cc1Swenshuai.xi FineCFO_loop_out_value=FineCFO_loop_out_value - 16777216;
5192*53ee8cc1Swenshuai.xi if (FineCFO_loop_ki_value > 536870912)//549755813888/1024)
5193*53ee8cc1Swenshuai.xi FineCFO_loop_ki_value=FineCFO_loop_ki_value - 1073741824;//1099511627776/1024;
5194*53ee8cc1Swenshuai.xi if (FineCFO_loop_input_value> 1048576)
5195*53ee8cc1Swenshuai.xi FineCFO_loop_input_value=FineCFO_loop_input_value - 2097152;
5196*53ee8cc1Swenshuai.xi
5197*53ee8cc1Swenshuai.xi FineCFO_loop_out_value = ((float)FineCFO_loop_out_value/16777216);
5198*53ee8cc1Swenshuai.xi FineCFO_loop_ki_value = ((double)FineCFO_loop_ki_value/67108864*u32DebugInfo_Fb);//68719476736/1024*Fb
5199*53ee8cc1Swenshuai.xi FineCFO_loop_input_value = ((float)FineCFO_loop_input_value/2097152);
5200*53ee8cc1Swenshuai.xi
5201*53ee8cc1Swenshuai.xi printf("[DVBS]: FineCFO_loop_out_value ========: %f \n", FineCFO_loop_out_value);
5202*53ee8cc1Swenshuai.xi printf("[DVBS]: FineCFO_loop_ki_value =========: %f \n", FineCFO_loop_ki_value);
5203*53ee8cc1Swenshuai.xi printf("[DVBS]: FineCFO_loop_input_value ======: %f \n", FineCFO_loop_input_value);
5204*53ee8cc1Swenshuai.xi
5205*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5206*53ee8cc1Swenshuai.xi //Phase Recovery
5207*53ee8cc1Swenshuai.xi //Debug select
5208*53ee8cc1Swenshuai.xi u16Address = INNER_DEBUG_SEL;
5209*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5210*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0x00FF)|0x0600)&0xffff);
5211*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5212*53ee8cc1Swenshuai.xi
5213*53ee8cc1Swenshuai.xi //Freeze and dump
5214*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5215*53ee8cc1Swenshuai.xi
5216*53ee8cc1Swenshuai.xi u16Address = INNER_PR_DEBUG_OUT0;
5217*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5218*53ee8cc1Swenshuai.xi PR_out_value=u16Data;
5219*53ee8cc1Swenshuai.xi if (PR_out_value>=0x1000)
5220*53ee8cc1Swenshuai.xi PR_out_value=PR_out_value-0x2000;
5221*53ee8cc1Swenshuai.xi
5222*53ee8cc1Swenshuai.xi //Unfreeze
5223*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5224*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5225*53ee8cc1Swenshuai.xi //Debug select
5226*53ee8cc1Swenshuai.xi u16Address = INNER_DEBUG_SEL;
5227*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5228*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0x00FF)|0x0100)&0xffff);
5229*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5230*53ee8cc1Swenshuai.xi
5231*53ee8cc1Swenshuai.xi //Freeze and dump
5232*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5233*53ee8cc1Swenshuai.xi
5234*53ee8cc1Swenshuai.xi u16Address = INNER_PR_DEBUG_OUT0;
5235*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5236*53ee8cc1Swenshuai.xi PR_in_value=u16Data;
5237*53ee8cc1Swenshuai.xi u16Address = INNER_PR_DEBUG_OUT2;
5238*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5239*53ee8cc1Swenshuai.xi PR_in_value=(((u16Data&0x000F)<<16)|(MS_U16)PR_in_value);
5240*53ee8cc1Swenshuai.xi if (PR_in_value>=0x80000)
5241*53ee8cc1Swenshuai.xi PR_in_value=PR_in_value-0x100000;
5242*53ee8cc1Swenshuai.xi
5243*53ee8cc1Swenshuai.xi //Unfreeze
5244*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5245*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5246*53ee8cc1Swenshuai.xi //Debug select
5247*53ee8cc1Swenshuai.xi u16Address = INNER_DEBUG_SEL;
5248*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5249*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0xC0FF)|0x0400)&0xffff);
5250*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5251*53ee8cc1Swenshuai.xi
5252*53ee8cc1Swenshuai.xi //Freeze and dump
5253*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5254*53ee8cc1Swenshuai.xi
5255*53ee8cc1Swenshuai.xi u16Address = INNER_PR_DEBUG_OUT0;
5256*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5257*53ee8cc1Swenshuai.xi PR_loop_ki=u16Data;
5258*53ee8cc1Swenshuai.xi u16Address = INNER_PR_DEBUG_OUT2;
5259*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5260*53ee8cc1Swenshuai.xi PR_loop_ki=(((u16Data&0x00FF)<<16)+PR_loop_ki);
5261*53ee8cc1Swenshuai.xi if (PR_loop_ki>=0x800000)
5262*53ee8cc1Swenshuai.xi PR_loop_ki=PR_loop_ki-0x1000000;
5263*53ee8cc1Swenshuai.xi
5264*53ee8cc1Swenshuai.xi //Unfreeze
5265*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5266*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5267*53ee8cc1Swenshuai.xi //Debug select
5268*53ee8cc1Swenshuai.xi u16Address = INNER_DEBUG_SEL;
5269*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5270*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0x00FF)|0x0500)&0xffff);
5271*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5272*53ee8cc1Swenshuai.xi
5273*53ee8cc1Swenshuai.xi //Freeze and dump
5274*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5275*53ee8cc1Swenshuai.xi
5276*53ee8cc1Swenshuai.xi u16Address = INNER_PR_DEBUG_OUT0;
5277*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5278*53ee8cc1Swenshuai.xi PR_loopback_ki=u16Data;
5279*53ee8cc1Swenshuai.xi u16Address = INNER_PR_DEBUG_OUT2;
5280*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5281*53ee8cc1Swenshuai.xi PR_loopback_ki=(((u16Data&0x00FF)<<16)+PR_loopback_ki);
5282*53ee8cc1Swenshuai.xi if (PR_loopback_ki>=0x800000)
5283*53ee8cc1Swenshuai.xi PR_loopback_ki=PR_loopback_ki-0x1000000;
5284*53ee8cc1Swenshuai.xi
5285*53ee8cc1Swenshuai.xi //Unfreeze
5286*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5287*53ee8cc1Swenshuai.xi
5288*53ee8cc1Swenshuai.xi PR_out_value = ((float)PR_out_value/4096);
5289*53ee8cc1Swenshuai.xi PR_in_value = ((float)PR_in_value/131072);
5290*53ee8cc1Swenshuai.xi PR_loop_ki = ((float)PR_loop_ki/67108864*u32DebugInfo_Fb);
5291*53ee8cc1Swenshuai.xi PR_loopback_ki = ((float)PR_loopback_ki/67108864*u32DebugInfo_Fb);
5292*53ee8cc1Swenshuai.xi
5293*53ee8cc1Swenshuai.xi printf("[DVBS]: PR_out_value ==================: %f\n", PR_out_value);
5294*53ee8cc1Swenshuai.xi printf("[DVBS]: PR_in_value ===================: %f\n", PR_in_value);
5295*53ee8cc1Swenshuai.xi printf("[DVBS]: PR_loop_ki ====================: %f\n", PR_loop_ki);
5296*53ee8cc1Swenshuai.xi printf("[DVBS]: PR_loopback_ki ================: %f\n", PR_loopback_ki);
5297*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5298*53ee8cc1Swenshuai.xi //IIS
5299*53ee8cc1Swenshuai.xi //Freeze and dump
5300*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5301*53ee8cc1Swenshuai.xi
5302*53ee8cc1Swenshuai.xi u16Address = (IIS_COUNT0)&0xffff;
5303*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5304*53ee8cc1Swenshuai.xi IIS_cnt=u16Data;
5305*53ee8cc1Swenshuai.xi u16Address = (IIS_COUNT2)&0xffff;
5306*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5307*53ee8cc1Swenshuai.xi IIS_cnt=(u16Data&0x1f)<<16|IIS_cnt;
5308*53ee8cc1Swenshuai.xi
5309*53ee8cc1Swenshuai.xi printf("[DVBS]: IIS_cnt =======================: %d\n", IIS_cnt);
5310*53ee8cc1Swenshuai.xi
5311*53ee8cc1Swenshuai.xi //Unfreeze
5312*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5313*53ee8cc1Swenshuai.xi //IQB
5314*53ee8cc1Swenshuai.xi //Freeze and dump
5315*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5316*53ee8cc1Swenshuai.xi
5317*53ee8cc1Swenshuai.xi u16Address = (IQB_PHASE)&0xffff;
5318*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5319*53ee8cc1Swenshuai.xi IQB_Phase=u16Data&0x3FF;
5320*53ee8cc1Swenshuai.xi if (IQB_Phase>=0x200)
5321*53ee8cc1Swenshuai.xi IQB_Phase=IQB_Phase-0x400;
5322*53ee8cc1Swenshuai.xi IQB_Phase=IQB_Phase/0x400*180;
5323*53ee8cc1Swenshuai.xi
5324*53ee8cc1Swenshuai.xi u16Address = (IQB_GAIN)&0xffff;
5325*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5326*53ee8cc1Swenshuai.xi IQB_Gain=u16Data&0x7FF;
5327*53ee8cc1Swenshuai.xi IQB_Gain=IQB_Gain/0x400;
5328*53ee8cc1Swenshuai.xi
5329*53ee8cc1Swenshuai.xi printf("[DVBS]: IQB_Phase =====================: %f\n", IQB_Phase);
5330*53ee8cc1Swenshuai.xi printf("[DVBS]: IQB_Gain ======================: %f\n", IQB_Gain);
5331*53ee8cc1Swenshuai.xi
5332*53ee8cc1Swenshuai.xi //Unfreeze
5333*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5334*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5335*53ee8cc1Swenshuai.xi //SNR
5336*53ee8cc1Swenshuai.xi //Freeze and dump
5337*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5338*53ee8cc1Swenshuai.xi
5339*53ee8cc1Swenshuai.xi Eq_variance_da=0;
5340*53ee8cc1Swenshuai.xi u16Address = 0x249E;
5341*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5342*53ee8cc1Swenshuai.xi Eq_variance_da=u16Data;
5343*53ee8cc1Swenshuai.xi u16Address = 0x24A0;
5344*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5345*53ee8cc1Swenshuai.xi Eq_variance_da=((float)(u16Data&0x03fff)*pow(2.0, 16)+Eq_variance_da)/pow(2.0, 29);
5346*53ee8cc1Swenshuai.xi
5347*53ee8cc1Swenshuai.xi if (Eq_variance_da==0)
5348*53ee8cc1Swenshuai.xi Eq_variance_da=1;
5349*53ee8cc1Swenshuai.xi Linear_SNR_da=1.0/Eq_variance_da;
5350*53ee8cc1Swenshuai.xi SNR_da_dB=10*log10(Linear_SNR_da);
5351*53ee8cc1Swenshuai.xi
5352*53ee8cc1Swenshuai.xi Eq_variance_dd=0;
5353*53ee8cc1Swenshuai.xi u16Address = 0x24A2;
5354*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5355*53ee8cc1Swenshuai.xi Eq_variance_dd=u16Data;
5356*53ee8cc1Swenshuai.xi u16Address = 0x24A4;
5357*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5358*53ee8cc1Swenshuai.xi Eq_variance_dd=(((float)(u16Data&0x3fff)*65536)+Eq_variance_dd)/pow(2.0, 29);
5359*53ee8cc1Swenshuai.xi
5360*53ee8cc1Swenshuai.xi if (Eq_variance_dd==0)
5361*53ee8cc1Swenshuai.xi Eq_variance_dd=1;
5362*53ee8cc1Swenshuai.xi Linear_SNR_dd=1.0/Eq_variance_dd;
5363*53ee8cc1Swenshuai.xi SNR_dd_dB=10*log10(Linear_SNR_dd);
5364*53ee8cc1Swenshuai.xi
5365*53ee8cc1Swenshuai.xi ndasnr_a=0;
5366*53ee8cc1Swenshuai.xi u16Address = 0x248C;
5367*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5368*53ee8cc1Swenshuai.xi ndasnr_a=u16Data;
5369*53ee8cc1Swenshuai.xi u16Address = 0x248E;
5370*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5371*53ee8cc1Swenshuai.xi ndasnr_a=(((float)(u16Data&0x0003)*pow(2.0, 16))+ndasnr_a)/65536;
5372*53ee8cc1Swenshuai.xi
5373*53ee8cc1Swenshuai.xi ndasnr_ab=0;
5374*53ee8cc1Swenshuai.xi u16Address = 0x2490;
5375*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5376*53ee8cc1Swenshuai.xi ndasnr_ab=u16Data;
5377*53ee8cc1Swenshuai.xi u16Address = 0x2492;
5378*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5379*53ee8cc1Swenshuai.xi ndasnr_ab=(((float)(u16Data&0x03ff)*pow(2.0, 16))+ndasnr_ab)/4194304;
5380*53ee8cc1Swenshuai.xi
5381*53ee8cc1Swenshuai.xi ndasnr_ab=sqrt(ndasnr_ab);
5382*53ee8cc1Swenshuai.xi if (ndasnr_ab==0)
5383*53ee8cc1Swenshuai.xi ndasnr_ab=1;
5384*53ee8cc1Swenshuai.xi ndasnr_ratio=(float)ndasnr_a/ndasnr_ab;
5385*53ee8cc1Swenshuai.xi if (ndasnr_ratio> 1)
5386*53ee8cc1Swenshuai.xi SNR_nda_dB=10*log10(1/(ndasnr_ratio - 1));
5387*53ee8cc1Swenshuai.xi else
5388*53ee8cc1Swenshuai.xi SNR_nda_dB=0;
5389*53ee8cc1Swenshuai.xi
5390*53ee8cc1Swenshuai.xi u16Address = 0x24BA;
5391*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5392*53ee8cc1Swenshuai.xi Linear_SNR=u16Data;
5393*53ee8cc1Swenshuai.xi u16Address = 0x24BC;
5394*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5395*53ee8cc1Swenshuai.xi Linear_SNR=(((float)(u16Data&0x0007)*pow(2.0, 16))+Linear_SNR)/64;
5396*53ee8cc1Swenshuai.xi if (Linear_SNR==0)
5397*53ee8cc1Swenshuai.xi Linear_SNR=1;
5398*53ee8cc1Swenshuai.xi Linear_SNR=10*log10(Linear_SNR);
5399*53ee8cc1Swenshuai.xi
5400*53ee8cc1Swenshuai.xi //Unfreeze
5401*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5402*53ee8cc1Swenshuai.xi printf("[DVBS]: SNR ===========================: %.2f\n", Linear_SNR);
5403*53ee8cc1Swenshuai.xi printf("[DVBS]: SNR_DA_dB =====================: %.2f\n", SNR_da_dB);
5404*53ee8cc1Swenshuai.xi printf("[DVBS]: SNR_DD_dB =====================: %.2f\n", SNR_dd_dB);
5405*53ee8cc1Swenshuai.xi printf("[DVBS]: SNR_NDA_dB ====================: %.2f\n", SNR_nda_dB);
5406*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5407*53ee8cc1Swenshuai.xi printf("------------------------------------------------------------------------\n");
5408*53ee8cc1Swenshuai.xi printf("Debug Message [DVBS - PacketErr & BER]==================================\n");
5409*53ee8cc1Swenshuai.xi //BER
5410*53ee8cc1Swenshuai.xi //freeze
5411*53ee8cc1Swenshuai.xi u16Address = 0x2103;
5412*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5413*53ee8cc1Swenshuai.xi u16Data=u16Data|0x0001;
5414*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5415*53ee8cc1Swenshuai.xi
5416*53ee8cc1Swenshuai.xi // bank 17 0x18 [7:0] reg_bit_err_sblprd_7_0 [15:8] reg_bit_err_sblprd_15_8
5417*53ee8cc1Swenshuai.xi u16Address = 0x2166;
5418*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5419*53ee8cc1Swenshuai.xi Packet_Err=u16Data;
5420*53ee8cc1Swenshuai.xi
5421*53ee8cc1Swenshuai.xi printf("[DVBS]: Packet Err ====================: %.3E\n", Packet_Err);
5422*53ee8cc1Swenshuai.xi
5423*53ee8cc1Swenshuai.xi /////////// Post-Viterbi BER /////////////
5424*53ee8cc1Swenshuai.xi // bank 7 0x18 [7:0] reg_bit_err_sblprd_7_0
5425*53ee8cc1Swenshuai.xi // [15:8] reg_bit_err_sblprd_15_8
5426*53ee8cc1Swenshuai.xi u16Address = 0x2146;
5427*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5428*53ee8cc1Swenshuai.xi BitErrPeriod=u16Data;
5429*53ee8cc1Swenshuai.xi
5430*53ee8cc1Swenshuai.xi // bank 17 0x1D [7:0] reg_bit_err_num_7_0 [15:8] reg_bit_err_num_15_8
5431*53ee8cc1Swenshuai.xi // bank 17 0x1E [7:0] reg_bit_err_num_23_16 [15:8] reg_bit_err_num_31_24
5432*53ee8cc1Swenshuai.xi u16Address = 0x216A;
5433*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5434*53ee8cc1Swenshuai.xi BitErr=u16Data;
5435*53ee8cc1Swenshuai.xi u16Address = 0x216C;
5436*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5437*53ee8cc1Swenshuai.xi BitErr=(u16Data<<16)|BitErr;
5438*53ee8cc1Swenshuai.xi
5439*53ee8cc1Swenshuai.xi if (BitErrPeriod ==0 )//protect 0
5440*53ee8cc1Swenshuai.xi BitErrPeriod=1;
5441*53ee8cc1Swenshuai.xi if (BitErr <=0 )
5442*53ee8cc1Swenshuai.xi BER=0.5 / (float)(BitErrPeriod*128*188*8);
5443*53ee8cc1Swenshuai.xi else
5444*53ee8cc1Swenshuai.xi BER=(float)(BitErr) / (float)(BitErrPeriod*128*188*8);
5445*53ee8cc1Swenshuai.xi
5446*53ee8cc1Swenshuai.xi printf("[DVBS]: Post-Viterbi BER ==============: %.3E\n", BER);
5447*53ee8cc1Swenshuai.xi
5448*53ee8cc1Swenshuai.xi // bank 7 0x19 [7] reg_bit_err_num_freeze
5449*53ee8cc1Swenshuai.xi u16Address = 0x2103;
5450*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5451*53ee8cc1Swenshuai.xi u16Data=u16Data&(~0x0001);
5452*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5453*53ee8cc1Swenshuai.xi
5454*53ee8cc1Swenshuai.xi /////////// Pre-Viterbi BER /////////////
5455*53ee8cc1Swenshuai.xi // bank 17 0x08 [3] reg_rd_freezeber
5456*53ee8cc1Swenshuai.xi u16Address = 0x2110;
5457*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5458*53ee8cc1Swenshuai.xi u16Data=u16Data|0x0008;
5459*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5460*53ee8cc1Swenshuai.xi
5461*53ee8cc1Swenshuai.xi // bank 17 0x0b [7:0] reg_ber_timerl [15:8] reg_ber_timerm
5462*53ee8cc1Swenshuai.xi // bank 17 0x0c [5:0] reg_ber_timerh
5463*53ee8cc1Swenshuai.xi u16Address = 0x2116;
5464*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5465*53ee8cc1Swenshuai.xi BitErrPeriod=u16Data;
5466*53ee8cc1Swenshuai.xi u16Address = 0x2118;
5467*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5468*53ee8cc1Swenshuai.xi BitErrPeriod=((u16Data&0x3f)<<16)|BitErrPeriod;
5469*53ee8cc1Swenshuai.xi
5470*53ee8cc1Swenshuai.xi // bank 17 0x0f [7:0] reg_ber_7_0 [15:8] reg_ber_15_8
5471*53ee8cc1Swenshuai.xi u16Address = 0x211E;
5472*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5473*53ee8cc1Swenshuai.xi BitErr=u16Data;
5474*53ee8cc1Swenshuai.xi
5475*53ee8cc1Swenshuai.xi // bank 17 0x0D [13:8] reg_cor_intstat_reg
5476*53ee8cc1Swenshuai.xi u16Address = 0x211A;
5477*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5478*53ee8cc1Swenshuai.xi if (u16Data & 0x1000)
5479*53ee8cc1Swenshuai.xi {
5480*53ee8cc1Swenshuai.xi BEROver = true;
5481*53ee8cc1Swenshuai.xi }
5482*53ee8cc1Swenshuai.xi else
5483*53ee8cc1Swenshuai.xi {
5484*53ee8cc1Swenshuai.xi BEROver = false;
5485*53ee8cc1Swenshuai.xi }
5486*53ee8cc1Swenshuai.xi
5487*53ee8cc1Swenshuai.xi if (BitErrPeriod ==0 )//protect 0
5488*53ee8cc1Swenshuai.xi BitErrPeriod=1;
5489*53ee8cc1Swenshuai.xi if (BitErr <=0 )
5490*53ee8cc1Swenshuai.xi BER=0.5 / (float)(BitErrPeriod) / 256;
5491*53ee8cc1Swenshuai.xi else
5492*53ee8cc1Swenshuai.xi BER=(float)(BitErr) / (float)(BitErrPeriod) / 256;
5493*53ee8cc1Swenshuai.xi printf("[DVBS]: Pre-Viterbi BER ===============: %.3E\n", BER);
5494*53ee8cc1Swenshuai.xi
5495*53ee8cc1Swenshuai.xi // bank 17 0x08 [3] reg_rd_freezeber
5496*53ee8cc1Swenshuai.xi u16Address = 0x2110;
5497*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5498*53ee8cc1Swenshuai.xi u16Data=u16Data&(~0x0008);
5499*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5500*53ee8cc1Swenshuai.xi
5501*53ee8cc1Swenshuai.xi u16Address = 0x2188;
5502*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5503*53ee8cc1Swenshuai.xi ConvegenceLen = ((u16Data>>8)&0xFF);
5504*53ee8cc1Swenshuai.xi printf("[DVBS]: ConvegenceLen =================: %d\n", ConvegenceLen);
5505*53ee8cc1Swenshuai.xi
5506*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5507*53ee8cc1Swenshuai.xi //Timing Recovery
5508*53ee8cc1Swenshuai.xi //Debug select
5509*53ee8cc1Swenshuai.xi u16Address = (INNER_DEBUG_SEL_TR>>16)&0xffff;
5510*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5511*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0x00ff)|INNER_DEBUG_SEL_TR)&0xffff);
5512*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5513*53ee8cc1Swenshuai.xi
5514*53ee8cc1Swenshuai.xi //Freeze and dump
5515*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5516*53ee8cc1Swenshuai.xi
5517*53ee8cc1Swenshuai.xi u16Address = (TR_INDICATOR_FF0)&0xffff;
5518*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5519*53ee8cc1Swenshuai.xi TR_Indicator_ff=u16Data;
5520*53ee8cc1Swenshuai.xi u16Address = (TR_INDICATOR_FF0)&0xffff;
5521*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5522*53ee8cc1Swenshuai.xi TR_Indicator_ff=((u16Data<<16) | (MS_U16)TR_Indicator_ff)&0x7fffff;
5523*53ee8cc1Swenshuai.xi if (TR_Indicator_ff >= 0x400000)
5524*53ee8cc1Swenshuai.xi TR_Indicator_ff=TR_Indicator_ff - 0x800000;
5525*53ee8cc1Swenshuai.xi
5526*53ee8cc1Swenshuai.xi //Unfreeze
5527*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5528*53ee8cc1Swenshuai.xi
5529*53ee8cc1Swenshuai.xi //Debug select
5530*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_TR_SFO_CONVERGE>>16)&0xffff;
5531*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5532*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0x00ff)|DEBUG_SEL_TR_SFO_CONVERGE)&0xffff);
5533*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5534*53ee8cc1Swenshuai.xi
5535*53ee8cc1Swenshuai.xi //Freeze and dump
5536*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5537*53ee8cc1Swenshuai.xi
5538*53ee8cc1Swenshuai.xi u16Address = (TR_INDICATOR_FF0)&0xffff;
5539*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5540*53ee8cc1Swenshuai.xi TR_SFO_Converge=u16Data;
5541*53ee8cc1Swenshuai.xi u16Address = (TR_INDICATOR_FF0)&0xffff;
5542*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5543*53ee8cc1Swenshuai.xi TR_SFO_Converge=((u16Data<<16) | (MS_U16)TR_SFO_Converge)&0x7fffff;
5544*53ee8cc1Swenshuai.xi if (TR_SFO_Converge >= 0x400000)
5545*53ee8cc1Swenshuai.xi TR_SFO_Converge=TR_SFO_Converge - 0x800000;
5546*53ee8cc1Swenshuai.xi
5547*53ee8cc1Swenshuai.xi u16Address = INNER_TR_LOPF_VALUE_DEBUG0;
5548*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5549*53ee8cc1Swenshuai.xi TR_loop_ki=u16Data;
5550*53ee8cc1Swenshuai.xi u16Address = INNER_TR_LOPF_VALUE_DEBUG2;
5551*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5552*53ee8cc1Swenshuai.xi TR_loop_ki=((float)u16Data*pow(2.0, 16))+TR_loop_ki;
5553*53ee8cc1Swenshuai.xi u16Address = INNER_TR_LOPF_VALUE_DEBUG4;
5554*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5555*53ee8cc1Swenshuai.xi TR_loop_ki=(((double)(u16Data&0x01ff)*pow(2.0, 32))+ TR_loop_ki);
5556*53ee8cc1Swenshuai.xi if (TR_loop_ki>=pow(2.0, 40))
5557*53ee8cc1Swenshuai.xi TR_loop_ki=TR_loop_ki-pow(2.0, 41);
5558*53ee8cc1Swenshuai.xi
5559*53ee8cc1Swenshuai.xi //Unfreeze
5560*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5561*53ee8cc1Swenshuai.xi
5562*53ee8cc1Swenshuai.xi //Debug select
5563*53ee8cc1Swenshuai.xi u16Address = (DEBUG_SEL_TR_INPUT>>16)&0xffff;
5564*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5565*53ee8cc1Swenshuai.xi u16Data=(((u16Data&0x00ff)|DEBUG_SEL_TR_INPUT)&0xffff);
5566*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5567*53ee8cc1Swenshuai.xi
5568*53ee8cc1Swenshuai.xi //Freeze and dump
5569*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5570*53ee8cc1Swenshuai.xi
5571*53ee8cc1Swenshuai.xi u16Address = (TR_INDICATOR_FF0)&0xffff;
5572*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5573*53ee8cc1Swenshuai.xi TR_loop_input=u16Data;
5574*53ee8cc1Swenshuai.xi //banknum=(TR_INDICATOR_FF1>>8)&0xff;
5575*53ee8cc1Swenshuai.xi //addr=(TR_INDICATOR_FF1)&0xff;
5576*53ee8cc1Swenshuai.xi //if(InformRead(banknum, addr, &data)==FALSE) return;
5577*53ee8cc1Swenshuai.xi //TR_loop_input=((float)((data&0x00ff)<<16) + TR_loop_input);
5578*53ee8cc1Swenshuai.xi if (TR_loop_input >= 0x8000)
5579*53ee8cc1Swenshuai.xi TR_loop_input=TR_loop_input - 0x10000;
5580*53ee8cc1Swenshuai.xi
5581*53ee8cc1Swenshuai.xi //Unfreeze
5582*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5583*53ee8cc1Swenshuai.xi
5584*53ee8cc1Swenshuai.xi Fs_value=u32DebugInfo_Fs;
5585*53ee8cc1Swenshuai.xi Fb_value=u32DebugInfo_Fb;
5586*53ee8cc1Swenshuai.xi TR_tmp0=(float)TR_SFO_Converge/0x200000;
5587*53ee8cc1Swenshuai.xi TR_tmp2=TR_loop_ki/pow(2.0, 39);
5588*53ee8cc1Swenshuai.xi TR_tmp1=(float)Fs_value/2/Fb_value;
5589*53ee8cc1Swenshuai.xi
5590*53ee8cc1Swenshuai.xi TR_Indicator_ff = (TR_Indicator_ff/0x400);
5591*53ee8cc1Swenshuai.xi TR_Loop_Output = (TR_tmp0/TR_tmp1*1000000);
5592*53ee8cc1Swenshuai.xi TR_Loop_Ki = (TR_tmp2/TR_tmp1*1000000);
5593*53ee8cc1Swenshuai.xi TR_loop_input = (TR_loop_input/0x8000);
5594*53ee8cc1Swenshuai.xi
5595*53ee8cc1Swenshuai.xi printf("[DVBS]: TR_Indicator_ff================: %f \n", TR_Indicator_ff);
5596*53ee8cc1Swenshuai.xi printf("[DVBS]: TR_Loop_Output=================: %f [ppm]\n", TR_Loop_Output);
5597*53ee8cc1Swenshuai.xi printf("[DVBS]: TR_Loop_Ki=====================: %f [ppm]\n", TR_Loop_Ki);
5598*53ee8cc1Swenshuai.xi printf("[DVBS]: TR_loop_input==================: %f \n", TR_loop_input);
5599*53ee8cc1Swenshuai.xi #endif
5600*53ee8cc1Swenshuai.xi bRet=true;
5601*53ee8cc1Swenshuai.xi return bRet;
5602*53ee8cc1Swenshuai.xi }
5603*53ee8cc1Swenshuai.xi
5604*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
5605*53ee8cc1Swenshuai.xi // END Get And Show Info Function
5606*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
5607*53ee8cc1Swenshuai.xi
5608*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
5609*53ee8cc1Swenshuai.xi // BlindScan Function
5610*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
INTERN_DVBS_BlindScan_Start(MS_U16 u16StartFreq,MS_U16 u16EndFreq)5611*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_Start(MS_U16 u16StartFreq,MS_U16 u16EndFreq)
5612*53ee8cc1Swenshuai.xi {
5613*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
5614*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
5615*53ee8cc1Swenshuai.xi
5616*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_Start+\n"));
5617*53ee8cc1Swenshuai.xi
5618*53ee8cc1Swenshuai.xi _u16BlindScanStartFreq=u16StartFreq;
5619*53ee8cc1Swenshuai.xi _u16BlindScanEndFreq=u16EndFreq;
5620*53ee8cc1Swenshuai.xi _u16TunerCenterFreq=0;
5621*53ee8cc1Swenshuai.xi _u16ChannelInfoIndex=0;
5622*53ee8cc1Swenshuai.xi
5623*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
5624*53ee8cc1Swenshuai.xi u8Data&=0xd0;
5625*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
5626*53ee8cc1Swenshuai.xi
5627*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_92, (MS_U8)_u16BlindScanStartFreq&0x00ff);
5628*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_93, (MS_U8)(_u16BlindScanStartFreq>>8)&0x00ff);
5629*53ee8cc1Swenshuai.xi
5630*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_Start- _u16BlindScanStartFreq%d u16StartFreq %d u16EndFreq %d\n", _u16BlindScanStartFreq, u16StartFreq, u16EndFreq));
5631*53ee8cc1Swenshuai.xi
5632*53ee8cc1Swenshuai.xi return status;
5633*53ee8cc1Swenshuai.xi }
5634*53ee8cc1Swenshuai.xi
INTERN_DVBS_BlindScan_NextFreq(MS_BOOL * bBlindScanEnd)5635*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_NextFreq(MS_BOOL* bBlindScanEnd)
5636*53ee8cc1Swenshuai.xi {
5637*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
5638*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
5639*53ee8cc1Swenshuai.xi
5640*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_NextFreq+\n"));
5641*53ee8cc1Swenshuai.xi
5642*53ee8cc1Swenshuai.xi * bBlindScanEnd=FALSE;
5643*53ee8cc1Swenshuai.xi
5644*53ee8cc1Swenshuai.xi if (_u16TunerCenterFreq >=_u16BlindScanEndFreq)
5645*53ee8cc1Swenshuai.xi {
5646*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_NextFreq . _u16TunerCenterFreq %d _u16BlindScanEndFreq%d\n", _u16TunerCenterFreq, _u16BlindScanEndFreq));
5647*53ee8cc1Swenshuai.xi * bBlindScanEnd=TRUE;
5648*53ee8cc1Swenshuai.xi
5649*53ee8cc1Swenshuai.xi return status;
5650*53ee8cc1Swenshuai.xi }
5651*53ee8cc1Swenshuai.xi //Set Tuner Frequency
5652*53ee8cc1Swenshuai.xi MsOS_DelayTask(10);
5653*53ee8cc1Swenshuai.xi
5654*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
5655*53ee8cc1Swenshuai.xi if ((u8Data&0x02)==0x00)//Manual Tune
5656*53ee8cc1Swenshuai.xi {
5657*53ee8cc1Swenshuai.xi u8Data&=~(0x28);
5658*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
5659*53ee8cc1Swenshuai.xi u8Data|=0x02;
5660*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
5661*53ee8cc1Swenshuai.xi u8Data|=0x01;
5662*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
5663*53ee8cc1Swenshuai.xi }
5664*53ee8cc1Swenshuai.xi else
5665*53ee8cc1Swenshuai.xi {
5666*53ee8cc1Swenshuai.xi u8Data&=~(0x28);
5667*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
5668*53ee8cc1Swenshuai.xi }
5669*53ee8cc1Swenshuai.xi
5670*53ee8cc1Swenshuai.xi return status;
5671*53ee8cc1Swenshuai.xi }
5672*53ee8cc1Swenshuai.xi
INTERN_DVBS_BlindScan_GetTunerFreq(MS_U16 * u16TunerCenterFreq,MS_U16 * u16TunerCutOffFreq)5673*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_GetTunerFreq(MS_U16 *u16TunerCenterFreq, MS_U16 *u16TunerCutOffFreq)
5674*53ee8cc1Swenshuai.xi {
5675*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
5676*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
5677*53ee8cc1Swenshuai.xi MS_U16 u16WaitCount;
5678*53ee8cc1Swenshuai.xi MS_U16 u16TunerCutOff;
5679*53ee8cc1Swenshuai.xi
5680*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_GetTunerFreq+\n"));
5681*53ee8cc1Swenshuai.xi
5682*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
5683*53ee8cc1Swenshuai.xi if ((u8Data&0x02)==0x02)
5684*53ee8cc1Swenshuai.xi {
5685*53ee8cc1Swenshuai.xi u8Data|=0x08;
5686*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
5687*53ee8cc1Swenshuai.xi u16WaitCount=0;
5688*53ee8cc1Swenshuai.xi do
5689*53ee8cc1Swenshuai.xi {
5690*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_STATE_FLAG, &u8Data);//SubState
5691*53ee8cc1Swenshuai.xi u16WaitCount++;
5692*53ee8cc1Swenshuai.xi //DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_NextFreq u8Data:0x%x u16WaitCount:%d\n", u8Data, u16WaitCount));
5693*53ee8cc1Swenshuai.xi MsOS_DelayTask(1);
5694*53ee8cc1Swenshuai.xi }while((u8Data!=0x01)&&(u16WaitCount<INTERN_DVBS_DEMOD_WAIT_TIMEOUT));
5695*53ee8cc1Swenshuai.xi }
5696*53ee8cc1Swenshuai.xi else if((u8Data&0x01)==0x01)
5697*53ee8cc1Swenshuai.xi {
5698*53ee8cc1Swenshuai.xi u8Data|=0x20;
5699*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
5700*53ee8cc1Swenshuai.xi u16WaitCount=0;
5701*53ee8cc1Swenshuai.xi do
5702*53ee8cc1Swenshuai.xi {
5703*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_STATE_FLAG, &u8Data);//SubState
5704*53ee8cc1Swenshuai.xi u16WaitCount++;
5705*53ee8cc1Swenshuai.xi //DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_NextFreq u8Data:0x%x u16WaitCount:%d\n", u8Data, u16WaitCount));
5706*53ee8cc1Swenshuai.xi MsOS_DelayTask(1);
5707*53ee8cc1Swenshuai.xi }while((u8Data!=0x01)&&(u16WaitCount<INTERN_DVBS_DEMOD_WAIT_TIMEOUT));
5708*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
5709*53ee8cc1Swenshuai.xi u8Data|=0x02;
5710*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
5711*53ee8cc1Swenshuai.xi }
5712*53ee8cc1Swenshuai.xi u16WaitCount=0;
5713*53ee8cc1Swenshuai.xi
5714*53ee8cc1Swenshuai.xi _u16TunerCenterFreq=0;
5715*53ee8cc1Swenshuai.xi
5716*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_93, &u8Data);
5717*53ee8cc1Swenshuai.xi //printf("INTERN_DVBS_BlindScan_GetTunerFreq E_DMD_S2_BS_Tuner_Center_Freq_H=%d\n", u8Data);//RRRRR
5718*53ee8cc1Swenshuai.xi _u16TunerCenterFreq=u8Data;
5719*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_92, &u8Data);
5720*53ee8cc1Swenshuai.xi //printf("INTERN_DVBS_BlindScan_GetTunerFreq E_DMD_S2_BS_Tuner_Center_Freq_L=%d\n", u8Data);//RRRRR
5721*53ee8cc1Swenshuai.xi _u16TunerCenterFreq=(_u16TunerCenterFreq<<8)|u8Data;
5722*53ee8cc1Swenshuai.xi
5723*53ee8cc1Swenshuai.xi *u16TunerCenterFreq = _u16TunerCenterFreq;
5724*53ee8cc1Swenshuai.xi //claire test
5725*53ee8cc1Swenshuai.xi u16TunerCutOff=44000;
5726*53ee8cc1Swenshuai.xi if(_u16TunerCenterFreq<=990)//980
5727*53ee8cc1Swenshuai.xi {
5728*53ee8cc1Swenshuai.xi
5729*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_BALANCE_TRACK, &u8Data);
5730*53ee8cc1Swenshuai.xi if(u8Data==0x01)
5731*53ee8cc1Swenshuai.xi {
5732*53ee8cc1Swenshuai.xi if(_u16TunerCenterFreq<970)//970
5733*53ee8cc1Swenshuai.xi {
5734*53ee8cc1Swenshuai.xi u16TunerCutOff=10000;
5735*53ee8cc1Swenshuai.xi }
5736*53ee8cc1Swenshuai.xi else
5737*53ee8cc1Swenshuai.xi {
5738*53ee8cc1Swenshuai.xi u16TunerCutOff=20000;
5739*53ee8cc1Swenshuai.xi }
5740*53ee8cc1Swenshuai.xi u8Data=0x02;
5741*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_BALANCE_TRACK, u8Data);
5742*53ee8cc1Swenshuai.xi }
5743*53ee8cc1Swenshuai.xi else if(u8Data==0x02)
5744*53ee8cc1Swenshuai.xi {
5745*53ee8cc1Swenshuai.xi u8Data=0x00;
5746*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_BALANCE_TRACK, u8Data);
5747*53ee8cc1Swenshuai.xi }
5748*53ee8cc1Swenshuai.xi }
5749*53ee8cc1Swenshuai.xi *u16TunerCutOffFreq = u16TunerCutOff;
5750*53ee8cc1Swenshuai.xi
5751*53ee8cc1Swenshuai.xi //end claire test
5752*53ee8cc1Swenshuai.xi
5753*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_GetTunerFreq- _u16TunerCenterFreq:%d\n", _u16TunerCenterFreq));
5754*53ee8cc1Swenshuai.xi
5755*53ee8cc1Swenshuai.xi
5756*53ee8cc1Swenshuai.xi return status;
5757*53ee8cc1Swenshuai.xi }
5758*53ee8cc1Swenshuai.xi
INTERN_DVBS_BlindScan_WaitCurFreqFinished(MS_U8 * u8Progress,MS_U8 * u8FindNum)5759*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_WaitCurFreqFinished(MS_U8* u8Progress,MS_U8 *u8FindNum)
5760*53ee8cc1Swenshuai.xi {
5761*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
5762*53ee8cc1Swenshuai.xi MS_U32 u32Data=0;
5763*53ee8cc1Swenshuai.xi MS_U16 u16Data=0;
5764*53ee8cc1Swenshuai.xi MS_U8 u8Data=0, u8Data2=0;
5765*53ee8cc1Swenshuai.xi MS_U16 u16WaitCount;
5766*53ee8cc1Swenshuai.xi
5767*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_WaitCurFreqFinished+\n"));
5768*53ee8cc1Swenshuai.xi
5769*53ee8cc1Swenshuai.xi u16WaitCount=0;
5770*53ee8cc1Swenshuai.xi *u8FindNum=0;
5771*53ee8cc1Swenshuai.xi *u8Progress=0;
5772*53ee8cc1Swenshuai.xi
5773*53ee8cc1Swenshuai.xi do
5774*53ee8cc1Swenshuai.xi {
5775*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_STATE_FLAG, &u8Data); //State=BlindScan
5776*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_BLINDSCAN_CHECK, &u8Data2); //SubState=BlindScan
5777*53ee8cc1Swenshuai.xi u16WaitCount++;
5778*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_BlindScan_WaitCurFreqFinished State: 0x%x Status: 0x%x u16WaitCount:%d\n", u8Data, u8Data2, u16WaitCount));
5779*53ee8cc1Swenshuai.xi //printf("INTERN_DVBS_BlindScan_WaitCurFreqFinished State: 0x%x Status: 0x%x u16WaitCount:%d\n", u8Data, u8Data2, u16WaitCount);
5780*53ee8cc1Swenshuai.xi
5781*53ee8cc1Swenshuai.xi MsOS_DelayTask(1);
5782*53ee8cc1Swenshuai.xi }while(((u8Data!=17)||(u8Data2!=0xff))&&(u16WaitCount<INTERN_DVBS_DEMOD_WAIT_TIMEOUT));//E_DMD_S2_STATE_FLAG
5783*53ee8cc1Swenshuai.xi
5784*53ee8cc1Swenshuai.xi
5785*53ee8cc1Swenshuai.xi
5786*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DUMMY_REG_2, &u8Data);
5787*53ee8cc1Swenshuai.xi u16Data=u8Data;
5788*53ee8cc1Swenshuai.xi
5789*53ee8cc1Swenshuai.xi
5790*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_WaitCurFreqFinished OuterCheckStatus:0x%x\n", u16Data));
5791*53ee8cc1Swenshuai.xi
5792*53ee8cc1Swenshuai.xi if (u16WaitCount>=INTERN_DVBS_DEMOD_WAIT_TIMEOUT)
5793*53ee8cc1Swenshuai.xi {
5794*53ee8cc1Swenshuai.xi status=false;
5795*53ee8cc1Swenshuai.xi printf("Debug blind scan wait finished time out!!!!\n");
5796*53ee8cc1Swenshuai.xi }
5797*53ee8cc1Swenshuai.xi else
5798*53ee8cc1Swenshuai.xi {
5799*53ee8cc1Swenshuai.xi
5800*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SUBSTATE_FLAG, &u8Data);//SubState
5801*53ee8cc1Swenshuai.xi if (u8Data==0)
5802*53ee8cc1Swenshuai.xi {
5803*53ee8cc1Swenshuai.xi
5804*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE13L, &u8Data);
5805*53ee8cc1Swenshuai.xi u32Data=u8Data;
5806*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE12H, &u8Data);
5807*53ee8cc1Swenshuai.xi u32Data=(u32Data<<8)|u8Data;
5808*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE12L, &u8Data);
5809*53ee8cc1Swenshuai.xi u32Data=(u32Data<<8)|u8Data;
5810*53ee8cc1Swenshuai.xi _u16ChannelInfoArray[0][_u16ChannelInfoIndex]=((u32Data+500)/1000);
5811*53ee8cc1Swenshuai.xi _u16LockedCenterFreq=((u32Data+500)/1000); //Center Freq
5812*53ee8cc1Swenshuai.xi
5813*53ee8cc1Swenshuai.xi
5814*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14H, &u8Data);
5815*53ee8cc1Swenshuai.xi u16Data=u8Data;
5816*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14L, &u8Data);
5817*53ee8cc1Swenshuai.xi u16Data=(u16Data<<8)|u8Data;
5818*53ee8cc1Swenshuai.xi _u16ChannelInfoArray[1][_u16ChannelInfoIndex]=(u16Data);//Symbol Rate
5819*53ee8cc1Swenshuai.xi _u16LockedSymbolRate=u16Data;
5820*53ee8cc1Swenshuai.xi _u16ChannelInfoIndex++;
5821*53ee8cc1Swenshuai.xi *u8FindNum=_u16ChannelInfoIndex;
5822*53ee8cc1Swenshuai.xi //printf("claire debug blind scan: find TP frequency %d SR %d index %d\n",_u16LockedCenterFreq,_u16LockedSymbolRate,_u16ChannelInfoIndex);
5823*53ee8cc1Swenshuai.xi
5824*53ee8cc1Swenshuai.xi
5825*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE15H, &u8Data);
5826*53ee8cc1Swenshuai.xi u16Data=u8Data;
5827*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE15L, &u8Data);
5828*53ee8cc1Swenshuai.xi u16Data=(u16Data<<8)|u8Data; //Center_Freq_Offset_Locked
5829*53ee8cc1Swenshuai.xi if (u16Data*1000 >= 0x8000)
5830*53ee8cc1Swenshuai.xi {
5831*53ee8cc1Swenshuai.xi u16Data=0x10000- u16Data*1000;
5832*53ee8cc1Swenshuai.xi _s16CurrentCFO=-1*u16Data/1000;
5833*53ee8cc1Swenshuai.xi }
5834*53ee8cc1Swenshuai.xi else
5835*53ee8cc1Swenshuai.xi {
5836*53ee8cc1Swenshuai.xi _s16CurrentCFO=u16Data;
5837*53ee8cc1Swenshuai.xi }
5838*53ee8cc1Swenshuai.xi
5839*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE16H, &u8Data);
5840*53ee8cc1Swenshuai.xi u16Data=u8Data;
5841*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE16L, &u8Data);
5842*53ee8cc1Swenshuai.xi u16Data=(u16Data<<8)|u8Data;
5843*53ee8cc1Swenshuai.xi _u16CurrentStepSize=u16Data; //Tuner_Frequency_Step
5844*53ee8cc1Swenshuai.xi
5845*53ee8cc1Swenshuai.xi
5846*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE18H, &u8Data);
5847*53ee8cc1Swenshuai.xi u16Data=u8Data;
5848*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE18L, &u8Data);
5849*53ee8cc1Swenshuai.xi u16Data=(u16Data<<8)|u8Data;
5850*53ee8cc1Swenshuai.xi _u16PreLockedHB=u16Data; //Pre_Scanned_HB
5851*53ee8cc1Swenshuai.xi
5852*53ee8cc1Swenshuai.xi
5853*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE19H, &u8Data);
5854*53ee8cc1Swenshuai.xi u16Data=u8Data;
5855*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE19L, &u8Data);
5856*53ee8cc1Swenshuai.xi u16Data=(u16Data<<8)|u8Data;
5857*53ee8cc1Swenshuai.xi _u16PreLockedLB=u16Data; //Pre_Scanned_LB
5858*53ee8cc1Swenshuai.xi
5859*53ee8cc1Swenshuai.xi
5860*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("Current Locked CF:%d BW:%d BWH:%d BWL:%d CFO:%d Step:%d\n", _u16LockedCenterFreq, _u16LockedSymbolRate,_u16PreLockedHB, _u16PreLockedLB, _s16CurrentCFO, _u16CurrentStepSize));
5861*53ee8cc1Swenshuai.xi }
5862*53ee8cc1Swenshuai.xi else if (u8Data==1)
5863*53ee8cc1Swenshuai.xi {
5864*53ee8cc1Swenshuai.xi //printf("claire debug blind scan: no find TP\n");
5865*53ee8cc1Swenshuai.xi
5866*53ee8cc1Swenshuai.xi
5867*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_93, &u8Data);
5868*53ee8cc1Swenshuai.xi u16Data=u8Data;
5869*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_92, &u8Data);
5870*53ee8cc1Swenshuai.xi u16Data=(u16Data<<8)|u8Data;
5871*53ee8cc1Swenshuai.xi _u16NextCenterFreq=u16Data;
5872*53ee8cc1Swenshuai.xi
5873*53ee8cc1Swenshuai.xi
5874*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE12H, &u8Data);
5875*53ee8cc1Swenshuai.xi u16Data=u8Data;
5876*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE12L, &u8Data);
5877*53ee8cc1Swenshuai.xi u16Data=(u16Data<<8)|u8Data;
5878*53ee8cc1Swenshuai.xi _u16PreLockedHB=u16Data; //Pre_Scanned_HB
5879*53ee8cc1Swenshuai.xi
5880*53ee8cc1Swenshuai.xi
5881*53ee8cc1Swenshuai.xi
5882*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE13H, &u8Data);
5883*53ee8cc1Swenshuai.xi u16Data=u8Data;
5884*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE13L, &u8Data);
5885*53ee8cc1Swenshuai.xi u16Data=(u16Data<<8)|u8Data;
5886*53ee8cc1Swenshuai.xi _u16PreLockedLB=u16Data; //Pre_Scanned_LB
5887*53ee8cc1Swenshuai.xi
5888*53ee8cc1Swenshuai.xi
5889*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14H, &u8Data);
5890*53ee8cc1Swenshuai.xi u16Data=u8Data;
5891*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14L, &u8Data);
5892*53ee8cc1Swenshuai.xi u16Data=(u16Data<<8)|u8Data;
5893*53ee8cc1Swenshuai.xi _u16CurrentSymbolRate=u16Data; //Fine_Symbol_Rate
5894*53ee8cc1Swenshuai.xi
5895*53ee8cc1Swenshuai.xi
5896*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE15H, &u8Data);
5897*53ee8cc1Swenshuai.xi u16Data=u8Data;
5898*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE15L, &u8Data);
5899*53ee8cc1Swenshuai.xi u16Data=(u16Data<<8)|u8Data; //Center_Freq_Offset
5900*53ee8cc1Swenshuai.xi if (u16Data*1000 >= 0x8000)
5901*53ee8cc1Swenshuai.xi {
5902*53ee8cc1Swenshuai.xi u16Data=0x1000- u16Data*1000;
5903*53ee8cc1Swenshuai.xi _s16CurrentCFO=-1*u16Data/1000;
5904*53ee8cc1Swenshuai.xi }
5905*53ee8cc1Swenshuai.xi else
5906*53ee8cc1Swenshuai.xi {
5907*53ee8cc1Swenshuai.xi _s16CurrentCFO=u16Data;
5908*53ee8cc1Swenshuai.xi }
5909*53ee8cc1Swenshuai.xi
5910*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE16H, &u8Data);
5911*53ee8cc1Swenshuai.xi u16Data=u8Data;
5912*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE16L, &u8Data);
5913*53ee8cc1Swenshuai.xi u16Data=(u16Data<<8)|u8Data;
5914*53ee8cc1Swenshuai.xi _u16CurrentStepSize=u16Data; //Tuner_Frequency_Step
5915*53ee8cc1Swenshuai.xi
5916*53ee8cc1Swenshuai.xi
5917*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("Pre Locked CF:%d BW:%d HBW:%d LBW:%d Current CF:%d BW:%d CFO:%d Step:%d\n", _u16LockedCenterFreq, _u16LockedSymbolRate,_u16PreLockedHB, _u16PreLockedLB, _u16NextCenterFreq-_u16CurrentStepSize, _u16CurrentSymbolRate, _s16CurrentCFO, _u16CurrentStepSize));
5918*53ee8cc1Swenshuai.xi }
5919*53ee8cc1Swenshuai.xi }
5920*53ee8cc1Swenshuai.xi *u8Progress=100;
5921*53ee8cc1Swenshuai.xi
5922*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_WaitCurFreqFinished- u8Progress: %d u8FindNum %d\n", *u8Progress, *u8FindNum));
5923*53ee8cc1Swenshuai.xi
5924*53ee8cc1Swenshuai.xi return status;
5925*53ee8cc1Swenshuai.xi }
5926*53ee8cc1Swenshuai.xi
INTERN_DVBS_BlindScan_Cancel(void)5927*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_Cancel(void)
5928*53ee8cc1Swenshuai.xi {
5929*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
5930*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
5931*53ee8cc1Swenshuai.xi MS_U16 u16Data;
5932*53ee8cc1Swenshuai.xi
5933*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_Cancel+\n"));
5934*53ee8cc1Swenshuai.xi
5935*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
5936*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, &u8Data);
5937*53ee8cc1Swenshuai.xi u8Data&=0xF0;
5938*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
5939*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, u8Data);
5940*53ee8cc1Swenshuai.xi
5941*53ee8cc1Swenshuai.xi //MDrv_SYS_DMD_VD_MBX_WriteReg(0x20E1, 0x00);
5942*53ee8cc1Swenshuai.xi //MDrv_SYS_DMD_VD_MBX_WriteReg(0x20E0, 0x00);
5943*53ee8cc1Swenshuai.xi u16Data = 0x0000;
5944*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_92, (MS_U8)u16Data&0x00ff);
5945*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_93, (MS_U8)(u16Data>>8)&0x00ff);
5946*53ee8cc1Swenshuai.xi
5947*53ee8cc1Swenshuai.xi _u16TunerCenterFreq=0;
5948*53ee8cc1Swenshuai.xi _u16ChannelInfoIndex=0;
5949*53ee8cc1Swenshuai.xi
5950*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_Cancel-\n"));
5951*53ee8cc1Swenshuai.xi
5952*53ee8cc1Swenshuai.xi return status;
5953*53ee8cc1Swenshuai.xi }
5954*53ee8cc1Swenshuai.xi
INTERN_DVBS_BlindScan_End(void)5955*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_End(void)
5956*53ee8cc1Swenshuai.xi {
5957*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
5958*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
5959*53ee8cc1Swenshuai.xi MS_U16 u16Data;
5960*53ee8cc1Swenshuai.xi
5961*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_End+\n"));
5962*53ee8cc1Swenshuai.xi
5963*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
5964*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, &u8Data);
5965*53ee8cc1Swenshuai.xi u8Data&=0xF0;
5966*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
5967*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, u8Data);
5968*53ee8cc1Swenshuai.xi
5969*53ee8cc1Swenshuai.xi //MDrv_SYS_DMD_VD_MBX_WriteReg(0x20E1, 0x00);
5970*53ee8cc1Swenshuai.xi //MDrv_SYS_DMD_VD_MBX_WriteReg(0x20E0, 0x00);
5971*53ee8cc1Swenshuai.xi u16Data = 0x0000;
5972*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_92, (MS_U8)u16Data&0x00ff);
5973*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_93, (MS_U8)(u16Data>>8)&0x00ff);
5974*53ee8cc1Swenshuai.xi
5975*53ee8cc1Swenshuai.xi _u16TunerCenterFreq=0;
5976*53ee8cc1Swenshuai.xi _u16ChannelInfoIndex=0;
5977*53ee8cc1Swenshuai.xi
5978*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_End-\n"));
5979*53ee8cc1Swenshuai.xi
5980*53ee8cc1Swenshuai.xi return status;
5981*53ee8cc1Swenshuai.xi }
5982*53ee8cc1Swenshuai.xi
INTERN_DVBS_BlindScan_GetChannel(MS_U16 u16ReadStart,MS_U16 * u16TPNum,HAL_DEMOD_MS_FE_CARRIER_PARAM * pTable)5983*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_GetChannel(MS_U16 u16ReadStart,MS_U16* u16TPNum,HAL_DEMOD_MS_FE_CARRIER_PARAM *pTable)
5984*53ee8cc1Swenshuai.xi {
5985*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
5986*53ee8cc1Swenshuai.xi MS_U16 u16TableIndex;
5987*53ee8cc1Swenshuai.xi
5988*53ee8cc1Swenshuai.xi *u16TPNum=_u16ChannelInfoIndex-u16ReadStart;
5989*53ee8cc1Swenshuai.xi for(u16TableIndex = 0; u16TableIndex < (*u16TPNum); u16TableIndex++)
5990*53ee8cc1Swenshuai.xi {
5991*53ee8cc1Swenshuai.xi pTable[u16TableIndex].u32Frequency = _u16ChannelInfoArray[0][_u16ChannelInfoIndex-1];
5992*53ee8cc1Swenshuai.xi pTable[u16TableIndex].SatParam.u32SymbolRate = _u16ChannelInfoArray[1][_u16ChannelInfoIndex-1];
5993*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_GetChannel Freq: %d SymbolRate: %d\n", pTable[u16TableIndex].u32Frequency, pTable[u16TableIndex].SatParam.u32SymbolRate));
5994*53ee8cc1Swenshuai.xi }
5995*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_u16TPNum:%d\n", *u16TPNum));
5996*53ee8cc1Swenshuai.xi
5997*53ee8cc1Swenshuai.xi return status;
5998*53ee8cc1Swenshuai.xi }
5999*53ee8cc1Swenshuai.xi
INTERN_DVBS_BlindScan_GetCurrentFreq(MS_U32 * u32CurrentFeq)6000*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_GetCurrentFreq(MS_U32 *u32CurrentFeq)
6001*53ee8cc1Swenshuai.xi {
6002*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
6003*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_BlindScan_GetCurrentFreq+\n"));
6004*53ee8cc1Swenshuai.xi
6005*53ee8cc1Swenshuai.xi *u32CurrentFeq=_u16TunerCenterFreq;
6006*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_BlindScan_GetCurrentFreq-: %d\n", _u16TunerCenterFreq));
6007*53ee8cc1Swenshuai.xi return status;
6008*53ee8cc1Swenshuai.xi }
6009*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6010*53ee8cc1Swenshuai.xi // END BlindScan Function
6011*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6012*53ee8cc1Swenshuai.xi
6013*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6014*53ee8cc1Swenshuai.xi // DiSEqc Function
6015*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
INTERN_DVBS_DiSEqC_Init(void)6016*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_Init(void)
6017*53ee8cc1Swenshuai.xi {
6018*53ee8cc1Swenshuai.xi MS_BOOL status = true;
6019*53ee8cc1Swenshuai.xi MS_U8 u8Data = 0;
6020*53ee8cc1Swenshuai.xi
6021*53ee8cc1Swenshuai.xi //Clear status
6022*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xCD, &u8Data);
6023*53ee8cc1Swenshuai.xi u8Data=(u8Data|0x3E)&(~0x3E);
6024*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xCD, u8Data);
6025*53ee8cc1Swenshuai.xi
6026*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC0, 0x00);
6027*53ee8cc1Swenshuai.xi //Tone En
6028*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC0, &u8Data);
6029*53ee8cc1Swenshuai.xi u8Data=(u8Data&(~0x06))|(0x06);
6030*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC0, u8Data);
6031*53ee8cc1Swenshuai.xi
6032*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_DiSEqC_Init\n"));
6033*53ee8cc1Swenshuai.xi
6034*53ee8cc1Swenshuai.xi return status;
6035*53ee8cc1Swenshuai.xi }
6036*53ee8cc1Swenshuai.xi
INTERN_DVBS_DiSEqC_SetTone(MS_BOOL bTone1)6037*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_SetTone(MS_BOOL bTone1)
6038*53ee8cc1Swenshuai.xi {
6039*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
6040*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
6041*53ee8cc1Swenshuai.xi MS_U8 u8ReSet22k=0;
6042*53ee8cc1Swenshuai.xi
6043*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC4, 0x01);//0x62;DVBS2_DISEQC_TX1
6044*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC0, 0x4E);//0x60
6045*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xCC, 0x88);//0x66
6046*53ee8cc1Swenshuai.xi
6047*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data);//0x61
6048*53ee8cc1Swenshuai.xi u8ReSet22k=u8Data;
6049*53ee8cc1Swenshuai.xi
6050*53ee8cc1Swenshuai.xi if (bTone1==TRUE)
6051*53ee8cc1Swenshuai.xi {
6052*53ee8cc1Swenshuai.xi //Tone burst 1
6053*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC2, 0x19);
6054*53ee8cc1Swenshuai.xi _u8ToneBurstFlag=1;
6055*53ee8cc1Swenshuai.xi }
6056*53ee8cc1Swenshuai.xi else
6057*53ee8cc1Swenshuai.xi {
6058*53ee8cc1Swenshuai.xi //Tone burst 0
6059*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC2, 0x11);
6060*53ee8cc1Swenshuai.xi _u8ToneBurstFlag=2;
6061*53ee8cc1Swenshuai.xi }
6062*53ee8cc1Swenshuai.xi //DIG_DISEQC_TX_EN
6063*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xCD, &u8Data);
6064*53ee8cc1Swenshuai.xi //u8Data=u8Data&~(0x01);//Tx Disable
6065*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xCD, u8Data);
6066*53ee8cc1Swenshuai.xi
6067*53ee8cc1Swenshuai.xi MsOS_DelayTask(1);
6068*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xCD, &u8Data);//0x66 high byte DVBS2_DISEQC_TX_EN
6069*53ee8cc1Swenshuai.xi u8Data=u8Data|0x3E; //Status clear
6070*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xCD, u8Data);
6071*53ee8cc1Swenshuai.xi MsOS_DelayTask(10);
6072*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xCD, &u8Data);
6073*53ee8cc1Swenshuai.xi u8Data=u8Data&~(0x3E);
6074*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xCD, u8Data);
6075*53ee8cc1Swenshuai.xi MsOS_DelayTask(1);
6076*53ee8cc1Swenshuai.xi
6077*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xCD, &u8Data);
6078*53ee8cc1Swenshuai.xi u8Data=u8Data|0x01; //Tx Enable
6079*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xCD, u8Data);
6080*53ee8cc1Swenshuai.xi
6081*53ee8cc1Swenshuai.xi MsOS_DelayTask(30);//(100)
6082*53ee8cc1Swenshuai.xi //For ToneBurst 22k issue.
6083*53ee8cc1Swenshuai.xi u8Data=u8ReSet22k;
6084*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC2, u8Data);//0x61
6085*53ee8cc1Swenshuai.xi
6086*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_DiSEqC_SetTone:%d\n", bTone1));
6087*53ee8cc1Swenshuai.xi //MsOS_DelayTask(100);
6088*53ee8cc1Swenshuai.xi return status;
6089*53ee8cc1Swenshuai.xi }
6090*53ee8cc1Swenshuai.xi
INTERN_DVBS_DiSEqC_SetLNBOut(MS_BOOL bLow)6091*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_SetLNBOut(MS_BOOL bLow)
6092*53ee8cc1Swenshuai.xi {
6093*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
6094*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
6095*53ee8cc1Swenshuai.xi
6096*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data);
6097*53ee8cc1Swenshuai.xi if (bLow==TRUE)
6098*53ee8cc1Swenshuai.xi {
6099*53ee8cc1Swenshuai.xi u8Data=(u8Data|0x40); //13V
6100*53ee8cc1Swenshuai.xi }
6101*53ee8cc1Swenshuai.xi else
6102*53ee8cc1Swenshuai.xi {
6103*53ee8cc1Swenshuai.xi u8Data=(u8Data&(~0x40));//18V
6104*53ee8cc1Swenshuai.xi }
6105*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC2, u8Data);
6106*53ee8cc1Swenshuai.xi
6107*53ee8cc1Swenshuai.xi return status;
6108*53ee8cc1Swenshuai.xi }
6109*53ee8cc1Swenshuai.xi
INTERN_DVBS_DiSEqC_GetLNBOut(MS_BOOL * bLNBOutLow)6110*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_GetLNBOut(MS_BOOL* bLNBOutLow)
6111*53ee8cc1Swenshuai.xi {
6112*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
6113*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
6114*53ee8cc1Swenshuai.xi
6115*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data);
6116*53ee8cc1Swenshuai.xi if( (u8Data&0x40)==0x40)
6117*53ee8cc1Swenshuai.xi {
6118*53ee8cc1Swenshuai.xi * bLNBOutLow=TRUE;
6119*53ee8cc1Swenshuai.xi }
6120*53ee8cc1Swenshuai.xi else
6121*53ee8cc1Swenshuai.xi {
6122*53ee8cc1Swenshuai.xi * bLNBOutLow=FALSE;
6123*53ee8cc1Swenshuai.xi }
6124*53ee8cc1Swenshuai.xi
6125*53ee8cc1Swenshuai.xi return status;
6126*53ee8cc1Swenshuai.xi }
6127*53ee8cc1Swenshuai.xi
INTERN_DVBS_DiSEqC_Set22kOnOff(MS_BOOL b22kOn)6128*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_Set22kOnOff(MS_BOOL b22kOn)
6129*53ee8cc1Swenshuai.xi {
6130*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
6131*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
6132*53ee8cc1Swenshuai.xi
6133*53ee8cc1Swenshuai.xi //Set DiSeqC 22K
6134*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xCC, 0x44); //Set 11K-->22K
6135*53ee8cc1Swenshuai.xi
6136*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data);
6137*53ee8cc1Swenshuai.xi
6138*53ee8cc1Swenshuai.xi if (b22kOn==TRUE)
6139*53ee8cc1Swenshuai.xi {
6140*53ee8cc1Swenshuai.xi u8Data=(u8Data&0xc7);
6141*53ee8cc1Swenshuai.xi u8Data=(u8Data|0x08);
6142*53ee8cc1Swenshuai.xi }
6143*53ee8cc1Swenshuai.xi else
6144*53ee8cc1Swenshuai.xi {
6145*53ee8cc1Swenshuai.xi u8Data=(u8Data&0xc7);
6146*53ee8cc1Swenshuai.xi }
6147*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC2, u8Data);
6148*53ee8cc1Swenshuai.xi
6149*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS_DiSEqC_Set22kOnOff:%d\n", b22kOn));
6150*53ee8cc1Swenshuai.xi return status;
6151*53ee8cc1Swenshuai.xi }
6152*53ee8cc1Swenshuai.xi
INTERN_DVBS_DiSEqC_Get22kOnOff(MS_BOOL * b22kOn)6153*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_Get22kOnOff(MS_BOOL* b22kOn)
6154*53ee8cc1Swenshuai.xi {
6155*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
6156*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
6157*53ee8cc1Swenshuai.xi
6158*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data);
6159*53ee8cc1Swenshuai.xi if ((u8Data&0x38)==0x08)
6160*53ee8cc1Swenshuai.xi {
6161*53ee8cc1Swenshuai.xi *b22kOn=TRUE;
6162*53ee8cc1Swenshuai.xi }
6163*53ee8cc1Swenshuai.xi else
6164*53ee8cc1Swenshuai.xi {
6165*53ee8cc1Swenshuai.xi *b22kOn=FALSE;
6166*53ee8cc1Swenshuai.xi }
6167*53ee8cc1Swenshuai.xi
6168*53ee8cc1Swenshuai.xi return status;
6169*53ee8cc1Swenshuai.xi }
6170*53ee8cc1Swenshuai.xi
INTERN_DVBS_DiSEqC_SendCmd(MS_U8 * pCmd,MS_U8 u8CmdSize)6171*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_SendCmd(MS_U8* pCmd,MS_U8 u8CmdSize)
6172*53ee8cc1Swenshuai.xi {
6173*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
6174*53ee8cc1Swenshuai.xi MS_U8 u8Data;
6175*53ee8cc1Swenshuai.xi MS_U8 u8Index;
6176*53ee8cc1Swenshuai.xi MS_U16 u16WaitCount;
6177*53ee8cc1Swenshuai.xi /*
6178*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
6179*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, &u8Data);
6180*53ee8cc1Swenshuai.xi u8Data=(u8Data&~(0x10));
6181*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
6182*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, u8Data);
6183*53ee8cc1Swenshuai.xi */
6184*53ee8cc1Swenshuai.xi #if 0 //For Unicable command timing
6185*53ee8cc1Swenshuai.xi u16WaitCount=0;
6186*53ee8cc1Swenshuai.xi do
6187*53ee8cc1Swenshuai.xi {
6188*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_DISEQC_STATUS_FLAG, &u8Data);
6189*53ee8cc1Swenshuai.xi //printf(">>> INTERN_DVBS_DiSEqC_SendCmd DiSEqC Status = 0x%x <<<\n", u8Data);
6190*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
6191*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, &u8Data);
6192*53ee8cc1Swenshuai.xi MsOS_DelayTask(1);
6193*53ee8cc1Swenshuai.xi u16WaitCount++;
6194*53ee8cc1Swenshuai.xi }while(((u8Data&0x10)==0x10)&&(u16WaitCount < INTERN_DVBS_DEMOD_WAIT_TIMEOUT));
6195*53ee8cc1Swenshuai.xi
6196*53ee8cc1Swenshuai.xi if (u16WaitCount >= INTERN_DVBS_DEMOD_WAIT_TIMEOUT)
6197*53ee8cc1Swenshuai.xi {
6198*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS DiSEqC Send Command Busy!!!\n"));
6199*53ee8cc1Swenshuai.xi return FALSE;
6200*53ee8cc1Swenshuai.xi }
6201*53ee8cc1Swenshuai.xi #endif
6202*53ee8cc1Swenshuai.xi
6203*53ee8cc1Swenshuai.xi //u16Address=0x0BC4;
6204*53ee8cc1Swenshuai.xi for (u8Index=0; u8Index < u8CmdSize; u8Index++)
6205*53ee8cc1Swenshuai.xi {
6206*53ee8cc1Swenshuai.xi u8Data=*(pCmd+u8Index);
6207*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC4 + u8Index, u8Data);//#define DVBS2_DISEQC_TX1 (_REG_DVBS2(0x62)+0)//[7:0]
6208*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("=============INTERN_DVBS_DiSEqC_SendCmd(Demod1) = 0x%X\n",u8Data));
6209*53ee8cc1Swenshuai.xi }
6210*53ee8cc1Swenshuai.xi
6211*53ee8cc1Swenshuai.xi //set DiSEqC Tx Length, Odd Enable, Tone Burst Mode
6212*53ee8cc1Swenshuai.xi u8Data=((u8CmdSize-1)&0x07)|0x40;
6213*53ee8cc1Swenshuai.xi if (_u8ToneBurstFlag==1)
6214*53ee8cc1Swenshuai.xi {
6215*53ee8cc1Swenshuai.xi u8Data|=0x80;//0x20;
6216*53ee8cc1Swenshuai.xi }
6217*53ee8cc1Swenshuai.xi else if (_u8ToneBurstFlag==2)
6218*53ee8cc1Swenshuai.xi {
6219*53ee8cc1Swenshuai.xi u8Data|=0x20;//0x80;
6220*53ee8cc1Swenshuai.xi }
6221*53ee8cc1Swenshuai.xi _u8ToneBurstFlag=0;
6222*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_DMDTOP_DBG_8, u8Data);
6223*53ee8cc1Swenshuai.xi
6224*53ee8cc1Swenshuai.xi //add this only for check mailbox R/W
6225*53ee8cc1Swenshuai.xi #if 1
6226*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" Write into E_DMD_S2_MB_DMDTOP_DBG_8 = 0x%X!!!\n",u8Data));
6227*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_8, &u8Data);
6228*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf(" Read from E_DMD_S2_MB_DMDTOP_DBG_8 = 0x%X!!!\n",u8Data));
6229*53ee8cc1Swenshuai.xi #endif
6230*53ee8cc1Swenshuai.xi
6231*53ee8cc1Swenshuai.xi MsOS_DelayTask(25);//MsOS_DelayTask(10);
6232*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);//#define TOP_WR_DBG_90 (_REG_DMDTOP(0x3A)+0)
6233*53ee8cc1Swenshuai.xi //u8Data=u8Data|0x10;
6234*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data|0x10);//enable DiSEqC_Data_Tx
6235*53ee8cc1Swenshuai.xi //MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data); DBG_INTERN_DVBS(printf(">>>+++ INTERN_DVBS_DiSEqC_SendCmd DiSEqC_Init_Mode = 0x%X +++<<<\n",u8Data));
6236*53ee8cc1Swenshuai.xi //MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_DISEQC_STATUS_FLAG, &u8Data); DBG_INTERN_DVBS(printf(">>>+++ INTERN_DVBS_DiSEqC_SendCmd DiSEqC_State_Flag = %d +++<<<\n",u8Data));
6237*53ee8cc1Swenshuai.xi
6238*53ee8cc1Swenshuai.xi #if 1 //For Unicable command timing???
6239*53ee8cc1Swenshuai.xi u16WaitCount=0;
6240*53ee8cc1Swenshuai.xi do
6241*53ee8cc1Swenshuai.xi {
6242*53ee8cc1Swenshuai.xi //MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data); DBG_INTERN_DVBS(printf(">>>*** INTERN_DVBS_DiSEqC_SendCmd DiSEqC_Init_Mode = 0x%X ***<<<\n",u8Data));
6243*53ee8cc1Swenshuai.xi //MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_DISEQC_STATUS_FLAG, &u8Data); DBG_INTERN_DVBS(printf(">>>*** INTERN_DVBS_DiSEqC_SendCmd DiSEqC_State_Flag = %d ***<<<\n",u8Data));
6244*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
6245*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, &u8Data);
6246*53ee8cc1Swenshuai.xi MsOS_DelayTask(1);
6247*53ee8cc1Swenshuai.xi u16WaitCount++;
6248*53ee8cc1Swenshuai.xi }while(((u8Data&0x10)==0x10)&&(u16WaitCount < INTERN_DVBS_DEMOD_WAIT_TIMEOUT)) ;
6249*53ee8cc1Swenshuai.xi
6250*53ee8cc1Swenshuai.xi if (u16WaitCount >= INTERN_DVBS_DEMOD_WAIT_TIMEOUT)
6251*53ee8cc1Swenshuai.xi {
6252*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS DiSEqC Send Command Busy!!!\n"));
6253*53ee8cc1Swenshuai.xi return FALSE;
6254*53ee8cc1Swenshuai.xi }
6255*53ee8cc1Swenshuai.xi else
6256*53ee8cc1Swenshuai.xi {
6257*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("INTERN_DVBS DiSEqC Send Command Success!!!\n"));
6258*53ee8cc1Swenshuai.xi return TRUE;
6259*53ee8cc1Swenshuai.xi }
6260*53ee8cc1Swenshuai.xi
6261*53ee8cc1Swenshuai.xi
6262*53ee8cc1Swenshuai.xi #endif
6263*53ee8cc1Swenshuai.xi //MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data); printf(">>>--- INTERN_DVBS_DiSEqC_SendCmd DiSEqC_Init_Mode = 0x%X ---<<<\n",u8Data);
6264*53ee8cc1Swenshuai.xi //MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_DISEQC_STATUS_FLAG, &u8Data); printf(">>>--- INTERN_DVBS_DiSEqC_SendCmd DiSEqC_State_Flag = %d ---<<<\n",u8Data+1);
6265*53ee8cc1Swenshuai.xi
6266*53ee8cc1Swenshuai.xi return status;
6267*53ee8cc1Swenshuai.xi }
6268*53ee8cc1Swenshuai.xi
INTERN_DVBS_DiSEqC_SetTxToneMode(MS_BOOL bTxTone22kOff)6269*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_SetTxToneMode(MS_BOOL bTxTone22kOff)
6270*53ee8cc1Swenshuai.xi {
6271*53ee8cc1Swenshuai.xi MS_BOOL status=TRUE;
6272*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
6273*53ee8cc1Swenshuai.xi
6274*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xD7, &u8Data);//h006b h006b 15 15 reg_diseqc_tx_tone_mode
6275*53ee8cc1Swenshuai.xi if (bTxTone22kOff==TRUE)
6276*53ee8cc1Swenshuai.xi {
6277*53ee8cc1Swenshuai.xi u8Data=(u8Data|0x80); //1: without 22K.
6278*53ee8cc1Swenshuai.xi }
6279*53ee8cc1Swenshuai.xi else
6280*53ee8cc1Swenshuai.xi {
6281*53ee8cc1Swenshuai.xi u8Data=(u8Data&(~0x80)); //0: with 22K.
6282*53ee8cc1Swenshuai.xi }
6283*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xD7, u8Data);
6284*53ee8cc1Swenshuai.xi
6285*53ee8cc1Swenshuai.xi return status;
6286*53ee8cc1Swenshuai.xi }
6287*53ee8cc1Swenshuai.xi
INTERN_DVBS_UnicableAGCCheckPower(MS_BOOL pbAGCCheckPower)6288*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_UnicableAGCCheckPower(MS_BOOL pbAGCCheckPower)
6289*53ee8cc1Swenshuai.xi {
6290*53ee8cc1Swenshuai.xi //MS_BOOL status = TRUE;
6291*53ee8cc1Swenshuai.xi MS_U8 u8Data=0;
6292*53ee8cc1Swenshuai.xi
6293*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, 0x00);
6294*53ee8cc1Swenshuai.xi
6295*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
6296*53ee8cc1Swenshuai.xi u8Data &= 0xFE;//clean bit0
6297*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
6298*53ee8cc1Swenshuai.xi
6299*53ee8cc1Swenshuai.xi if (pbAGCCheckPower == FALSE)//0
6300*53ee8cc1Swenshuai.xi {
6301*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, &u8Data);
6302*53ee8cc1Swenshuai.xi u8Data &= 0xFE;//clean bit0
6303*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, u8Data);
6304*53ee8cc1Swenshuai.xi //printf("CMD=MS_FALSE==============================\n");
6305*53ee8cc1Swenshuai.xi }
6306*53ee8cc1Swenshuai.xi else
6307*53ee8cc1Swenshuai.xi {
6308*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, &u8Data);
6309*53ee8cc1Swenshuai.xi u8Data |= 0x01; //bit1=1
6310*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, u8Data);
6311*53ee8cc1Swenshuai.xi //printf("CMD=MS_TRUE==============================\n");
6312*53ee8cc1Swenshuai.xi }
6313*53ee8cc1Swenshuai.xi
6314*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
6315*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, &u8Data);
6316*53ee8cc1Swenshuai.xi u8Data &= 0xF0;
6317*53ee8cc1Swenshuai.xi u8Data |= 0x01;
6318*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
6319*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, u8Data);
6320*53ee8cc1Swenshuai.xi MsOS_DelayTask(500);
6321*53ee8cc1Swenshuai.xi
6322*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, &u8Data);
6323*53ee8cc1Swenshuai.xi u8Data &= 0x80; //Read bit7
6324*53ee8cc1Swenshuai.xi if (u8Data == 0x80)
6325*53ee8cc1Swenshuai.xi {
6326*53ee8cc1Swenshuai.xi u8Data = 0x00;
6327*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, u8Data);
6328*53ee8cc1Swenshuai.xi u8Data = 0x00;
6329*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, u8Data);
6330*53ee8cc1Swenshuai.xi return TRUE;
6331*53ee8cc1Swenshuai.xi }
6332*53ee8cc1Swenshuai.xi else
6333*53ee8cc1Swenshuai.xi {
6334*53ee8cc1Swenshuai.xi u8Data = 0x00;
6335*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, u8Data);
6336*53ee8cc1Swenshuai.xi u8Data = 0x00;
6337*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, u8Data);
6338*53ee8cc1Swenshuai.xi return FALSE;
6339*53ee8cc1Swenshuai.xi }
6340*53ee8cc1Swenshuai.xi }
6341*53ee8cc1Swenshuai.xi
6342*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6343*53ee8cc1Swenshuai.xi // END DiSEqc Function
6344*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6345*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6346*53ee8cc1Swenshuai.xi // R/W Function
6347*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
INTERN_DVBS_WriteReg2bytes(MS_U16 u16Addr,MS_U16 u16Data)6348*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_WriteReg2bytes(MS_U16 u16Addr, MS_U16 u16Data)
6349*53ee8cc1Swenshuai.xi {
6350*53ee8cc1Swenshuai.xi MS_BOOL bRet= TRUE;
6351*53ee8cc1Swenshuai.xi bRet &= MDrv_SYS_DMD_VD_MBX_WriteReg(u16Addr, (MS_U8)u16Data&0x00ff);
6352*53ee8cc1Swenshuai.xi bRet &= MDrv_SYS_DMD_VD_MBX_WriteReg(u16Addr + 0x0001, (MS_U8)(u16Data>>8)&0x00ff);
6353*53ee8cc1Swenshuai.xi return bRet;
6354*53ee8cc1Swenshuai.xi }
6355*53ee8cc1Swenshuai.xi
INTERN_DVBS_ReadReg2bytes(MS_U16 u16Addr,MS_U16 * pu16Data)6356*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_ReadReg2bytes(MS_U16 u16Addr, MS_U16 *pu16Data)
6357*53ee8cc1Swenshuai.xi {
6358*53ee8cc1Swenshuai.xi MS_BOOL bRet= TRUE;
6359*53ee8cc1Swenshuai.xi MS_U8 u8Data =0;
6360*53ee8cc1Swenshuai.xi MS_U16 u16Data =0;
6361*53ee8cc1Swenshuai.xi
6362*53ee8cc1Swenshuai.xi bRet &= MDrv_SYS_DMD_VD_MBX_ReadReg(u16Addr + 0x0001, &u8Data);
6363*53ee8cc1Swenshuai.xi u16Data = u8Data;
6364*53ee8cc1Swenshuai.xi bRet &= MDrv_SYS_DMD_VD_MBX_ReadReg(u16Addr, &u8Data);
6365*53ee8cc1Swenshuai.xi *pu16Data = (u16Data<<8)|u8Data;
6366*53ee8cc1Swenshuai.xi
6367*53ee8cc1Swenshuai.xi return bRet;
6368*53ee8cc1Swenshuai.xi }
6369*53ee8cc1Swenshuai.xi
6370*53ee8cc1Swenshuai.xi //Frontend Freeze
INTERN_DVBS_DTV_FrontendSetFreeze(void)6371*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DTV_FrontendSetFreeze(void)
6372*53ee8cc1Swenshuai.xi {
6373*53ee8cc1Swenshuai.xi MS_BOOL bRet= TRUE;
6374*53ee8cc1Swenshuai.xi MS_U16 u16Address;
6375*53ee8cc1Swenshuai.xi MS_U16 u16Data=0;
6376*53ee8cc1Swenshuai.xi
6377*53ee8cc1Swenshuai.xi u16Address = (FRONTEND_FREEZE_DUMP>>16)&0xffff;
6378*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6379*53ee8cc1Swenshuai.xi u16Data|=(FRONTEND_FREEZE_DUMP&0xffff);
6380*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
6381*53ee8cc1Swenshuai.xi
6382*53ee8cc1Swenshuai.xi return bRet;
6383*53ee8cc1Swenshuai.xi }
6384*53ee8cc1Swenshuai.xi
INTERN_DVBS_DTV_FrontendUnFreeze(void)6385*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DTV_FrontendUnFreeze(void)
6386*53ee8cc1Swenshuai.xi {
6387*53ee8cc1Swenshuai.xi MS_BOOL bRet= TRUE;
6388*53ee8cc1Swenshuai.xi MS_U16 u16Address;
6389*53ee8cc1Swenshuai.xi MS_U16 u16Data=0;
6390*53ee8cc1Swenshuai.xi
6391*53ee8cc1Swenshuai.xi u16Address = (FRONTEND_FREEZE_DUMP>>16)&0xffff;
6392*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6393*53ee8cc1Swenshuai.xi u16Data&=~(FRONTEND_FREEZE_DUMP&0xffff);
6394*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
6395*53ee8cc1Swenshuai.xi
6396*53ee8cc1Swenshuai.xi return bRet;
6397*53ee8cc1Swenshuai.xi }
6398*53ee8cc1Swenshuai.xi
6399*53ee8cc1Swenshuai.xi //Inner Freeze
INTERN_DVBS_DTV_InnerSetFreeze(void)6400*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DTV_InnerSetFreeze(void)
6401*53ee8cc1Swenshuai.xi {
6402*53ee8cc1Swenshuai.xi MS_BOOL bRet= TRUE;
6403*53ee8cc1Swenshuai.xi MS_U16 u16Address;
6404*53ee8cc1Swenshuai.xi MS_U16 u16Data=0;
6405*53ee8cc1Swenshuai.xi
6406*53ee8cc1Swenshuai.xi u16Address = (INNER_FREEZE_DUMP>>16)&0xffff;
6407*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6408*53ee8cc1Swenshuai.xi u16Data|=(INNER_FREEZE_DUMP&0xffff);
6409*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
6410*53ee8cc1Swenshuai.xi
6411*53ee8cc1Swenshuai.xi return bRet;
6412*53ee8cc1Swenshuai.xi }
6413*53ee8cc1Swenshuai.xi
INTERN_DVBS_DTV_InnerUnFreeze(void)6414*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DTV_InnerUnFreeze(void)
6415*53ee8cc1Swenshuai.xi {
6416*53ee8cc1Swenshuai.xi MS_BOOL bRet= TRUE;
6417*53ee8cc1Swenshuai.xi MS_U16 u16Address;
6418*53ee8cc1Swenshuai.xi MS_U16 u16Data=0;
6419*53ee8cc1Swenshuai.xi
6420*53ee8cc1Swenshuai.xi u16Address = (INNER_FREEZE_DUMP>>16)&0xffff;
6421*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6422*53ee8cc1Swenshuai.xi u16Data&=~(INNER_FREEZE_DUMP&0xffff);
6423*53ee8cc1Swenshuai.xi bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
6424*53ee8cc1Swenshuai.xi
6425*53ee8cc1Swenshuai.xi return bRet;
6426*53ee8cc1Swenshuai.xi }
6427*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6428*53ee8cc1Swenshuai.xi // END R/W Function
6429*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6430*53ee8cc1Swenshuai.xi
6431*53ee8cc1Swenshuai.xi
6432*53ee8cc1Swenshuai.xi /***********************************************************************************
6433*53ee8cc1Swenshuai.xi Subject: read register
6434*53ee8cc1Swenshuai.xi Function: MDrv_1210_IIC_Bypass_Mode
6435*53ee8cc1Swenshuai.xi Parmeter:
6436*53ee8cc1Swenshuai.xi Return:
6437*53ee8cc1Swenshuai.xi Remark:
6438*53ee8cc1Swenshuai.xi ************************************************************************************/
6439*53ee8cc1Swenshuai.xi //void MDrv_1210_IIC_Bypass_Mode(MS_BOOL enable)
6440*53ee8cc1Swenshuai.xi //{
6441*53ee8cc1Swenshuai.xi // UNUSED(enable);
6442*53ee8cc1Swenshuai.xi // if (enable)
6443*53ee8cc1Swenshuai.xi // MDrv_SYS_DMD_VD_MBX_WriteReg(0x8010, 0x10); // IIC by-pass mode on
6444*53ee8cc1Swenshuai.xi // else
6445*53ee8cc1Swenshuai.xi // MDrv_SYS_DMD_VD_MBX_WriteReg(0x8010, 0x00); // IIC by-pass mode off
6446*53ee8cc1Swenshuai.xi //}
6447*53ee8cc1Swenshuai.xi
6448