⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmbsl10023.c

📁 Cu1216 解调器驱动
💻 C
📖 第 1 页 / 共 5 页
字号:

                // set the tuner Low pass filter width selection
	            g10023Instance[demodUnit].tunerFunc.setCfgFunc(
                    g10023Instance[demodUnit].eTunerUnit,
                    tmhalFETunerBandwidth , 7000000);
            }
            else
            {
                // DVB mode
                g10023Instance[demodUnit].sConfig.bPLL_M_Factor = PLLMFACTOR_DVB_DEF;
                g10023Instance[demodUnit].sConfig.bPLL_N_Factor = PLLNFACTOR_DVB_DEF;
                g10023Instance[demodUnit].sConfig.bPLL_P_Factor = PLLPFACTOR_DVB_DEF;
                g10023Instance[demodUnit].sConfig.bBERdepth     = BERDEPTH_DVB_DEF;

                g10023Instance[demodUnit].sConfig.uTUN_IF       = IF_DVB_DEF;

					if (g10023Instance[demodUnit].sConfig.uXtalFreq == CU1216_XTALL_FREQ_28)
					{
						g10023Instance[demodUnit].sConfig.bPLL_M_Factor = CU1216_PLLMFACTOR_DVB_DEF;
						g10023Instance[demodUnit].sConfig.bPLL_N_Factor = CU1216_PLLNFACTOR_DVB_DEF;
						g10023Instance[demodUnit].sConfig.bPLL_P_Factor = CU1216_PLLPFACTOR_DVB_DEF;
					}


                // set the tuner Low pass filter width selection
	            g10023Instance[demodUnit].tunerFunc.setCfgFunc(
                    g10023Instance[demodUnit].eTunerUnit,
                    tmhalFETunerBandwidth , 9000000);
            }
            break;
		case XTALL:
            g10023Instance[demodUnit].sConfig.uXtalFreq = uValue;
			break;
		case PLLMFACTOR:
            g10023Instance[demodUnit].sConfig.bPLL_M_Factor = (UInt8)uValue;
			break;
		case PLLNFACTOR:
            g10023Instance[demodUnit].sConfig.bPLL_N_Factor = (UInt8)uValue;
			break;
		case PLLPFACTOR:
            g10023Instance[demodUnit].sConfig.bPLL_P_Factor = (UInt8)uValue;
			break;
        case FSAMPLING:
            g10023Instance[demodUnit].sConfig.bFsampling = (UInt8)uValue;
			break;
		case IFMAX:
            g10023Instance[demodUnit].sConfig.bIFMax = (UInt8)uValue;
			break;
		case IFMIN:
            g10023Instance[demodUnit].sConfig.bIFMin = (UInt8)uValue;
			break;
		case TUNMAX:
            g10023Instance[demodUnit].sConfig.bTUNMax = (UInt8)uValue;
			break;
		case TUNMIN:
            g10023Instance[demodUnit].sConfig.bTUNMin = (UInt8)uValue;
			break;
		case AGCTRESHOLD:
            g10023Instance[demodUnit].sConfig.bAGCtreshold = (UInt8)uValue;
			break;
		case EQUALTYPE:
            g10023Instance[demodUnit].sConfig.bEqualType = (UInt8)uValue;
            break;
        case POLAPWM1:
            g10023Instance[demodUnit].sConfig.bPolaPWM1 = (UInt8)uValue;
            break;
        case POLAPWM2:
            g10023Instance[demodUnit].sConfig.bPolaPWM2 = (UInt8)uValue;
			break;
		case BERDEPTH:
            g10023Instance[demodUnit].sConfig.bBERdepth = (UInt8)uValue;
            break;
        case BERWINDOW:
            g10023Instance[demodUnit].sConfig.uBERwindow = uValue;
			break;
		case CLKOFFSETRANGE:
            g10023Instance[demodUnit].sConfig.bClkOffsetRange = (UInt8)uValue;
			break;
		case IQSWAP:
            g10023Instance[demodUnit].sConfig.bTUN_IQSwap = (UInt8)uValue;
			break;
		case IF:
            g10023Instance[demodUnit].sConfig.uTUN_IF = uValue;
			break;
		case OCLK1:
            g10023Instance[demodUnit].sConfig.bOUT_OClk1 = (UInt8)uValue;
			break;
		case PARASER1:
            g10023Instance[demodUnit].sConfig.bOUT_bParaSer1 = (UInt8)uValue;
			break;
		case MSBFIRST1:
            g10023Instance[demodUnit].sConfig.bOUT_bMSBFirst1 = (UInt8)uValue;
			break;
        case MODEABC1:
            g10023Instance[demodUnit].sConfig.bOUT_ModeABC1 = (UInt8)uValue;
			break;
		case PARADIV1:
            g10023Instance[demodUnit].sConfig.bOUT_ParaDiv1 = (UInt8)uValue;
			break;
		case OCLK2:
            g10023Instance[demodUnit].sConfig.bOUT_OClk2 = (UInt8)uValue;
			break;
		case MSBFIRST2:
            g10023Instance[demodUnit].sConfig.bOUT_bMSBFirst2 = (UInt8)uValue;
            break;
        case SWDYN:
            g10023Instance[demodUnit].sConfig.bSwDyn = (UInt8)uValue;
            break;
        case SWSTEP:
            g10023Instance[demodUnit].sConfig.bSwStep = (UInt8)uValue;
			break;

        	// backdoor functions
		case FEINIT:
			// init
            Tda10023WriteInit(&g10023Instance[demodUnit]);
			break;

		case SWITCH:
            		if (uValue)
                		// tuner is accessible
                g10023Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10023Instance[demodUnit].uDemodHwAdd, 
                    TDA10023_TEST_IND, TDA10023_TEST_BYPIIC_BIT, 
                    TDA10023_TEST_BYPIIC_BIT);
            		else
			{
		                // tuner is disconnected from the I2C bus
                g10023Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10023Instance[demodUnit].uDemodHwAdd, 
                    TDA10023_TEST_IND, TDA10023_TEST_BYPIIC_BIT, 0);
			}
            		break;

        case JQAMMODE:
            g10023Instance[demodUnit].systemFunc.SY_WriteBit(
                g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                TDA10023_JQAM_MODE_IND, TDA10023_JQAM_MODE_JQAM_MODE_MSK, uValue);
            break;

        case JQAMREQTS:
            puBytes[0] = (UInt8)(uValue >> 8);
            puBytes[1] = (UInt8)(uValue);
            g10023Instance[demodUnit].systemFunc.SY_Write(
                g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                TDA10023_REQ_TS_IDH_IND, 2, puBytes);
            break;

        case JQAMREQON:
            puBytes[0] = (UInt8)(uValue >> 8);
            puBytes[1] = (UInt8)(uValue);
            g10023Instance[demodUnit].systemFunc.SY_Write(
                g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                TDA10023_REQ_ON_IDH_IND, 2, puBytes);
            break;

        	default:
            		return TM_ERR_BAD_PARAMETER;
    }

	// start algo
    g10023Instance[demodUnit].sApiFlags.iStartAlgo = True;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023GetConfig:
//
// DESCRIPTION: Get the config of the 10023
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TM_ERR_BAD_PARAMETER
//				TM_OK
//
// NOTES:       This function can be removed if needed
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023GetConfig(
    tmUnitSelect_t     demodUnit,		//  I: Demod unit number
    UInt32             uItemId,			//  I: Identifier of the item to modify
    UInt32*            puValue			//  O: Value to set for the config item
    )
{
    UInt32 uByte;
    UInt32 puBytes[4];
    int i;

    
    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10023_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10023Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Implementation
    //----------------------
    // get the value
    switch((tm10023cfgIndex_t)uItemId)
    {
        // Board config
//        case BOARD:
//            *puValue = g10023Instance[demodUnit].sConfig.uBoard;
//            break;
		case STANDARD:
			*puValue = tmhalFEStandardDVBC;
			break;
        case DVBMCNS:
            *puValue = g10023Instance[demodUnit].sConfig.bModeDvbMcns;
            break;
		case XTALL:
            *puValue = g10023Instance[demodUnit].sConfig.uXtalFreq;
			break;
		case PLLMFACTOR:
            *puValue = g10023Instance[demodUnit].sConfig.bPLL_M_Factor;
			break;
		case PLLNFACTOR:
            *puValue = g10023Instance[demodUnit].sConfig.bPLL_N_Factor;
			break;
		case PLLPFACTOR:
            *puValue = g10023Instance[demodUnit].sConfig.bPLL_P_Factor;
			break;
        case FSAMPLING:
            *puValue = g10023Instance[demodUnit].sConfig.bFsampling;
			break;
		case IFMAX:
            *puValue = g10023Instance[demodUnit].sConfig.bIFMax;
			break;
		case IFMIN:
            *puValue = g10023Instance[demodUnit].sConfig.bIFMin;
			break;
		case TUNMAX:
            *puValue = g10023Instance[demodUnit].sConfig.bTUNMax;
			break;
		case TUNMIN:
            *puValue = g10023Instance[demodUnit].sConfig.bTUNMin;
			break;
		case AGCTRESHOLD:
            *puValue = g10023Instance[demodUnit].sConfig.bAGCtreshold;
			break;
		case EQUALTYPE:
            *puValue = g10023Instance[demodUnit].sConfig.bEqualType;
            break;
        case POLAPWM1:
            *puValue = g10023Instance[demodUnit].sConfig.bPolaPWM1;
            break;
        case POLAPWM2:
            *puValue = g10023Instance[demodUnit].sConfig.bPolaPWM2;
			break;
		case BERDEPTH:
            *puValue = g10023Instance[demodUnit].sConfig.bBERdepth;
            break;
        case BERWINDOW:
            *puValue = g10023Instance[demodUnit].sConfig.uBERwindow;
			break;
		case CLKOFFSETRANGE:
            *puValue = g10023Instance[demodUnit].sConfig.bClkOffsetRange;
			break;
		case IQSWAP:
            *puValue = g10023Instance[demodUnit].sConfig.bTUN_IQSwap;
			break;
		case IF:
            *puValue = g10023Instance[demodUnit].sConfig.uTUN_IF;
			break;
		case OCLK1:
            *puValue = g10023Instance[demodUnit].sConfig.bOUT_OClk1;
			break;
		case PARASER1:
            *puValue = g10023Instance[demodUnit].sConfig.bOUT_bParaSer1;
			break;
		case MSBFIRST1:
            *puValue = g10023Instance[demodUnit].sConfig.bOUT_bMSBFirst1;
			break;
        case MODEABC1:
            *puValue = g10023Instance[demodUnit].sConfig.bOUT_ModeABC1;
			break;
		case PARADIV1:
            *puValue = g10023Instance[demodUnit].sConfig.bOUT_ParaDiv1;
			break;
		case OCLK2:
            *puValue = g10023Instance[demodUnit].sConfig.bOUT_OClk2;
			break;
		case MSBFIRST2:
            *puValue = g10023Instance[demodUnit].sConfig.bOUT_bMSBFirst2;
            break;
        case SWDYN:
            *puValue = g10023Instance[demodUnit].sConfig.bSwDyn;
            break;
        case SWSTEP:
            *puValue = g10023Instance[demodUnit].sConfig.bSwStep;
			break;

        // backdoor functions
		case IDENTITY:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd,
                TDA10023_IDENTITY_IND, 1, &uByte);
            if (uByte != TDA10023_IDENTITY_DEF)
                *puValue = False;
            else
                *puValue = True;
            break;

        case READSYNC:
            if(g10023Instance[demodUnit].sConfig.bModeDvbMcns)
            {
                // MCNS mode
                // MPEGLCK and FRAMELCK
                g10023Instance[demodUnit].systemFunc.SY_Read(
                    g10023Instance[demodUnit].uDemodHwAdd,
                    TDA10023_STATUS_MCNS_IND, 1, &uByte);

                // shift register to the left in order to have an equivalent mapping as in DVB mode
                *puValue = (uByte & (TDA10023_STATUS_MCNS_MPEGLCK_BIT | TDA10023_STATUS_MCNS_FRAMELCK_BIT)) << 1;

                // CARLOCK
                g10023Instance[demodUnit].systemFunc.SY_Read(
                    g10023Instance[demodUnit].uDemodHwAdd,
                    TDA10023_STATUS_IND, 1, &uByte);

                *puValue |= (uByte & TDA10023_STATUS_CARLOCK_BIT);

            }
            else
            {
                // DVB mode
                g10023Instance[demodUnit].systemFunc.SY_Read(
                    g10023Instance[demodUnit].uDemodHwAdd,
                    TDA10023_STATUS_IND, 1, puValue);
            }
            break;

        case READAGC:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd,
                TDA10023_AGCIF_IND, 1, &uByte);
            *puValue = uByte << 8;
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd,
                TDA10023_AGCTUN_IND, 1, &uByte);
            *puValue |= uByte;
            break;

        case GETNBOFUNIT:
            *puValue = TDA10023_MAX_UNITS;
            break;

        case READIQ:
            return tmbsl10023GetIQ(demodUnit, puValue);

        case READCOEF:
            return tmbsl10023GetCOEF(demodUnit, puValue);

        case READMSE:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd,
                TDA10023_MSE_IND, 1, puValue);
            break;

        case STOPEQUAL:
			// freeze the equalizer coef only if the algorithm is not working
            if (g10023Instance[demodUnit].bState == 0)
                g10023Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10023Instance[demodUnit].uDemodHwAdd,
                    TDA10023_EQCONF1_IND, TDA10023_EQCONF1_ENADAPT_BIT, 0);
			break;

        case STARTEQUAL:
			// unfreeze the equalizer coef only if the algorithm is not working
            if (g10023Instance[demodUnit].bState == 0)
                g10023Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10023Instance[demodUnit].uDemodHwAdd,
                    TDA10023_EQCONF1_IND, TDA10023_EQCONF1_ENADAPT_BIT, TDA10023_EQCONF1_ENADAPT_BIT);
			break;

        case TUNERLVL:
            // Test if the GetLevel function is implemented
            // NOTE: if the GetLevel function is not implemented or not enabled, we must not 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -