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

📄 tmbsl10023.c

📁 Cu1216 解调器驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
            // change the I2C switch. The trick used to determine if the function is enabled
            // is to call the getCfgFunc with a null pointer for the last parameter. In this
            // case, the function return TM_OK if the function is enabled.
            if ( g10023Instance[demodUnit].tunerFunc.getCfgFunc(g10023Instance[demodUnit].eTunerUnit, tmhalFETunerLVL, (UInt32*)0) == TM_OK)
            {
                // tuner is accessible
                g10023Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10023Instance[demodUnit].uDemodHwAdd, 
                    TDA10023_TEST_IND, TDA10023_TEST_BYPIIC_BIT, 
                    TDA10023_TEST_BYPIIC_BIT);

                // The last parameter of the getCfgFunc isn't a null pointer
                // so we get the input level
                g10023Instance[demodUnit].tunerFunc.getCfgFunc(g10023Instance[demodUnit].eTunerUnit, tmhalFETunerLVL, puValue);

                // tuner is disconnected from the I2C bus
                g10023Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10023Instance[demodUnit].uDemodHwAdd, 
                    TDA10023_TEST_IND, TDA10023_TEST_BYPIIC_BIT, 0);

                if (*puValue == 0xFFFFFFFF)
                    return TMBSL_ERR_DEMOD_NOT_SUPPORTED;
                else
                    return TM_OK;
            }
            else
            {
                return TMBSL_ERR_DEMOD_NOT_SUPPORTED;
            }
            break;

        
        case JQAMMODE:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                TDA10023_JQAM_MODE_IND, 1, puValue);
            break;

        case JQAMREQTS:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                TDA10023_REQ_TS_IDH_IND, 2, puBytes);
            *puValue = (puBytes[0] << 8) | puBytes[1];
            break;

        case JQAMREQON:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                TDA10023_REQ_ON_IDH_IND, 2, puBytes);
            *puValue = (puBytes[0] << 8) | puBytes[1];
            break;

        case JQAMGETREG5:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                TDA10023_REG5_IND, 1, puValue);
            break;

        case JQAMGETTSSTATUS:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                TDA10023_TS_STATUS_H_IND, 2, puBytes);
            *puValue = (puBytes[0] << 8) | puBytes[1];
            break;

        case JQAMGETRCVSTATUS:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                TDA10023_RCV_STATUS4_IND, 4, puBytes);
            *puValue = (puBytes[0] << 24) | (puBytes[1] << 16) | (puBytes[2] << 8) | puBytes[3];
            break;

        case JQAMGETTSON:
            for(i=0 ; i< TDA10023_JQAMFILTER_NB ; i++) 
            {
                g10023Instance[demodUnit].systemFunc.SY_Read(
                    g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                    TDA10023_TS_ID1H_IND+(4*i), 4, puBytes);

                *puValue = (puBytes[0] << 24) | (puBytes[1] << 16) | (puBytes[2] << 8) | puBytes[3];
                puValue++;
            }
            break;

        default:
            return TM_ERR_BAD_PARAMETER;
    }

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023Write
//
// DESCRIPTION: this function writes bytes in the demod registers.
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//				TM_ERR_IIC_ERR    
//				TM_OK
//
// NOTES:       This function can be removed if needed
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023Write (
	tmUnitSelect_t     demodUnit,		//  I: Demod unit number
	UInt32             uIndex,			//  I: Start index to write
	UInt32             uNbBytes,		//  I: Number of bytes to write
	UInt32*            puBytes			//  I: Pointer on an array of bytes
)
{

    //----------------------
    // 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
    //----------------------
    if (g10023Instance[demodUnit].systemFunc.SY_Write(
        g10023Instance[demodUnit].uDemodHwAdd,
		uIndex, uNbBytes, puBytes) == False)
		return TM_ERR_IIC_ERR;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023WriteBit
//
// DESCRIPTION: this function writes a bit to the mask position
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//				TM_ERR_IIC_ERR    
//				TM_OK
//
// NOTES:       This function can be removed if needed
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023WriteBit (
	tmUnitSelect_t     demodUnit,		//  I: Demod unit number
	UInt32             uIndex,			//  I: Index to write
	UInt32             uBitMask,		//  I: byte mask
	UInt32             uByte			//  I: value
)
{

    //----------------------
    // 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
    //----------------------
    if (g10023Instance[demodUnit].systemFunc.SY_WriteBit(
        g10023Instance[demodUnit].uDemodHwAdd,
		uIndex, uBitMask, uByte) == False)
		return TM_ERR_IIC_ERR;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023Read
//
// DESCRIPTION: this function reads bytes
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//				TM_ERR_IIC_ERR    
//				TM_OK
//
// NOTES:       This function can be removed if needed
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023Read (
	tmUnitSelect_t     demodUnit,		//  I: Demod unit number
	UInt32             uIndex,			//  I: Start index to write
	UInt32             uNbBytes,		//  I: Number of bytes to read
	UInt32*            puBytes			//  O: Pointer on an array of bytes
)
{

    //----------------------
    // 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
    //----------------------
    if (g10023Instance[demodUnit].systemFunc.SY_Read(
            g10023Instance[demodUnit].uDemodHwAdd,
			uIndex,	uNbBytes, puBytes) == False)
		return TM_ERR_IIC_ERR;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// Demod-Tuner programming functions:
//-----------------------------------------------------------------------------
//

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023SetRF
//
// DESCRIPTION: this function will program the tuner
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//				TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023SetRF (
    tmUnitSelect_t      demodUnit,		//  I: Demod unit number
    UInt32			    uRF 			//  I: RF frequency (Hz)
)
{
    UInt32 uByte;

    
    	//----------------------
    	// 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;

	// test the parameter value
    if (uRF < TDA10023_RF_MIN || uRF > TDA10023_RF_MAX)
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;

    	//----------------------
    	// Implementation
    	//----------------------
    // set the KAGCIF and KAGCTUN to acquisition mode
    uByte = 0x92;//by maj. 060620,old is 0x93
    g10023Instance[demodUnit].systemFunc.SY_Write(
        g10023Instance[demodUnit].uDemodHwAdd, 
        TDA10023_AGCCONF1_IND,
        1,
        &uByte);


    if (Tda10023WriteRF(&g10023Instance[demodUnit], &uRF) == False)
		return TM_FALSE;

    	// update return value
    g10023Instance[demodUnit].sCurrentChannel.uRF = uRF;

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

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023GetRF
//
// DESCRIPTION: this function gets the current RF Frequency.
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//				TM_OK
//
// NOTES:       the value sotcked in the object is returned
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023GetRF (
    tmUnitSelect_t      demodUnit,		// I: Demod unit number
    UInt32           *puRF        // O: RF frequency (Hz)
)
{
    	//----------------------
    	// 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
    	//----------------------
    *puRF = g10023Instance[demodUnit].sCurrentChannel.uRF;

    	return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023SetSR
//
// DESCRIPTION: this function set the symbol rate
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TMBSL_ERR_DEMOD_BAD_PARAMETER
//				TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023SetSR (
    tmUnitSelect_t      demodUnit,		//  I: Demod unit number
    UInt32            uSR           //  I: Symbol rate (bauds)
)
{
    //----------------------
    // 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;

	// test the parameter value
    // SACLK = SysClk/2     (SACLK max = 36MHz)
    // (SACLK/64) < uSR < (SACLK/4)
    // or with high sampling clock (SACLK = SysClk, SACLK max = 72MHz)
    // (SACLK/128) < uSR < (SACLK/8)
    if (uSR < (g10023Instance[demodUnit].uSysClk/(2*64)) || uSR > (g10023Instance[demodUnit].uSysClk/(2*4)))
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;

    //----------------------
    // Implementation
    //----------------------
    Tda10023WriteSR (&g10023Instance[demodUnit], &uSR);

    // update current config
    g10023Instance[demodUnit].sCurrentChannel.uSR = uSR;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023GetSR
//
// DESCRIPTION: this function returns the symbol rate
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//				TM_OK
//
// NOTES:       the value stored in the object is returned
//-----------------------------------------------------------------------------
//

⌨️ 快捷键说明

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