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

📄 tmdlfgpo.c

📁 PNX1500上视频输出VCP的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
//-----------------------------------------------------------------------------// FUNCTION:    FgpoIntClear://// DESCRIPTION: Clears the FGPO interrupts defined by the OR'ed mask fgpoInt//// RETURN:      TM_OK//// NOTES:       None.//-----------------------------------------------------------------------------static tmErrorCode_t FgpoIntClear(tmUnitSelect_t   fgpoUnitSelect,  // I: Unit number                                    tmdlFgpo_Event_t fgpoIntEvent)    // I: Interrupts to be cleared{    union _FGPO_IR_CLR fgpoIntClear;    ptmdlFgpo_Unit_t pFgpo_UnitInfo;    DBG_ISR_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_ENTER, "FgpoIntClear"));    TMDL_FGPO_GET_UNIT_INFO(fgpoUnitSelect, pFgpo_UnitInfo);    fgpoIntClear.u32 = 0;    if (fgpoIntEvent & tmdlFgpo_EvtBuf1Done)    {        fgpoIntClear.bits.Buf1DoneAck = 1;    }    if (fgpoIntEvent & tmdlFgpo_EvtBuf2Done)    {        fgpoIntClear.bits.Buf2DoneAck = 1;    }    if (fgpoIntEvent & tmdlFgpo_EvtThresh1Reached)    {        fgpoIntClear.bits.Thresh1ReachedAck = 1;    }    if (fgpoIntEvent & tmdlFgpo_EvtThresh2Reached)    {        fgpoIntClear.bits.Thresh2ReachedAck = 1;    }    if (fgpoIntEvent & tmdlFgpo_EvtBufUnderrun)    {        fgpoIntClear.bits.UnderRunAck = 1;    }    if (fgpoIntEvent & tmdlFgpo_EvtMbe)    {        fgpoIntClear.bits.MBErrAck = 1;    }    pFgpo_UnitInfo->pRegs->FGPO_IR_CLR.u32 = fgpoIntClear.u32;    DBG_ISR_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_LEAVE, "FgpoIntClear"));    return TM_OK;}  // FgpoIntClear//-----------------------------------------------------------------------------// FUNCTION:    FgpoSetup://// DESCRIPTION: This function sets up the control registers for data transfer.//// RETURN:      TM_OK//// NOTES:       None.//-----------------------------------------------------------------------------//static tmErrorCode_t FgpoSetup(tmUnitSelect_t fgpoUnitSelect,                                 ptmdlFgpo_InstanceSetup_t pFgpoSetup){    union _FGPO_CTL fgpoCtrl;    ptmdlFgpo_Unit_t pFgpo_UnitInfo;    DBG_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_ENTER, "FgpoSetup"));    TMDL_FGPO_GET_UNIT_INFO(fgpoUnitSelect, pFgpo_UnitInfo);    pFgpo_UnitInfo->pRegs->FGPO_BASE1.u32 = pFgpoSetup->base1;    pFgpo_UnitInfo->pRegs->FGPO_BASE2.u32 = pFgpoSetup->base2;    pFgpo_UnitInfo->pRegs->FGPO_THRESH1.u32 = pFgpoSetup->thresh1;    pFgpo_UnitInfo->pRegs->FGPO_THRESH2.u32 = pFgpoSetup->thresh2;    pFgpo_UnitInfo->pRegs->FGPO_REC_GAP.u32 = pFgpoSetup->recGap;    pFgpo_UnitInfo->pRegs->FGPO_BUF_GAP.u32 = pFgpoSetup->bufGap;    pFgpo_UnitInfo->pRegs->FGPO_REC_SIZE.u32 = pFgpoSetup->samplesPerRec;    pFgpo_UnitInfo->pRegs->FGPO_SIZE.u32 = pFgpoSetup->recPerBuf;    pFgpo_UnitInfo->pRegs->FGPO_STRIDE.u32 = pFgpoSetup->stride;    fgpoCtrl.u32 = pFgpo_UnitInfo->pRegs->FGPO_CTL.u32;    fgpoCtrl.bits.VarLength = pFgpoSetup->varLength;    fgpoCtrl.bits.TStampSelect = pFgpoSetup->timeStamp;    fgpoCtrl.bits.RecSync = pFgpoSetup->extRecSyncMode;    fgpoCtrl.bits.BufSync = pFgpoSetup->extBufSyncMode;    fgpoCtrl.bits.SampleSize = pFgpoSetup->sampleSize;    fgpoCtrl.bits.Mode = pFgpoSetup->mainMode;    fgpoCtrl.bits.RecStartMsgStart = pFgpoSetup->dataStartMode;    fgpoCtrl.bits.BufStartMsgStop = pFgpoSetup->dataStopMode;    fgpoCtrl.bits.PolarityIn = pFgpoSetup->polarityIn;    pFgpo_UnitInfo->pRegs->FGPO_CTL.u32 = fgpoCtrl.u32;    DBG_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_LEAVE, "FgpoSetup"));    return TM_OK;}  // FgpoSetup//-----------------------------------------------------------------------------// FUNCTION:    FgpoOutputEnable://// DESCRIPTION: Set FGPO_CTL/OUTPUT_ENABLE_1 or OUTPUT_ENABLE_2//// RETURN:      TM_OK//// NOTES:       None.//-----------------------------------------------------------------------------//static tmErrorCode_t FgpoOutputEnable(tmUnitSelect_t fgpoUnitSelect)  // I: Unit number{    union _FGPO_CTL fgpoCtrl;    union _FGPO_BASE2 fgpoBase2;    ptmdlFgpo_Unit_t pFgpo_UnitInfo;    DBG_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_ENTER, "FgpoOutputEnable"));    TMDL_FGPO_GET_UNIT_INFO(fgpoUnitSelect, pFgpo_UnitInfo);    // Enable output    fgpoCtrl.u32 = pFgpo_UnitInfo->pRegs->FGPO_CTL.u32;    fgpoCtrl.bits.OutputEnable1 = 1;    fgpoBase2.u32 = pFgpo_UnitInfo->pRegs->FGPO_BASE2.u32;    if((fgpoBase2.u32 & TMDL_FGPO_BUFBASE_NULL)!= TMDL_FGPO_BUFBASE_NULL)   {        fgpoCtrl.bits.OutputEnable2 = 1;    }   else  {	fgpoCtrl.bits.OutputEnable2 = 0;   }    pFgpo_UnitInfo->pRegs->FGPO_CTL.u32 = fgpoCtrl.u32;    DBG_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_LEAVE, "FgpoOutputEnable"));    return TM_OK;}  // FgpoOutputEnable//-----------------------------------------------------------------------------// FUNCTION:    FgpoOutputDisable://// DESCRIPTION: Reset FGPO_CTL/OUTPUT_ENABLE_1 or OUTPUT_ENABLE_2//// RETURN:      TM_OK//// NOTES:       None.//-----------------------------------------------------------------------------//static tmErrorCode_t FgpoOutputDisable(tmUnitSelect_t fgpoUnitSelect)  // I: Unit number{    union _FGPO_CTL fgpoCtrl;    ptmdlFgpo_Unit_t pFgpo_UnitInfo;    DBG_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_ENTER, "FgpoOutputDisable"));    TMDL_FGPO_GET_UNIT_INFO(fgpoUnitSelect, pFgpo_UnitInfo);    fgpoCtrl.u32 = pFgpo_UnitInfo->pRegs->FGPO_CTL.u32;    fgpoCtrl.bits.OutputEnable1 = 0;    fgpoCtrl.bits.OutputEnable2 = 0;    pFgpo_UnitInfo->pRegs->FGPO_CTL.u32 = fgpoCtrl.u32;    DBG_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_LEAVE, "FgpoOutputDisable"));    return TM_OK;}  // FgpoOutputDisable//-----------------------------------------------------------------------------// FUNCTION:    FgpoReset://// DESCRIPTION: Set FGPO_SOFT_RST/SoftwareReset//// RETURN:      TM_OK//// NOTES:       None.//-----------------------------------------------------------------------------//static tmErrorCode_t FgpoReset(tmUnitSelect_t fgpoUnitSelect)  // I: Unit number{    ptmdlFgpo_Unit_t pFgpo_UnitInfo;    int i=0;    DBG_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_ENTER, "FgpoReset"));    TMDL_FGPO_GET_UNIT_INFO(fgpoUnitSelect, pFgpo_UnitInfo);    // Software Reset of the FGPO module    pFgpo_UnitInfo->pRegs->FGPO_SOFT_RST.u32 = (UInt32)1;    DBG_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_LEAVE, "FgpoReset"));    return TM_OK;}  // FgpoReset//-----------------------------------------------------------------------------// FUNCTION:    FgpoIntfEnable://// DESCRIPTION: Set FGPO_IF_DIS/DISABLE_BUS_IF//// RETURN:      TM_OK//// NOTES:       1 = All writes to FGPO MMIO space (except the register)//              will be ignored.  All reads (except this register) will//              return 0x00000000.//-----------------------------------------------------------------------------//static tmErrorCode_t FgpoIntfEnable(tmUnitSelect_t fgpoUnitSelect)  // I: Unit number{    union _FGPO_IF_DIS fgpoIntfDisable;    ptmdlFgpo_Unit_t pFgpo_UnitInfo;    DBG_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_ENTER, "FgpoIntfEnable"));    TMDL_FGPO_GET_UNIT_INFO(fgpoUnitSelect, pFgpo_UnitInfo);    // Enable hardware module    fgpoIntfDisable.u32 = pFgpo_UnitInfo->pRegs->FGPO_IF_DIS.u32;    fgpoIntfDisable.bits.DisableBusIf = 0;    pFgpo_UnitInfo->pRegs->FGPO_IF_DIS.u32 = fgpoIntfDisable.u32;    DBG_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_LEAVE, "FgpoIntfEnable"));    return TM_OK;}  // FgpoIntfEnable//-----------------------------------------------------------------------------// FUNCTION:    FgpoIntfDisable://// DESCRIPTION: Set FGPO_IF_DIS/DISABLE_BUS_IF//// RETURN:      TM_OK//// NOTES:       1 = All writes to FGPO MMIO space (except the register)//              will be ignored.  All reads (except this register) will//              return 0x00000000.//-----------------------------------------------------------------------------//static tmErrorCode_t FgpoIntfDisable(tmUnitSelect_t fgpoUnitSelect)  // I: Unit number{    union _FGPO_IF_DIS fgpoIntfDisable;    ptmdlFgpo_Unit_t pFgpo_UnitInfo;    DBG_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_ENTER, "FgpoIntfDisable"));    TMDL_FGPO_GET_UNIT_INFO(fgpoUnitSelect, pFgpo_UnitInfo);    // Disable hardware module    fgpoIntfDisable.u32 = pFgpo_UnitInfo->pRegs->FGPO_IF_DIS.u32;    fgpoIntfDisable.bits.DisableBusIf = 1;    pFgpo_UnitInfo->pRegs->FGPO_IF_DIS.u32 = fgpoIntfDisable.u32;    DBG_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_LEAVE, "FgpoIntfDisable"));    return TM_OK;}  // FgpoIntfDisable//-----------------------------------------------------------------------------// FUNCTION:    FgpoGetTimestamp1://// DESCRIPTION: This function obtains the timestamp of buffer 1.//// RETURN:      TM_OK//// NOTES:       Valid when buffer 1 completed.//-----------------------------------------------------------------------------//static tmErrorCode_t FgpoGetTimestamp1(tmUnitSelect_t fgpoUnitSelect, pUInt32 pFgpoTimestamp){    ptmdlFgpo_Unit_t pFgpo_UnitInfo;    union _FGPO_TIME1 fgpoTimestamp1;    DBG_ISR_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_ENTER, "FgpoGetTimestamp1"));    TMDL_FGPO_GET_UNIT_INFO(fgpoUnitSelect, pFgpo_UnitInfo);    fgpoTimestamp1.u32 = pFgpo_UnitInfo->pRegs->FGPO_TIME1.u32;    *((pUInt32)pFgpoTimestamp) = (UInt32)fgpoTimestamp1.u32;    DBG_ISR_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_LEAVE, "FgpoGetTimestamp1"));    return TM_OK;}  // FgpoGetTimestamp1//-----------------------------------------------------------------------------// FUNCTION:    FgpoGetTimestamp2://// DESCRIPTION: This function obtains the timestamp of buffer 2.//// RETURN:      TM_OK//// NOTES:       Valid when buffer 2 completed.//-----------------------------------------------------------------------------//static tmErrorCode_t FgpoGetTimestamp2(tmUnitSelect_t fgpoUnitSelect, pUInt32 pFgpoTimestamp){    ptmdlFgpo_Unit_t pFgpo_UnitInfo;    union _FGPO_TIME2 fgpoTimestamp2;    DBG_ISR_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_ENTER, "FgpoGetTimestamp2"));    TMDL_FGPO_GET_UNIT_INFO(fgpoUnitSelect, pFgpo_UnitInfo);    fgpoTimestamp2.u32 = pFgpo_UnitInfo->pRegs->FGPO_TIME2.u32;    *((pUInt32)pFgpoTimestamp) = (UInt32)fgpoTimestamp2.u32;    DBG_ISR_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_LEAVE, "FgpoGetTimestamp2"));    return TM_OK;}  // FgpoGetTimestamp1//-----------------------------------------------------------------------------// FUNCTION:    FgpoSetBaseAddr1://// DESCRIPTION: Set FGPO_BASE1/BASE1//// RETURN:      TM_OK//// NOTES:       32-bit word aligned address pointing to Buffer 1 base.//-----------------------------------------------------------------------------//static tmErrorCode_t FgpoSetBaseAddr1(tmUnitSelect_t fgpoUnitSelect, UInt32 fgpoBaseAddr){    ptmdlFgpo_Unit_t pFgpo_UnitInfo;    DBG_ISR_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_ENTER, "FgpoSetBaseAddr1"));    TMDL_FGPO_GET_UNIT_INFO(fgpoUnitSelect, pFgpo_UnitInfo);    // Set base address 1    pFgpo_UnitInfo->pRegs->FGPO_BASE1.u32 = fgpoBaseAddr;    DBG_ISR_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_LEAVE, "FgpoSetBaseAddr1"));    return TM_OK;}  // FgpoSetBaseAddr1//-----------------------------------------------------------------------------// FUNCTION:    FgpoSetBaseAddr2://// DESCRIPTION: Set FGPO_BASE2/BASE2//// RETURN:      TM_OK//// NOTES:       32-bit word aligned address pointing to Buffer 2 base.//-----------------------------------------------------------------------------//static tmErrorCode_t FgpoSetBaseAddr2(tmUnitSelect_t fgpoUnitSelect, UInt32 fgpoBaseAddr){    ptmdlFgpo_Unit_t pFgpo_UnitInfo;    DBG_ISR_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_ENTER, "FgpoSetBaseAddr2"));    TMDL_FGPO_GET_UNIT_INFO(fgpoUnitSelect, pFgpo_UnitInfo);    // Set base address 2    pFgpo_UnitInfo->pRegs->FGPO_BASE2.u32 = fgpoBaseAddr;    DBG_ISR_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_LEAVE, "FgpoSetBaseAddr2"));    return TM_OK;}  // FgpoSetBaseAddr2//-----------------------------------------------------------------------------// FUNCTION:    FgpoGetNumOfRec1://// DESCRIPTION: Gets FGPO_NUM_REC1/NumRec1//// RETURN:      TM_OK//// NOTES:       Cleared to zero when FGPO_BASE1 register is written to.//-----------------------------------------------------------------------------//static tmErrorCode_t FgpoGetNumOfRec1(tmUnitSelect_t fgpoUnitSelect, pUInt32 pFgpoNumOfRec){    union _FGPO_NUM_REC1 fgpoNumRec1;    ptmdlFgpo_Unit_t pFgpo_UnitInfo;    DBG_ISR_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_ENTER, "FgpoGetNumOfRec1"));    TMDL_FGPO_GET_UNIT_INFO(fgpoUnitSelect, pFgpo_UnitInfo);    // Get NumRec1    fgpoNumRec1.u32 = pFgpo_UnitInfo->pRegs->FGPO_NUM_REC1.u32;    *((pUInt32)pFgpoNumOfRec) = (UInt32)fgpoNumRec1.u32;    DBG_ISR_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_LEAVE, "FgpoGetNumOfRec1"));    return TM_OK;}  // FgpoGetNumOfRec1//-----------------------------------------------------------------------------// FUNCTION:    FgpoGetNumOfRec2://// DESCRIPTION: Gets FGPO_NUM_REC2/NumRec2//// RETURN:      TM_OK//// NOTES:       Cleared to zero when FGPO_BASE2 register is written to.//-----------------------------------------------------------------------------//static tmErrorCode_t FgpoGetNumOfRec2(tmUnitSelect_t fgpoUnitSelect, pUInt32 pFgpoNumOfRec){    union _FGPO_NUM_REC2 fgpoNumRec2;    ptmdlFgpo_Unit_t pFgpo_UnitInfo;    DBG_ISR_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_ENTER, "FgpoGetNumOfRec2"));    TMDL_FGPO_GET_UNIT_INFO(fgpoUnitSelect, pFgpo_UnitInfo);    // Get NumRec2    fgpoNumRec2.u32 = pFgpo_UnitInfo->pRegs->FGPO_NUM_REC2.u32;    *((pUInt32)pFgpoNumOfRec) = (UInt32)fgpoNumRec2.u32;    DBG_ISR_PRINT((gtmDbgFgpoDevLib, DBG_INTERNAL_LEAVE, "FgpoGetNumOfRec2"));    return TM_OK;}  // FgpoGetNumOfRec2

⌨️ 快捷键说明

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