/******************************************************************************* * 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; }
/******************************************************************************* * 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)); if (pCtrl->enable) /* enable counter\timer */ cntmrCtrl |= (CTCR_ARM_TIMER_EN(countNum)); else /* disable counter\timer */ cntmrCtrl &= ~(CTCR_ARM_TIMER_EN(countNum)); if (pCtrl->autoEnable) /* Auto mode */ cntmrCtrl |= (CTCR_ARM_TIMER_AUTO_EN(countNum)); else /* no auto mode */ cntmrCtrl &= ~(CTCR_ARM_TIMER_AUTO_EN(countNum)); if ((cntmrHalData.ctrlFamily == MV_78XX0) || (cntmrHalData.ctrlFamily == MV_BOBCAT2_DEV_ID)) { cntmrCtrl &= ~(CTCR_ARM_TIMER_RATIO_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)); else cntmrCtrl &= ~(CTCR_ARM_TIMER_25MhzFRQ_EN(countNum)); } MV_REG_WRITE(CNTMR_CTRL_REG(countNum), cntmrCtrl); return MV_OK; }