TIMEREMLIB

Detailed Description

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).

Data Structures

struct TIMER_Init_TypeDef
struct TIMER_InitCC_TypeDef

Macros

#define TIMER_INIT_DEFAULT
#define TIMER_INITCC_DEFAULT

Enumerations

enum TIMER_CCMode_TypeDef {
timerCCModeOff = _TIMER_CC_CTRL_MODE_OFF,
timerCCModeCapture = _TIMER_CC_CTRL_MODE_INPUTCAPTURE,
timerCCModeCompare = _TIMER_CC_CTRL_MODE_OUTPUTCOMPARE,
timerCCModePWM = _TIMER_CC_CTRL_MODE_PWM
}
enum TIMER_ClkSel_TypeDef {
timerClkSelHFPerClk = _TIMER_CTRL_CLKSEL_PRESCHFPERCLK,
timerClkSelCC1 = _TIMER_CTRL_CLKSEL_CC1,
timerClkSelCascade = _TIMER_CTRL_CLKSEL_TIMEROUF
}
enum TIMER_Edge_TypeDef {
timerEdgeRising = _TIMER_CC_CTRL_ICEDGE_RISING,
timerEdgeFalling = _TIMER_CC_CTRL_ICEDGE_FALLING,
timerEdgeBoth = _TIMER_CC_CTRL_ICEDGE_BOTH,
timerEdgeNone = _TIMER_CC_CTRL_ICEDGE_NONE
}
enum TIMER_Event_TypeDef {
timerEventEveryEdge = _TIMER_CC_CTRL_ICEVCTRL_EVERYEDGE,
timerEventEvery2ndEdge = _TIMER_CC_CTRL_ICEVCTRL_EVERYSECONDEDGE,
timerEventRising = _TIMER_CC_CTRL_ICEVCTRL_RISING,
timerEventFalling = _TIMER_CC_CTRL_ICEVCTRL_FALLING
}
enum TIMER_InputAction_TypeDef {
timerInputActionNone = _TIMER_CTRL_FALLA_NONE,
timerInputActionStart = _TIMER_CTRL_FALLA_START,
timerInputActionStop = _TIMER_CTRL_FALLA_STOP,
timerInputActionReloadStart = _TIMER_CTRL_FALLA_RELOADSTART
}
enum TIMER_Mode_TypeDef {
timerModeUp = _TIMER_CTRL_MODE_UP,
timerModeDown = _TIMER_CTRL_MODE_DOWN,
timerModeUpDown = _TIMER_CTRL_MODE_UPDOWN,
timerModeQDec = _TIMER_CTRL_MODE_QDEC
}
enum TIMER_OutputAction_TypeDef {
timerOutputActionNone = _TIMER_CC_CTRL_CUFOA_NONE,
timerOutputActionToggle = _TIMER_CC_CTRL_CUFOA_TOGGLE,
timerOutputActionClear = _TIMER_CC_CTRL_CUFOA_CLEAR,
timerOutputActionSet = _TIMER_CC_CTRL_CUFOA_SET
}
enum TIMER_Prescale_TypeDef {
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
}
enum TIMER_PRSSEL_TypeDef {
timerPRSSELCh0 = _TIMER_CC_CTRL_PRSSEL_PRSCH0,
timerPRSSELCh1 = _TIMER_CC_CTRL_PRSSEL_PRSCH1,
timerPRSSELCh2 = _TIMER_CC_CTRL_PRSSEL_PRSCH2,
timerPRSSELCh3 = _TIMER_CC_CTRL_PRSSEL_PRSCH3,
timerPRSSELCh4 = _TIMER_CC_CTRL_PRSSEL_PRSCH4,
timerPRSSELCh5 = _TIMER_CC_CTRL_PRSSEL_PRSCH5,
timerPRSSELCh6 = _TIMER_CC_CTRL_PRSSEL_PRSCH6,
timerPRSSELCh7 = _TIMER_CC_CTRL_PRSSEL_PRSCH7
}

Functions

__STATIC_INLINE uint32_t TIMER_CaptureGet ( TIMER_TypeDef *timer, unsigned int ch)
Get capture value for compare/capture channel when operating in capture mode.
__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.
__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.
__STATIC_INLINE uint32_t TIMER_CounterGet ( TIMER_TypeDef *timer)
Get TIMER counter value.
__STATIC_INLINE void TIMER_CounterSet ( TIMER_TypeDef *timer, uint32_t val)
Set TIMER counter value.
__STATIC_INLINE void TIMER_Enable ( TIMER_TypeDef *timer, bool enable)
Start/stop TIMER.
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.
__STATIC_INLINE void TIMER_IntClear ( TIMER_TypeDef *timer, uint32_t flags)
Clear one or more pending TIMER interrupts.
__STATIC_INLINE void TIMER_IntDisable ( TIMER_TypeDef *timer, uint32_t flags)
Disable one or more TIMER interrupts.
__STATIC_INLINE void TIMER_IntEnable ( TIMER_TypeDef *timer, uint32_t flags)
Enable one or more TIMER interrupts.
__STATIC_INLINE uint32_t TIMER_IntGet ( TIMER_TypeDef *timer)
Get pending TIMER interrupt flags.
__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 interrupt handler.
__STATIC_INLINE void TIMER_IntSet ( TIMER_TypeDef *timer, uint32_t flags)
Set one or more pending TIMER interrupts from SW.
__STATIC_INLINE uint32_t TIMER_MaxCount (const TIMER_TypeDef *ref)
Get the Max count of the timer.
void TIMER_Reset ( TIMER_TypeDef *timer)
Reset the TIMER to the same state that it was in after a hardware reset.
__STATIC_INLINE void TIMER_TopBufSet ( TIMER_TypeDef *timer, uint32_t val)
Set top value buffer for timer.
__STATIC_INLINE uint32_t TIMER_TopGet ( TIMER_TypeDef *timer)
Get top value setting for timer.
__STATIC_INLINE void TIMER_TopSet ( TIMER_TypeDef *timer, uint32_t val)
Set top value for timer.
__STATIC_INLINE bool TIMER_Valid (const TIMER_TypeDef *ref)
Validate TIMER register block pointer.

Macro Definition Documentation

#define TIMER_INIT_DEFAULT
Value:
{ \
true, /* Enable timer when initialization completes. */ \
false, /* Stop counter during debug halt. */ \
timerPrescale1, /* No prescaling. */ \
timerClkSelHFPerClk, /* Select HFPER 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 282 of file em_timer.h .

Referenced by BOARD_init() , and USTIMER_Init() .

#define TIMER_INITCC_DEFAULT
Value:
{ \
timerEventEveryEdge, /* Event on every capture. */ \
timerEdgeRising, /* Input capture edge on rising edge. */ \
timerPRSSELCh0, /* 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, /* Select TIMERnCCx input. */ \
false, /* Clear output when counter disabled. */ \
false /* Do not invert output. */ \
}

Default configuration for TIMER compare/capture initialization structure.

Definition at line 361 of file em_timer.h .

Referenced by BOARD_init() , and USTIMER_Init() .

Enumeration Type Documentation

Timer compare/capture mode.

Enumerator
timerCCModeOff

Channel turned off.

timerCCModeCapture

Input capture.

timerCCModeCompare

Output compare.

timerCCModePWM

Pulse-Width modulation.

Definition at line 81 of file em_timer.h .

Clock select.

Enumerator
timerClkSelHFPerClk

Prescaled HFPER clock.

timerClkSelCC1

Compare/Capture Channel 1 Input.

timerClkSelCascade

Cascaded, clocked by underflow (down-counting) or overflow (up-counting) by lower numbered timer.

Definition at line 89 of file em_timer.h .

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 104 of file em_timer.h .

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 119 of file em_timer.h .

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 137 of file em_timer.h .

Timer mode.

Enumerator
timerModeUp

Up-counting.

timerModeDown

Down-counting.

timerModeUpDown

Up/down-counting.

timerModeQDec

Quadrature decoder.

Definition at line 152 of file em_timer.h .

Compare/capture output action.

Enumerator
timerOutputActionNone

No action.

timerOutputActionToggle

Toggle on event.

timerOutputActionClear

Clear on event.

timerOutputActionSet

Set on event.

Definition at line 160 of file em_timer.h .

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 175 of file em_timer.h .

Peripheral Reflex System signal.

Enumerator
timerPRSSELCh0

PRS channel 0.

timerPRSSELCh1

PRS channel 1.

timerPRSSELCh2

PRS channel 2.

timerPRSSELCh3

PRS channel 3.

timerPRSSELCh4

PRS channel 4.

timerPRSSELCh5

PRS channel 5.

timerPRSSELCh6

PRS channel 6.

timerPRSSELCh7

PRS channel 7.

Definition at line 190 of file em_timer.h .

Function Documentation

__STATIC_INLINE uint32_t TIMER_CaptureGet ( TIMER_TypeDef * timer,
unsigned int ch
)

Get capture value for compare/capture channel when operating in capture mode.

Parameters
[in] timer Pointer to TIMER peripheral register block.
[in] ch Compare/capture channel to access.
Returns
Current capture value.

Definition at line 555 of file em_timer.h .

References TIMER_TypeDef::CC , and TIMER_CC_TypeDef::CCV .

__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.

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.

Parameters
[in] timer Pointer to TIMER peripheral register block.
[in] ch Compare/capture channel to access.
[in] val Value to set in compare value buffer register.

Definition at line 579 of file em_timer.h .

References TIMER_TypeDef::CC , TIMER_CC_TypeDef::CCVB , and TIMER_MaxCount() .

Referenced by BOARD_rgbledSetRawColor() .

__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.

Parameters
[in] timer Pointer to TIMER peripheral register block.
[in] ch Compare/capture channel to access.
[in] val Value to set in compare value register.

Definition at line 601 of file em_timer.h .

References TIMER_TypeDef::CC , TIMER_CC_TypeDef::CCV , and TIMER_MaxCount() .

__STATIC_INLINE uint32_t TIMER_CounterGet ( TIMER_TypeDef * timer )

Get TIMER counter value.

Parameters
[in] timer Pointer to TIMER peripheral register block.
Returns
Current TIMER counter value.

Definition at line 619 of file em_timer.h .

References TIMER_TypeDef::CNT .

__STATIC_INLINE void TIMER_CounterSet ( TIMER_TypeDef * timer,
uint32_t val
)

Set TIMER counter value.

Parameters
[in] timer Pointer to TIMER peripheral register block.
[in] val Value to set counter to.

Definition at line 634 of file em_timer.h .

References TIMER_TypeDef::CNT , and TIMER_MaxCount() .

__STATIC_INLINE void TIMER_Enable ( TIMER_TypeDef * timer,
bool enable
)

Start/stop TIMER.

Parameters
[in] timer Pointer to TIMER peripheral register block.
[in] enable Set to true to enable counting; set to false otherwise.

Definition at line 650 of file em_timer.h .

References TIMER_TypeDef::CMD , TIMER_CMD_START , and TIMER_CMD_STOP .

Referenced by BOARD_rgbledSetRawColor() , and USTIMER_DeInit() .

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

Initialize TIMER.

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.

Parameters
[in] timer A pointer to the TIMER peripheral register block.
[in] init A pointer to the TIMER initialization structure.

Definition at line 75 of file em_timer.c .

References _TIMER_CNT_RESETVALUE , _TIMER_CTRL_CLKSEL_SHIFT , _TIMER_CTRL_FALLA_SHIFT , _TIMER_CTRL_MODE_SHIFT , _TIMER_CTRL_PRESC_SHIFT , _TIMER_CTRL_RISEA_SHIFT , TIMER_Init_TypeDef::ati , TIMER_Init_TypeDef::clkSel , TIMER_TypeDef::CMD , TIMER_TypeDef::CNT , TIMER_Init_TypeDef::count2x , TIMER_TypeDef::CTRL , TIMER_Init_TypeDef::debugRun , TIMER_Init_TypeDef::dmaClrAct , TIMER_Init_TypeDef::enable , TIMER_Init_TypeDef::fallAction , TIMER_Init_TypeDef::mode , TIMER_Init_TypeDef::oneShot , TIMER_Init_TypeDef::prescale , TIMER_Init_TypeDef::quadModeX4 , TIMER_Init_TypeDef::riseAction , TIMER_Init_TypeDef::sync , TIMER_CMD_START , TIMER_CMD_STOP , TIMER_CTRL_ATI , TIMER_CTRL_DEBUGRUN , TIMER_CTRL_DMACLRACT , TIMER_CTRL_OSMEN , TIMER_CTRL_QDM_X4 , TIMER_CTRL_SYNC , and TIMER_CTRL_X2CNT .

Referenced by BOARD_init() , and USTIMER_Init() .

void TIMER_InitCC ( TIMER_TypeDef * timer,
unsigned int ch,
const TIMER_InitCC_TypeDef * init
)
__STATIC_INLINE void TIMER_IntClear ( TIMER_TypeDef * timer,
uint32_t flags
)

Clear one or more pending TIMER interrupts.

Parameters
[in] timer Pointer to 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 740 of file em_timer.h .

References TIMER_TypeDef::IFC .

Referenced by USTIMER_DeInit() .

__STATIC_INLINE void TIMER_IntDisable ( TIMER_TypeDef * timer,
uint32_t flags
)

Disable one or more TIMER interrupts.

Parameters
[in] timer Pointer to 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 756 of file em_timer.h .

References TIMER_TypeDef::IEN .

Referenced by USTIMER_DeInit() , and USTIMER_Init() .

__STATIC_INLINE void TIMER_IntEnable ( TIMER_TypeDef * timer,
uint32_t flags
)

Enable one or more TIMER interrupts.

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.
Parameters
[in] timer Pointer to 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.

Definition at line 778 of file em_timer.h .

References TIMER_TypeDef::IEN .

__STATIC_INLINE uint32_t TIMER_IntGet ( TIMER_TypeDef * timer )

Get pending TIMER interrupt flags.

Note
Event bits are not cleared by this function.
Parameters
[in] timer Pointer to TIMER peripheral register block.
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 797 of file em_timer.h .

References TIMER_TypeDef::IF .

__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 interrupt handler.

Parameters
[in] timer Pointer to TIMER peripheral register block.
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 821 of file em_timer.h .

References TIMER_TypeDef::IEN , and TIMER_TypeDef::IF .

__STATIC_INLINE void TIMER_IntSet ( TIMER_TypeDef * timer,
uint32_t flags
)

Set one or more pending TIMER interrupts from SW.

Parameters
[in] timer Pointer to 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 844 of file em_timer.h .

References TIMER_TypeDef::IFS .

__STATIC_INLINE uint32_t TIMER_MaxCount ( const TIMER_TypeDef * ref )

Get the Max count of the timer.

Parameters
[in] timer Pointer to 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 519 of file em_timer.h .

Referenced by TIMER_CompareBufSet() , TIMER_CompareSet() , TIMER_CounterSet() , TIMER_TopBufSet() , and TIMER_TopSet() .

void TIMER_Reset ( TIMER_TypeDef * timer )

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

Note
The ROUTE register is NOT reset by this function to allow for a centralized setup of this feature.
Parameters
[in] timer A pointer to the TIMER peripheral register block.

Definition at line 212 of file em_timer.c .

References _TIMER_CC_CCV_RESETVALUE , _TIMER_CC_CCVB_RESETVALUE , _TIMER_CC_CTRL_RESETVALUE , _TIMER_CNT_RESETVALUE , _TIMER_CTRL_RESETVALUE , _TIMER_IEN_RESETVALUE , _TIMER_IFC_MASK , _TIMER_TOP_RESETVALUE , _TIMER_TOPB_RESETVALUE , TIMER_TypeDef::CC , TIMER_CC_TypeDef::CCV , TIMER_CC_TypeDef::CCVB , TIMER_TypeDef::CMD , TIMER_TypeDef::CNT , TIMER_CC_TypeDef::CTRL , TIMER_TypeDef::CTRL , TIMER_TypeDef::IEN , TIMER_TypeDef::IFC , TIMER_CMD_STOP , TIMER_TypeDef::TOP , and TIMER_TypeDef::TOPB .

__STATIC_INLINE void TIMER_TopBufSet ( TIMER_TypeDef * timer,
uint32_t val
)

Set top value buffer for timer.

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.

Parameters
[in] timer Pointer to TIMER peripheral register block.
[in] val Value to set in top value buffer register.

Definition at line 890 of file em_timer.h .

References TIMER_MaxCount() , and TIMER_TypeDef::TOPB .

__STATIC_INLINE uint32_t TIMER_TopGet ( TIMER_TypeDef * timer )

Get top value setting for timer.

Parameters
[in] timer Pointer to TIMER peripheral register block.
Returns
Current top value.

Definition at line 906 of file em_timer.h .

References TIMER_TypeDef::TOP .

__STATIC_INLINE void TIMER_TopSet ( TIMER_TypeDef * timer,
uint32_t val
)

Set top value for timer.

Parameters
[in] timer Pointer to TIMER peripheral register block.
[in] val Value to set in top value register.

Definition at line 921 of file em_timer.h .

References TIMER_MaxCount() , and TIMER_TypeDef::TOP .

Referenced by BOARD_init() , and USTIMER_Init() .

__STATIC_INLINE bool TIMER_Valid ( const TIMER_TypeDef * ref )

Validate TIMER register block pointer.

Parameters
[in] ref Pointer to TIMER peripheral register block.
Returns
True if ref points to a valid timer, false otherwise.

Definition at line 472 of file em_timer.h .

References TIMER0 , and TIMER1 .