33 #ifndef __SILICON_LABS_EM_TIMER_H__
34 #define __SILICON_LABS_EM_TIMER_H__
37 #if defined(TIMER_COUNT) && (TIMER_COUNT > 0)
64 #if (TIMER_COUNT == 1)
65 #define TIMER_REF_VALID(ref) ((ref) == TIMER0)
66 #elif (TIMER_COUNT == 2)
67 #define TIMER_REF_VALID(ref) (((ref) == TIMER0) || ((ref) == TIMER1))
68 #elif (TIMER_COUNT == 3)
69 #define TIMER_REF_VALID(ref) (((ref) == TIMER0) \
70 || ((ref) == TIMER1) \
72 #elif (TIMER_COUNT == 4)
73 #define TIMER_REF_VALID(ref) (((ref) == TIMER0) \
74 || ((ref) == TIMER1) \
75 || ((ref) == TIMER2) \
78 #error "Undefined number of timers."
82 #if defined(_SILICON_LABS_32B_PLATFORM_1)
83 #define TIMER_CH_VALID(ch) ((ch) < 3)
84 #elif defined(_SILICON_LABS_32B_PLATFORM_2)
85 #define TIMER_CH_VALID(ch) ((ch) < 4)
87 #error "Unknown platform. Undefined number of channels."
228 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH4)
231 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH5)
234 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH6)
237 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH7)
240 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH8)
243 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH9)
246 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH10)
249 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH11)
254 #if defined(_TIMER_DTFC_DTFA_NONE)
284 #if defined(TIMER_CTRL_X2CNT) && defined(TIMER_CTRL_ATI)
316 #if defined(TIMER_CTRL_X2CNT) && defined(TIMER_CTRL_ATI)
317 #define TIMER_INIT_DEFAULT \
322 timerClkSelHFPerClk, \
325 timerInputActionNone, \
326 timerInputActionNone, \
334 #define TIMER_INIT_DEFAULT \
339 timerClkSelHFPerClk, \
340 timerInputActionNone, \
341 timerInputActionNone, \
397 #define TIMER_INITCC_DEFAULT \
399 timerEventEveryEdge, \
402 timerOutputActionNone, \
403 timerOutputActionNone, \
404 timerOutputActionNone, \
412 #if defined(_TIMER_DTCTRL_MASK)
475 #define TIMER_INITDTI_DEFAULT \
486 TIMER_DTOGEN_DTOGCC0EN|TIMER_DTOGEN_DTOGCDTI0EN, \
493 timerDtiFaultActionInactive, \
518 return timer->
CC[ch].
CCV;
567 timer->
CC[ch].
CCV = val;
615 EFM_ASSERT(TIMER_REF_VALID(timer));
633 #if defined(_TIMER_DTCTRL_MASK)
648 EFM_ASSERT(
TIMER0 == timer);
677 EFM_ASSERT(
TIMER0 == timer);
696 EFM_ASSERT(
TIMER0 == timer);
732 timer->
IEN &= ~flags;
806 return timer->
IF & ien;
826 #if defined(_TIMER_DTLOCK_LOCKKEY_LOCK)
845 EFM_ASSERT(
TIMER0 == timer);
906 #if defined(TIMER_DTLOCK_LOCKKEY_UNLOCK)
916 EFM_ASSERT(
TIMER0 == timer);
uint32_t outputsEnableMask
__STATIC_INLINE void TIMER_IntDisable(TIMER_TypeDef *timer, uint32_t flags)
Disable one or more TIMER interrupts.
#define _TIMER_CTRL_CLKSEL_TIMEROUF
__STATIC_INLINE void TIMER_TopSet(TIMER_TypeDef *timer, uint32_t val)
Set top value for timer.
#define _TIMER_DTFC_DTFA_CLEAR
#define _TIMER_DTFC_DTFA_NONE
TIMER_ClkSel_TypeDef clkSel
#define _TIMER_CTRL_MODE_QDEC
bool enableFaultSourcePrsSel0
#define _TIMER_CC_CTRL_PRSSEL_PRSCH11
#define _TIMER_CC_CTRL_CUFOA_TOGGLE
TIMER_OutputAction_TypeDef cufoa
Emlib peripheral API "assert" implementation.
TIMER_PRSSEL_TypeDef faultSourcePrsSel0
void TIMER_Reset(TIMER_TypeDef *timer)
Reset TIMER to same state as after a HW reset.
#define _TIMER_CTRL_PRESC_DIV2
TIMER_InputAction_TypeDef fallAction
__STATIC_INLINE void TIMER_Enable(TIMER_TypeDef *timer, bool enable)
Start/stop TIMER.
#define TIMER_DTLOCK_LOCKKEY_LOCK
__STATIC_INLINE void TIMER_CounterSet(TIMER_TypeDef *timer, uint32_t val)
Set TIMER counter value.
#define _TIMER_CC_CTRL_PRSSEL_PRSCH4
__STATIC_INLINE void TIMER_IntClear(TIMER_TypeDef *timer, uint32_t flags)
Clear one or more pending TIMER interrupts.
CMSIS Cortex-M Peripheral Access Layer for Silicon Laboratories microcontroller devices.
#define _TIMER_CTRL_PRESC_DIV1024
__STATIC_INLINE void TIMER_EnableDTI(TIMER_TypeDef *timer, bool enable)
Enable or disable DTI unit.
#define _TIMER_CC_CTRL_ICEVCTRL_FALLING
#define _TIMER_CC_CTRL_PRSSEL_PRSCH6
TIMER_CCMode_TypeDef mode
void TIMER_InitDTI(TIMER_TypeDef *timer, const TIMER_InitDTI_TypeDef *init)
Initialize the TIMER DTI unit.
bool invertComplementaryOut
#define _TIMER_CTRL_PRESC_DIV4
__STATIC_INLINE void TIMER_IntEnable(TIMER_TypeDef *timer, uint32_t flags)
Enable one or more TIMER interrupts.
#define _TIMER_CC_CTRL_CUFOA_CLEAR
#define _TIMER_CTRL_PRESC_DIV256
__STATIC_INLINE void TIMER_IntSet(TIMER_TypeDef *timer, uint32_t flags)
Set one or more pending TIMER interrupts from SW.
#define _TIMER_CTRL_CLKSEL_PRESCHFPERCLK
#define _TIMER_CTRL_PRESC_DIV64
TIMER_PRSSEL_TypeDef prsSel
__STATIC_INLINE void TIMER_TopBufSet(TIMER_TypeDef *timer, uint32_t val)
Set top value buffer for timer.
#define _TIMER_CTRL_FALLA_RELOADSTART
#define _TIMER_CC_CTRL_PRSSEL_PRSCH5
__STATIC_INLINE void TIMER_Lock(TIMER_TypeDef *timer)
Lock some of the TIMER registers in order to protect them from being modified.
#define _TIMER_CC_CTRL_MODE_INPUTCAPTURE
TIMER_DtiFaultAction_TypeDef faultAction
#define _TIMER_CC_CTRL_CUFOA_NONE
__STATIC_INLINE uint32_t TIMER_IntGet(TIMER_TypeDef *timer)
Get pending TIMER interrupt flags.
#define _TIMER_CTRL_PRESC_DIV8
#define _TIMER_CTRL_MODE_UPDOWN
#define _TIMER_CC_CTRL_ICEDGE_BOTH
#define _TIMER_CTRL_PRESC_DIV32
TIMER_OutputAction_TypeDef
#define _TIMER_CC_CTRL_ICEDGE_NONE
TIMER_PRSSEL_TypeDef faultSourcePrsSel1
#define _TIMER_CC_CTRL_MODE_OFF
TIMER_Event_TypeDef eventCtrl
#define _TIMER_CC_CTRL_PRSSEL_PRSCH1
TIMER_Prescale_TypeDef prescale
#define _TIMER_CC_CTRL_ICEDGE_RISING
#define _TIMER_CC_CTRL_ICEVCTRL_EVERYSECONDEDGE
__STATIC_INLINE void TIMER_CompareSet(TIMER_TypeDef *timer, unsigned int ch, uint32_t val)
Set compare value for compare/capture channel when operating in compare or PWM mode.
#define _TIMER_CC_CTRL_CUFOA_SET
__STATIC_INLINE uint32_t TIMER_CounterGet(TIMER_TypeDef *timer)
Get TIMER counter value.
#define _TIMER_CC_CTRL_PRSSEL_PRSCH3
__STATIC_INLINE uint32_t TIMER_CaptureGet(TIMER_TypeDef *timer, unsigned int ch)
Get capture value for compare/capture channel when operating in capture mode.
TIMER_PRSSEL_TypeDef prsSel
#define _TIMER_DTFC_DTFA_INACTIVE
TIMER_Prescale_TypeDef prescale
TIMER_OutputAction_TypeDef cofoa
void TIMER_Init(TIMER_TypeDef *timer, const TIMER_Init_TypeDef *init)
Initialize TIMER.
#define _TIMER_CC_CTRL_ICEVCTRL_EVERYEDGE
TIMER_DtiFaultAction_TypeDef
#define _TIMER_CTRL_MODE_DOWN
#define _TIMER_CC_CTRL_PRSSEL_PRSCH10
#define _TIMER_CC_CTRL_PRSSEL_PRSCH9
#define _TIMER_CTRL_FALLA_START
__STATIC_INLINE uint32_t TIMER_TopGet(TIMER_TypeDef *timer)
Get top value setting for timer.
#define _TIMER_CTRL_CLKSEL_CC1
#define _TIMER_CC_CTRL_PRSSEL_PRSCH0
TIMER_InputAction_TypeDef riseAction
#define _TIMER_CTRL_PRESC_DIV1
__STATIC_INLINE void TIMER_CompareBufSet(TIMER_TypeDef *timer, unsigned int ch, uint32_t val)
Set compare value buffer for compare/capture channel when operating in compare or PWM mode...
#define _TIMER_CC_CTRL_MODE_OUTPUTCOMPARE
#define _TIMER_CTRL_MODE_UP
__STATIC_INLINE uint32_t TIMER_IntGetEnabled(TIMER_TypeDef *timer)
Get enabled and pending TIMER interrupt flags. Useful for handling more interrupt sources in the same...
__STATIC_INLINE void TIMER_ClearDTIFault(TIMER_TypeDef *timer, uint32_t flags)
Clear DTI fault source flags.
#define _TIMER_CC_CTRL_PRSSEL_PRSCH2
#define TIMER_DTCTRL_DTEN
#define _TIMER_CTRL_FALLA_STOP
#define _TIMER_CC_CTRL_ICEDGE_FALLING
bool enableFaultSourceCoreLockup
bool enableFaultSourcePrsSel1
#define _TIMER_CC_CTRL_MODE_PWM
#define _TIMER_CC_CTRL_ICEVCTRL_RISING
void TIMER_InitCC(TIMER_TypeDef *timer, unsigned int ch, const TIMER_InitCC_TypeDef *init)
Initialize TIMER compare/capture channel.
TIMER_OutputAction_TypeDef cmoa
__STATIC_INLINE uint32_t TIMER_GetDTIFault(TIMER_TypeDef *timer)
Get DTI fault source flags status.
#define _TIMER_CTRL_PRESC_DIV128
#define _TIMER_CC_CTRL_PRSSEL_PRSCH8
#define _TIMER_CTRL_PRESC_DIV16
__STATIC_INLINE void TIMER_Unlock(TIMER_TypeDef *timer)
Unlock the TIMER so that writing to locked registers again is possible.
#define _TIMER_DTFC_DTFA_TRISTATE
TIMER_InputAction_TypeDef
#define _TIMER_CTRL_FALLA_NONE
#define _TIMER_CTRL_PRESC_DIV512
#define _TIMER_CC_CTRL_PRSSEL_PRSCH7
bool enableFaultSourceDebugger
#define TIMER_DTLOCK_LOCKKEY_UNLOCK