added prescaler for 16 bit pwm in LPC1347 target
Fork of mbed-dev by
Diff: targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_timer.c
- Revision:
- 50:a417edff4437
- Parent:
- 0:9b334a45a8ff
- Child:
- 144:ef7eb2e8f9f7
diff -r 57ac6e3cdfd3 -r a417edff4437 targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_timer.c --- a/targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_timer.c Wed Jan 13 12:45:11 2016 +0000 +++ b/targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_timer.c Fri Jan 15 07:45:16 2016 +0000 @@ -1,10 +1,10 @@ /***************************************************************************//** * @file em_timer.c * @brief Timer/counter (TIMER) Peripheral API - * @version 3.20.12 + * @version 4.2.1 ******************************************************************************* * @section License - * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b> + * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b> ******************************************************************************* * * Permission is granted to anyone to use this software for any purpose, @@ -30,7 +30,6 @@ * ******************************************************************************/ - #include "em_timer.h" #if defined(TIMER_COUNT) && (TIMER_COUNT > 0) @@ -87,22 +86,21 @@ /* Reset counter */ timer->CNT = _TIMER_CNT_RESETVALUE; - timer->CTRL = - ((uint32_t)(init->prescale) << _TIMER_CTRL_PRESC_SHIFT) | - ((uint32_t)(init->clkSel) << _TIMER_CTRL_CLKSEL_SHIFT) | - ((uint32_t)(init->fallAction) << _TIMER_CTRL_FALLA_SHIFT) | - ((uint32_t)(init->riseAction) << _TIMER_CTRL_RISEA_SHIFT) | - ((uint32_t)(init->mode) << _TIMER_CTRL_MODE_SHIFT) | - (init->debugRun ? TIMER_CTRL_DEBUGRUN : 0) | - (init->dmaClrAct ? TIMER_CTRL_DMACLRACT : 0) | - (init->quadModeX4 ? TIMER_CTRL_QDM_X4 : 0) | - (init->oneShot ? TIMER_CTRL_OSMEN : 0) | + timer->CTRL = ((uint32_t)(init->prescale) << _TIMER_CTRL_PRESC_SHIFT) + | ((uint32_t)(init->clkSel) << _TIMER_CTRL_CLKSEL_SHIFT) + | ((uint32_t)(init->fallAction) << _TIMER_CTRL_FALLA_SHIFT) + | ((uint32_t)(init->riseAction) << _TIMER_CTRL_RISEA_SHIFT) + | ((uint32_t)(init->mode) << _TIMER_CTRL_MODE_SHIFT) + | (init->debugRun ? TIMER_CTRL_DEBUGRUN : 0) + | (init->dmaClrAct ? TIMER_CTRL_DMACLRACT : 0) + | (init->quadModeX4 ? TIMER_CTRL_QDM_X4 : 0) + | (init->oneShot ? TIMER_CTRL_OSMEN : 0) -#if defined( TIMER_CTRL_X2CNT ) && defined( TIMER_CTRL_ATI ) - (init->count2x ? TIMER_CTRL_X2CNT : 0) | - (init->ati ? TIMER_CTRL_ATI : 0) | +#if defined(TIMER_CTRL_X2CNT) && defined(TIMER_CTRL_ATI) + | (init->count2x ? TIMER_CTRL_X2CNT : 0) + | (init->ati ? TIMER_CTRL_ATI : 0) #endif - (init->sync ? TIMER_CTRL_SYNC : 0); + | (init->sync ? TIMER_CTRL_SYNC : 0); /* Start timer if specified to be enabled (dosn't hurt if already started) */ if (init->enable) @@ -137,21 +135,21 @@ EFM_ASSERT(TIMER_CH_VALID(ch)); timer->CC[ch].CTRL = - ((uint32_t)(init->eventCtrl) << _TIMER_CC_CTRL_ICEVCTRL_SHIFT) | - ((uint32_t)(init->edge) << _TIMER_CC_CTRL_ICEDGE_SHIFT) | - ((uint32_t)(init->prsSel) << _TIMER_CC_CTRL_PRSSEL_SHIFT) | - ((uint32_t)(init->cufoa) << _TIMER_CC_CTRL_CUFOA_SHIFT) | - ((uint32_t)(init->cofoa) << _TIMER_CC_CTRL_COFOA_SHIFT) | - ((uint32_t)(init->cmoa) << _TIMER_CC_CTRL_CMOA_SHIFT) | - ((uint32_t)(init->mode) << _TIMER_CC_CTRL_MODE_SHIFT) | - (init->filter ? TIMER_CC_CTRL_FILT_ENABLE : 0) | - (init->prsInput ? TIMER_CC_CTRL_INSEL_PRS : 0) | - (init->coist ? TIMER_CC_CTRL_COIST : 0) | - (init->outInvert ? TIMER_CC_CTRL_OUTINV : 0); + ((uint32_t)(init->eventCtrl) << _TIMER_CC_CTRL_ICEVCTRL_SHIFT) + | ((uint32_t)(init->edge) << _TIMER_CC_CTRL_ICEDGE_SHIFT) + | ((uint32_t)(init->prsSel) << _TIMER_CC_CTRL_PRSSEL_SHIFT) + | ((uint32_t)(init->cufoa) << _TIMER_CC_CTRL_CUFOA_SHIFT) + | ((uint32_t)(init->cofoa) << _TIMER_CC_CTRL_COFOA_SHIFT) + | ((uint32_t)(init->cmoa) << _TIMER_CC_CTRL_CMOA_SHIFT) + | ((uint32_t)(init->mode) << _TIMER_CC_CTRL_MODE_SHIFT) + | (init->filter ? TIMER_CC_CTRL_FILT_ENABLE : 0) + | (init->prsInput ? TIMER_CC_CTRL_INSEL_PRS : 0) + | (init->coist ? TIMER_CC_CTRL_COIST : 0) + | (init->outInvert ? TIMER_CC_CTRL_OUTINV : 0); } -#ifdef _TIMER_DTCTRL_MASK +#if defined(_TIMER_DTCTRL_MASK) /***************************************************************************//** * @brief * Initialize the TIMER DTI unit. @@ -172,27 +170,27 @@ /* Setup the DTCTRL register. The enable bit will be set at the end of the function if specified. */ timer->DTCTRL = - (init->autoRestart ? TIMER_DTCTRL_DTDAS : 0) | - (init->activeLowOut ? TIMER_DTCTRL_DTIPOL : 0) | - (init->invertComplementaryOut ? TIMER_DTCTRL_DTCINV : 0) | - (init->enablePrsSource ? TIMER_DTCTRL_DTPRSEN : 0) | - ((uint32_t)(init->prsSel) << _TIMER_DTCTRL_DTPRSSEL_SHIFT); + (init->autoRestart ? TIMER_DTCTRL_DTDAS : 0) + | (init->activeLowOut ? TIMER_DTCTRL_DTIPOL : 0) + | (init->invertComplementaryOut ? TIMER_DTCTRL_DTCINV : 0) + | (init->enablePrsSource ? TIMER_DTCTRL_DTPRSEN : 0) + | ((uint32_t)(init->prsSel) << _TIMER_DTCTRL_DTPRSSEL_SHIFT); /* Setup the DTTIME register. */ timer->DTTIME = - ((uint32_t)(init->prescale) << _TIMER_DTTIME_DTPRESC_SHIFT) | - ((uint32_t)(init->riseTime) << _TIMER_DTTIME_DTRISET_SHIFT) | - ((uint32_t)(init->fallTime) << _TIMER_DTTIME_DTFALLT_SHIFT); + ((uint32_t)(init->prescale) << _TIMER_DTTIME_DTPRESC_SHIFT) + | ((uint32_t)(init->riseTime) << _TIMER_DTTIME_DTRISET_SHIFT) + | ((uint32_t)(init->fallTime) << _TIMER_DTTIME_DTFALLT_SHIFT); /* Setup the DTFC register. */ timer->DTFC = - (init->enableFaultSourceCoreLockup ? TIMER_DTFC_DTLOCKUPFEN : 0) | - (init->enableFaultSourceDebugger ? TIMER_DTFC_DTDBGFEN : 0) | - (init->enableFaultSourcePrsSel0 ? TIMER_DTFC_DTPRS0FEN : 0) | - (init->enableFaultSourcePrsSel1 ? TIMER_DTFC_DTPRS1FEN : 0) | - ((uint32_t)(init->faultAction) << _TIMER_DTFC_DTFA_SHIFT) | - ((uint32_t)(init->faultSourcePrsSel0) << _TIMER_DTFC_DTPRS0FSEL_SHIFT) | - ((uint32_t)(init->faultSourcePrsSel1) << _TIMER_DTFC_DTPRS1FSEL_SHIFT); + (init->enableFaultSourceCoreLockup ? TIMER_DTFC_DTLOCKUPFEN : 0) + | (init->enableFaultSourceDebugger ? TIMER_DTFC_DTDBGFEN : 0) + | (init->enableFaultSourcePrsSel0 ? TIMER_DTFC_DTPRS0FEN : 0) + | (init->enableFaultSourcePrsSel1 ? TIMER_DTFC_DTPRS1FEN : 0) + | ((uint32_t)(init->faultAction) << _TIMER_DTFC_DTFA_SHIFT) + | ((uint32_t)(init->faultSourcePrsSel0) << _TIMER_DTFC_DTPRS0FSEL_SHIFT) + | ((uint32_t)(init->faultSourcePrsSel1) << _TIMER_DTFC_DTPRS1FSEL_SHIFT); /* Setup the DTOGEN register. */ timer->DTOGEN = init->outputsEnableMask; @@ -244,7 +242,7 @@ /* Reset dead time insertion module, no effect on timers without DTI */ -#ifdef TIMER_DTLOCK_LOCKKEY_UNLOCK +#if defined(TIMER_DTLOCK_LOCKKEY_UNLOCK) /* Unlock DTI registers first in case locked */ timer->DTLOCK = TIMER_DTLOCK_LOCKKEY_UNLOCK;