/******************************************************************************* * mvCntmrCtrlGet - * * DESCRIPTION: * Get the Control value of a given counter/timer * * INPUT: * countNum - counter number * pCtrl - pointer to MV_CNTMR_CTRL structure * * OUTPUT: * Counter\Timer control value * * RETURN: * MV_BAD_PARAM on bad parameters , MV_ERROR on error ,MV_OK on sucess *******************************************************************************/ MV_STATUS mvCntmrCtrlGet(MV_U32 countNum, MV_CNTMR_CTRL *pCtrl) { MV_U32 cntmrCtrl; if (countNum >= MV_CNTMR_MAX_COUNTER) { DB(mvOsPrintf(("mvCntmrCtrlGet: Err. illegal counter number \n"))); return MV_BAD_PARAM;; } /* read control register */ cntmrCtrl = MV_REG_READ(CNTMR_CTRL_REG(countNum)); /* enable counter\timer */ if (cntmrCtrl & (CTCR_ARM_TIMER_EN(countNum))) pCtrl->enable = MV_TRUE; else pCtrl->enable = MV_FALSE; /* counter mode */ if (cntmrCtrl & (CTCR_ARM_TIMER_AUTO_EN(countNum))) pCtrl->autoEnable = MV_TRUE; else pCtrl->autoEnable = MV_FALSE; if (cntmrHalData.ctrlFamily==MV_78XX0) { pCtrl->Ratio = (cntmrCtrl & (CTCR_ARM_TIMER_RATIO_MASK(countNum))) / (1 << (CTCR_ARM_TIMER_RATIO_OFFS(countNum))); pCtrl->enable_25Mhz = (cntmrCtrl & CTCR_ARM_TIMER_25MhzFRQ_MASK(countNum)) ? MV_TRUE : MV_FALSE; } return MV_OK; }
/******************************************************************************* * mvCntmrCtrlSet - * * DESCRIPTION: * Set the Control to a given counter/timer * * INPUT: * countNum - counter number * pCtrl - pointer to MV_CNTMR_CTRL structure * * OUTPUT: * None. * * RETURN: * MV_BAD_PARAM on bad parameters , MV_ERROR on error ,MV_OK on sucess *******************************************************************************/ MV_STATUS mvCntmrCtrlSet(MV_U32 countNum, MV_CNTMR_CTRL *pCtrl) { MV_U32 cntmrCtrl; if (countNum >= MV_CNTMR_MAX_COUNTER) { DB(mvOsPrintf(("mvCntmrCtrlSet: Err. illegal counter number \n"))); return MV_BAD_PARAM;; } /* read control register */ cntmrCtrl = MV_REG_READ(CNTMR_CTRL_REG(countNum)); cntmrCtrl &= ~((CTCR_ARM_TIMER_EN_MASK(countNum)) | (CTCR_ARM_TIMER_AUTO_MASK(countNum))); if (pCtrl->enable) /* enable counter\timer */ cntmrCtrl |= (CTCR_ARM_TIMER_EN(countNum)); if (pCtrl->autoEnable) /* Auto mode */ cntmrCtrl |= (CTCR_ARM_TIMER_AUTO_EN(countNum)); #ifndef MV88F78X60_Z1 cntmrCtrl &= ~((CTCR_ARM_TIMER_RATIO_MASK(countNum)) | (CTCR_ARM_TIMER_25MhzFRQ_MASK(countNum))); cntmrCtrl |= (pCtrl->Ratio & 0x7) << (CTCR_ARM_TIMER_RATIO_OFFS(countNum)); if (pCtrl->enable_25Mhz) /* 25Mhz enable */ cntmrCtrl |= (CTCR_ARM_TIMER_25MhzFRQ_EN(countNum)); #endif MV_REG_WRITE(CNTMR_CTRL_REG(countNum), cntmrCtrl); return MV_OK; }
/******************************************************************************* * mvCntmrFrqGet - get Counter/Timer Frequency. * * DESCRIPTION: * This routine retuen timer clock Frequency * * INPUT: * cntmrNum - Counter/Timer number. * * OUTPUT: * timer clock Frequency. * * RETURN: * ERROR - In case of invalid parameters. * *******************************************************************************/ MV_U32 mvCntmrFrqGet(MV_U32 cntmrNum) { if (cntmrHalData.ctrlFamily==MV_78XX0) { if (INVALID_CNTMR(cntmrNum)) return MV_ERROR; MV_U32 cntmrCtrl; cntmrCtrl = MV_REG_READ(CNTMR_CTRL_REG(cntmrNum)); if (cntmrCtrl & CTCR_ARM_TIMER_25MhzFRQ_MASK(cntmrNum)) return MV_BOARD_REFCLK_25MHZ; } return mvCpuL2ClkGet(); }
/******************************************************************************* * mvCntmrFrqGet - get Counter/Timer Frequency. * * DESCRIPTION: * This routine retuen timer clock Frequency * * INPUT: * cntmrNum - Counter/Timer number. * * OUTPUT: * timer clock Frequency. * * RETURN: * ERROR - In case of invalid parameters. * *******************************************************************************/ MV_U32 mvCntmrFrqGet(MV_U32 cntmrNum) { #ifndef MV88F78X60_Z1 if (INVALID_CNTMR(cntmrNum)) return MV_ERROR; { MV_U32 cntmrCtrl; cntmrCtrl = MV_REG_READ(CNTMR_CTRL_REG(cntmrNum)); if (cntmrCtrl & CTCR_ARM_TIMER_25MhzFRQ_MASK(cntmrNum)) return MV_BOARD_REFCLK_25MHZ; } #endif return mvCpuL2ClkGet(); }