TIMER - Timer/Counter#

Timer/Counter (TIMER) Peripheral API.

The timer module consists of three main parts:

  • General timer configuration and enable control.

  • Compare/capture control.

  • Dead time insertion control (may not be available for all timers).

Modules#

TIMER_Init_TypeDef

TIMER_InitCC_TypeDef

Enumerations#

enum
timerCCModeOff = _TIMER_CC_CTRL_MODE_OFF
timerCCModeCapture = _TIMER_CC_CTRL_MODE_INPUTCAPTURE
timerCCModeCompare = _TIMER_CC_CTRL_MODE_OUTPUTCOMPARE
timerCCModePWM = _TIMER_CC_CTRL_MODE_PWM
}

Timer compare/capture mode.

enum
timerClkSelHFPerClk = _TIMER_CTRL_CLKSEL_PRESCHFPERCLK
timerClkSelCC1 = _TIMER_CTRL_CLKSEL_CC1
timerClkSelCascade = _TIMER_CTRL_CLKSEL_TIMEROUF
}

Clock select.

enum
timerEdgeRising = _TIMER_CC_CTRL_ICEDGE_RISING
timerEdgeFalling = _TIMER_CC_CTRL_ICEDGE_FALLING
timerEdgeBoth = _TIMER_CC_CTRL_ICEDGE_BOTH
timerEdgeNone = _TIMER_CC_CTRL_ICEDGE_NONE
}

Input capture edge select.

enum
timerEventEveryEdge = _TIMER_CC_CTRL_ICEVCTRL_EVERYEDGE
timerEventEvery2ndEdge = _TIMER_CC_CTRL_ICEVCTRL_EVERYSECONDEDGE
timerEventRising = _TIMER_CC_CTRL_ICEVCTRL_RISING
timerEventFalling = _TIMER_CC_CTRL_ICEVCTRL_FALLING
}

Input capture event control.

enum
timerInputActionNone = _TIMER_CTRL_FALLA_NONE
timerInputActionStart = _TIMER_CTRL_FALLA_START
timerInputActionStop = _TIMER_CTRL_FALLA_STOP
timerInputActionReloadStart = _TIMER_CTRL_FALLA_RELOADSTART
}

Input edge action.

enum
timerModeUp = _TIMER_CTRL_MODE_UP
timerModeDown = _TIMER_CTRL_MODE_DOWN
timerModeUpDown = _TIMER_CTRL_MODE_UPDOWN
timerModeQDec = _TIMER_CTRL_MODE_QDEC
}

Timer mode.

enum
timerOutputActionNone = _TIMER_CC_CTRL_CUFOA_NONE
timerOutputActionToggle = _TIMER_CC_CTRL_CUFOA_TOGGLE
timerOutputActionClear = _TIMER_CC_CTRL_CUFOA_CLEAR
timerOutputActionSet = _TIMER_CC_CTRL_CUFOA_SET
}

Compare/capture output action.

enum
timerPrescale1 = _TIMER_CTRL_PRESC_DIV1
timerPrescale2 = _TIMER_CTRL_PRESC_DIV2
timerPrescale4 = _TIMER_CTRL_PRESC_DIV4
timerPrescale8 = _TIMER_CTRL_PRESC_DIV8
timerPrescale16 = _TIMER_CTRL_PRESC_DIV16
timerPrescale32 = _TIMER_CTRL_PRESC_DIV32
timerPrescale64 = _TIMER_CTRL_PRESC_DIV64
timerPrescale128 = _TIMER_CTRL_PRESC_DIV128
timerPrescale256 = _TIMER_CTRL_PRESC_DIV256
timerPrescale512 = _TIMER_CTRL_PRESC_DIV512
timerPrescale1024 = _TIMER_CTRL_PRESC_DIV1024
}

Prescaler.

enum
timerPrsOutputPulse = 0
timerPrsOutputLevel = 1
timerPrsOutputDefault = timerPrsOutputPulse
}

PRS Output configuration.

Typedefs#

typedef uint8_t

Peripheral Reflex System signal.

Functions#

void
TIMER_Init(TIMER_TypeDef *timer, const TIMER_Init_TypeDef *init)

Initialize TIMER.

void
TIMER_InitCC(TIMER_TypeDef *timer, unsigned int ch, const TIMER_InitCC_TypeDef *init)

Initialize the TIMER compare/capture channel.

void
TIMER_Reset(TIMER_TypeDef *timer)

Reset the TIMER to the same state that it was in after a hardware reset.

bool
TIMER_Valid(const TIMER_TypeDef *ref)

Validate the TIMER register block pointer.

bool
TIMER_SupportsDTI(const TIMER_TypeDef *ref)

Check whether the TIMER is valid and supports Dead Timer Insertion (DTI).

uint32_t
TIMER_MaxCount(const TIMER_TypeDef *ref)

Get the Max count of the timer.

uint32_t
TIMER_CaptureGet(TIMER_TypeDef *timer, unsigned int ch)

Get compare/capture value for the compare/capture channel.

uint32_t
TIMER_CaptureBufGet(TIMER_TypeDef *timer, unsigned int ch)

Get the buffered compare/capture value for compare/capture channel.

void
TIMER_CompareBufSet(TIMER_TypeDef *timer, unsigned int ch, uint32_t val)

Set the compare value buffer for the compare/capture channel when operating in compare or PWM mode.

void
TIMER_CompareSet(TIMER_TypeDef *timer, unsigned int ch, uint32_t val)

Set the compare value for compare/capture channel when operating in compare or PWM mode.

uint32_t
TIMER_CounterGet(TIMER_TypeDef *timer)

Get the TIMER counter value.

void
TIMER_CounterSet(TIMER_TypeDef *timer, uint32_t val)

Set the TIMER counter value.

void
TIMER_Enable(TIMER_TypeDef *timer, bool enable)

Start/stop TIMER.

void
TIMER_IntClear(TIMER_TypeDef *timer, uint32_t flags)

Clear one or more pending TIMER interrupts.

void
TIMER_IntDisable(TIMER_TypeDef *timer, uint32_t flags)

Disable one or more TIMER interrupts.

void
TIMER_IntEnable(TIMER_TypeDef *timer, uint32_t flags)

Enable one or more TIMER interrupts.

uint32_t
TIMER_IntGet(TIMER_TypeDef *timer)

Get pending TIMER interrupt flags.

uint32_t
TIMER_IntGetEnabled(TIMER_TypeDef *timer)

Get enabled and pending TIMER interrupt flags.

void
TIMER_IntSet(TIMER_TypeDef *timer, uint32_t flags)

Set one or more pending TIMER interrupts from SW.

void
TIMER_TopBufSet(TIMER_TypeDef *timer, uint32_t val)

Set the top value buffer for the timer.

uint32_t
TIMER_TopGet(TIMER_TypeDef *timer)

Get the top value setting for the timer.

void
TIMER_TopSet(TIMER_TypeDef *timer, uint32_t val)

Set the top value for timer.

Macros#

#define

Default configuration for TIMER initialization structure.

#define

Default configuration for TIMER compare/capture initialization structure.

Enumeration Documentation#

TIMER_CCMode_TypeDef#

TIMER_CCMode_TypeDef

Timer compare/capture mode.

Enumerator
timerCCModeOff

Channel turned off.

timerCCModeCapture

Input capture.

timerCCModeCompare

Output compare.

timerCCModePWM

Pulse-Width modulation.


Definition at line 87 of file platform/emlib/inc/em_timer.h

TIMER_ClkSel_TypeDef#

TIMER_ClkSel_TypeDef

Clock select.

Enumerator
timerClkSelHFPerClk

Prescaled HFPER / HFPERB clock.

timerClkSelCC1

Compare/Capture Channel 1 Input.

timerClkSelCascade

Cascaded clocked by underflow or overflow by lower numbered timer.


Definition at line 103 of file platform/emlib/inc/em_timer.h

TIMER_Edge_TypeDef#

TIMER_Edge_TypeDef

Input capture edge select.

Enumerator
timerEdgeRising

Rising edges detected.

timerEdgeFalling

Falling edges detected.

timerEdgeBoth

Both edges detected.

timerEdgeNone

No edge detection, leave signal as is.


Definition at line 117 of file platform/emlib/inc/em_timer.h

TIMER_Event_TypeDef#

TIMER_Event_TypeDef

Input capture event control.

Enumerator
timerEventEveryEdge

PRS output pulse, interrupt flag, and DMA request set on every capture.

timerEventEvery2ndEdge

PRS output pulse, interrupt flag, and DMA request set on every second capture.

timerEventRising

PRS output pulse, interrupt flag, and DMA request set on rising edge (if input capture edge = BOTH).

timerEventFalling

PRS output pulse, interrupt flag, and DMA request set on falling edge (if input capture edge = BOTH).


Definition at line 132 of file platform/emlib/inc/em_timer.h

TIMER_InputAction_TypeDef#

TIMER_InputAction_TypeDef

Input edge action.

Enumerator
timerInputActionNone

No action taken.

timerInputActionStart

Start counter without reload.

timerInputActionStop

Stop counter without reload.

timerInputActionReloadStart

Reload and start counter.


Definition at line 150 of file platform/emlib/inc/em_timer.h

TIMER_Mode_TypeDef#

TIMER_Mode_TypeDef

Timer mode.

Enumerator
timerModeUp

Up-counting.

timerModeDown

Down-counting.

timerModeUpDown

Up/down-counting.

timerModeQDec

Quadrature decoder.


Definition at line 165 of file platform/emlib/inc/em_timer.h

TIMER_OutputAction_TypeDef#

TIMER_OutputAction_TypeDef

Compare/capture output action.

Enumerator
timerOutputActionNone

No action.

timerOutputActionToggle

Toggle on event.

timerOutputActionClear

Clear on event.

timerOutputActionSet

Set on event.


Definition at line 181 of file platform/emlib/inc/em_timer.h

TIMER_Prescale_TypeDef#

TIMER_Prescale_TypeDef

Prescaler.

Enumerator
timerPrescale1

Divide by 1.

timerPrescale2

Divide by 2.

timerPrescale4

Divide by 4.

timerPrescale8

Divide by 8.

timerPrescale16

Divide by 16.

timerPrescale32

Divide by 32.

timerPrescale64

Divide by 64.

timerPrescale128

Divide by 128.

timerPrescale256

Divide by 256.

timerPrescale512

Divide by 512.

timerPrescale1024

Divide by 1024.


Definition at line 196 of file platform/emlib/inc/em_timer.h

TIMER_PrsOutput_t#

TIMER_PrsOutput_t

PRS Output configuration.

Enumerator
timerPrsOutputPulse

Pulse PRS output from a channel.

timerPrsOutputLevel

PRS output follows CC out level.

timerPrsOutputDefault

Default PRS output behavior.


Definition at line 383 of file platform/emlib/inc/em_timer.h

Typedef Documentation#

TIMER_PRSSEL_TypeDef#

typedef uint8_t TIMER_PRSSEL_TypeDef

Peripheral Reflex System signal.


Definition at line 226 of file platform/emlib/inc/em_timer.h

Function Documentation#

TIMER_Init#

void TIMER_Init (TIMER_TypeDef * timer, const TIMER_Init_TypeDef * init)

Initialize TIMER.

Parameters
[in]timer

A pointer to the TIMER peripheral register block.

[in]init

A pointer to the TIMER initialization structure.

Notice that the counter top must be configured separately with, for instance TIMER_TopSet(). In addition, compare/capture and dead-time insertion initialization must be initialized separately if used, which should probably be done prior to using this function if configuring the TIMER to start when initialization is completed.


Definition at line 163 of file platform/emlib/src/em_timer.c

TIMER_InitCC#

void TIMER_InitCC (TIMER_TypeDef * timer, unsigned int ch, const TIMER_InitCC_TypeDef * init)

Initialize the TIMER compare/capture channel.

Parameters
[in]timer

A pointer to the TIMER peripheral register block.

[in]ch

A compare/capture channel to initialize for.

[in]init

A pointer to the TIMER initialization structure.

Notice that if operating the channel in compare mode, the CCV and CCVB register must be set separately, as required.


Definition at line 247 of file platform/emlib/src/em_timer.c

TIMER_Reset#

void TIMER_Reset (TIMER_TypeDef * timer)

Reset the TIMER to the same state that it was in after a hardware reset.

Parameters
[in]timer

A pointer to the TIMER peripheral register block.

Note

  • The ROUTE register is NOT reset by this function to allow for a centralized setup of this feature.


Definition at line 413 of file platform/emlib/src/em_timer.c

TIMER_Valid#

bool TIMER_Valid (const TIMER_TypeDef * ref)

Validate the TIMER register block pointer.

Parameters
[in]ref

Pointer to the TIMER peripheral register block.

Returns

  • True if ref points to a valid timer, false otherwise.


Definition at line 582 of file platform/emlib/inc/em_timer.h

TIMER_SupportsDTI#

bool TIMER_SupportsDTI (const TIMER_TypeDef * ref)

Check whether the TIMER is valid and supports Dead Timer Insertion (DTI).

Parameters
[in]ref

Pointer to the TIMER peripheral register block.

Returns

  • True if ref points to a valid timer that supports DTI, false otherwise.


Definition at line 631 of file platform/emlib/inc/em_timer.h

TIMER_MaxCount#

uint32_t TIMER_MaxCount (const TIMER_TypeDef * ref)

Get the Max count of the timer.

Parameters
[in]ref

Pointer to the TIMER peripheral register block.

Returns

  • The max count value of the timer. This is 0xFFFF for 16 bit timers and 0xFFFFFFFF for 32 bit timers.


Definition at line 681 of file platform/emlib/inc/em_timer.h

TIMER_CaptureGet#

uint32_t TIMER_CaptureGet (TIMER_TypeDef * timer, unsigned int ch)

Get compare/capture value for the compare/capture channel.

Parameters
[in]timer

Pointer to the TIMER peripheral register block.

[in]ch

Compare/capture channel to access.

Returns

  • Current capture value.


Definition at line 723 of file platform/emlib/inc/em_timer.h

TIMER_CaptureBufGet#

uint32_t TIMER_CaptureBufGet (TIMER_TypeDef * timer, unsigned int ch)

Get the buffered compare/capture value for compare/capture channel.

Parameters
[in]timer

Pointer to the TIMER peripheral register block.

[in]ch

Compare/capture channel to access.

Returns

  • Current buffered capture value.


Definition at line 749 of file platform/emlib/inc/em_timer.h

TIMER_CompareBufSet#

void TIMER_CompareBufSet (TIMER_TypeDef * timer, unsigned int ch, uint32_t val)

Set the compare value buffer for the compare/capture channel when operating in compare or PWM mode.

Parameters
[in]timer

Pointer to the TIMER peripheral register block.

[in]ch

Compare/capture channel to access.

[in]val

Value to set in compare value buffer register.

The compare value buffer holds the value which will be written to TIMERn_CCx_CCV on an update event if the buffer has been updated since the last event.


Definition at line 781 of file platform/emlib/inc/em_timer.h

TIMER_CompareSet#

void TIMER_CompareSet (TIMER_TypeDef * timer, unsigned int ch, uint32_t val)

Set the compare value for compare/capture channel when operating in compare or PWM mode.

Parameters
[in]timer

Pointer to the TIMER peripheral register block.

[in]ch

Compare/capture channel to access.

[in]val

Value to set in compare value register.


Definition at line 808 of file platform/emlib/inc/em_timer.h

TIMER_CounterGet#

uint32_t TIMER_CounterGet (TIMER_TypeDef * timer)

Get the TIMER counter value.

Parameters
[in]timer

Pointer to TIMER peripheral register block.

Returns

  • Current TIMER counter value.


Definition at line 831 of file platform/emlib/inc/em_timer.h

TIMER_CounterSet#

void TIMER_CounterSet (TIMER_TypeDef * timer, uint32_t val)

Set the TIMER counter value.

Parameters
[in]timer

Pointer to the TIMER peripheral register block.

[in]val

Value to set counter to.


Definition at line 846 of file platform/emlib/inc/em_timer.h

TIMER_Enable#

void TIMER_Enable (TIMER_TypeDef * timer, bool enable)

Start/stop TIMER.

Parameters
[in]timer

Pointer to the TIMER peripheral register block.

[in]enable

Set to true to enable counting; set to false otherwise.


Definition at line 876 of file platform/emlib/inc/em_timer.h

TIMER_IntClear#

void TIMER_IntClear (TIMER_TypeDef * timer, uint32_t flags)

Clear one or more pending TIMER interrupts.

Parameters
[in]timer

Pointer to the TIMER peripheral register block.

[in]flags

Pending TIMER interrupt source(s) to clear. Use one or more valid interrupt flags for the TIMER module (TIMER_IF_nnn) OR'ed together.


Definition at line 986 of file platform/emlib/inc/em_timer.h

TIMER_IntDisable#

void TIMER_IntDisable (TIMER_TypeDef * timer, uint32_t flags)

Disable one or more TIMER interrupts.

Parameters
[in]timer

Pointer to the TIMER peripheral register block.

[in]flags

TIMER interrupt source(s) to disable. Use one or more valid interrupt flags for the TIMER module (TIMER_IF_nnn) OR'ed together.


Definition at line 1006 of file platform/emlib/inc/em_timer.h

TIMER_IntEnable#

void TIMER_IntEnable (TIMER_TypeDef * timer, uint32_t flags)

Enable one or more TIMER interrupts.

Parameters
[in]timer

Pointer to the TIMER peripheral register block.

[in]flags

TIMER interrupt source(s) to enable. Use one or more valid interrupt flags for the TIMER module (TIMER_IF_nnn) OR'ed together.

Note

  • Depending on the use, a pending interrupt may already be set prior to enabling the interrupt. To ignore a pending interrupt, consider using TIMER_IntClear() prior to enabling the interrupt.


Definition at line 1028 of file platform/emlib/inc/em_timer.h

TIMER_IntGet#

uint32_t TIMER_IntGet (TIMER_TypeDef * timer)

Get pending TIMER interrupt flags.

Parameters
[in]timer

Pointer to the TIMER peripheral register block.

Note

  • Event bits are not cleared by this function.

Returns

  • TIMER interrupt source(s) pending. Returns one or more valid interrupt flags for the TIMER module (TIMER_IF_nnn) OR'ed together.


Definition at line 1047 of file platform/emlib/inc/em_timer.h

TIMER_IntGetEnabled#

uint32_t TIMER_IntGetEnabled (TIMER_TypeDef * timer)

Get enabled and pending TIMER interrupt flags.

Parameters
[in]timer

Pointer to the TIMER peripheral register block.

Useful for handling more interrupt sources in the same interrupt handler.

Note

  • Interrupt flags are not cleared by this function.

Returns

  • Pending and enabled TIMER interrupt sources. The return value is the bitwise AND combination of

    • the OR combination of enabled interrupt sources in TIMERx_IEN_nnn register (TIMERx_IEN_nnn) and

    • the OR combination of valid interrupt flags of the TIMER module (TIMERx_IF_nnn).


Definition at line 1071 of file platform/emlib/inc/em_timer.h

TIMER_IntSet#

void TIMER_IntSet (TIMER_TypeDef * timer, uint32_t flags)

Set one or more pending TIMER interrupts from SW.

Parameters
[in]timer

Pointer to the TIMER peripheral register block.

[in]flags

TIMER interrupt source(s) to set to pending. Use one or more valid interrupt flags for the TIMER module (TIMER_IF_nnn) OR'ed together.


Definition at line 1094 of file platform/emlib/inc/em_timer.h

TIMER_TopBufSet#

void TIMER_TopBufSet (TIMER_TypeDef * timer, uint32_t val)

Set the top value buffer for the timer.

Parameters
[in]timer

Pointer to the TIMER peripheral register block.

[in]val

Value to set in top value buffer register.

When top value buffer register is updated, value is loaded into top value register at the next wrap around. This feature is useful in order to update top value safely when timer is running.


Definition at line 1147 of file platform/emlib/inc/em_timer.h

TIMER_TopGet#

uint32_t TIMER_TopGet (TIMER_TypeDef * timer)

Get the top value setting for the timer.

Parameters
[in]timer

Pointer to the TIMER peripheral register block.

Returns

  • Current top value.


Definition at line 1167 of file platform/emlib/inc/em_timer.h

TIMER_TopSet#

void TIMER_TopSet (TIMER_TypeDef * timer, uint32_t val)

Set the top value for timer.

Parameters
[in]timer

Pointer to the TIMER peripheral register block.

[in]val

Value to set in top value register.


Definition at line 1182 of file platform/emlib/inc/em_timer.h

Macro Definition Documentation#

TIMER_INIT_DEFAULT#

#define TIMER_INIT_DEFAULT
Value:
{ \
true, /* Enable timer when initialization completes. */ \
false, /* Stop counter during debug halt. */ \
timerPrescale1, /* No prescaling. */ \
timerClkSelHFPerClk, /* Select HFPER / HFPERB clock. */ \
false, /* Not 2x count mode. */ \
false, /* No ATI. */ \
timerInputActionNone, /* No action on falling input edge. */ \
timerInputActionNone, /* No action on rising input edge. */ \
timerModeUp, /* Up-counting. */ \
false, /* Do not clear DMA requests when DMA channel is active. */ \
false, /* Select X2 quadrature decode mode (if used). */ \
false, /* Disable one shot. */ \
false /* Not started/stopped/reloaded by other timers. */ \
}

Default configuration for TIMER initialization structure.


Definition at line 348 of file platform/emlib/inc/em_timer.h

TIMER_INITCC_DEFAULT#

#define TIMER_INITCC_DEFAULT
Value:
{ \
timerEventEveryEdge, /* Event on every capture. */ \
timerEdgeRising, /* Input capture edge on rising edge. */ \
0, /* Not used by default, select PRS channel 0. */ \
timerOutputActionNone, /* No action on underflow. */ \
timerOutputActionNone, /* No action on overflow. */ \
timerOutputActionNone, /* No action on match. */ \
timerCCModeOff, /* Disable compare/capture channel. */ \
false, /* Disable filter. */ \
false, /* No PRS input. */ \
false, /* Clear output when counter disabled. */ \
false, /* Do not invert output. */ \
timerPrsOutputDefault, /* Use default PRS output configuration. */ \
}

Default configuration for TIMER compare/capture initialization structure.


Definition at line 465 of file platform/emlib/inc/em_timer.h