📄 tmdlfgpo.c
字号:
//-----------------------------------------------------------------------------// 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 + -