TIMER - Timer/Counter

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
 TIMER initialization structure.
 
struct  TIMER_InitCC_TypeDef
 TIMER compare/capture initialization structure.
 
struct  TIMER_InitDTI_TypeDef
 TIMER Dead Time Insertion (DTI) initialization structure.
 

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_InitDTI (TIMER_TypeDef *timer, const TIMER_InitDTI_TypeDef *init)
 Initialize the TIMER DTI unit.
 
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_EnableDTI (TIMER_TypeDef *timer, bool enable)
 Enable or disable DTI unit.
 
uint32_t TIMER_GetDTIFault (TIMER_TypeDef *timer)
 Get DTI fault source flags status.
 
void TIMER_ClearDTIFault (TIMER_TypeDef *timer, uint32_t flags)
 Clear DTI fault source flags.
 
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_Lock (TIMER_TypeDef *timer)
 Lock some TIMER registers to protect them from being modified.
 
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.
 
void TIMER_Unlock (TIMER_TypeDef *timer)
 Unlock TIMER to enable writing to locked registers again.
 

Macros

#define TIMER_INIT_DEFAULT
 Default configuration for TIMER initialization structure.
 
#define TIMER_INITCC_DEFAULT
 Default configuration for TIMER compare/capture initialization structure.
 
#define TIMER_INITDTI_DEFAULT
 Default configuration for TIMER DTI initialization structure.
 

Typedefs

typedef uint8_t TIMER_PRSSEL_TypeDef
 Peripheral Reflex System signal.
 

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
}
 Timer compare/capture mode.
 
enum  TIMER_ClkSel_TypeDef {
  timerClkSelHFPerClk = _TIMER_CTRL_CLKSEL_PRESCHFPERCLK,
  timerClkSelCC1 = _TIMER_CTRL_CLKSEL_CC1,
  timerClkSelCascade = _TIMER_CTRL_CLKSEL_TIMEROUF
}
 Clock select.
 
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
}
 Input capture edge select.
 
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
}
 Input capture event control.
 
enum  TIMER_InputAction_TypeDef {
  timerInputActionNone = _TIMER_CTRL_FALLA_NONE,
  timerInputActionStart = _TIMER_CTRL_FALLA_START,
  timerInputActionStop = _TIMER_CTRL_FALLA_STOP,
  timerInputActionReloadStart = _TIMER_CTRL_FALLA_RELOADSTART
}
 Input edge action.
 
enum  TIMER_Mode_TypeDef {
  timerModeUp = _TIMER_CTRL_MODE_UP,
  timerModeDown = _TIMER_CTRL_MODE_DOWN,
  timerModeUpDown = _TIMER_CTRL_MODE_UPDOWN,
  timerModeQDec = _TIMER_CTRL_MODE_QDEC
}
 Timer mode.
 
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
}
 Compare/capture output action.
 
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
}
 Prescaler.
 
enum  TIMER_DtiFaultAction_TypeDef {
  timerDtiFaultActionNone = _TIMER_DTFC_DTFA_NONE,
  timerDtiFaultActionInactive = _TIMER_DTFC_DTFA_INACTIVE,
  timerDtiFaultActionClear = _TIMER_DTFC_DTFA_CLEAR,
  timerDtiFaultActionTristate = _TIMER_DTFC_DTFA_TRISTATE
}
 DT (Dead Time) Fault Actions.
 
enum  TIMER_PrsOutput_t {
  timerPrsOutputPulse = 0,
  timerPrsOutputLevel = 1,
  timerPrsOutputDefault = timerPrsOutputPulse
}
 PRS Output configuration.
 

Function Documentation

◆ TIMER_Init()

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]timerA pointer to the TIMER peripheral register block.
[in]initA pointer to the TIMER initialization structure.

◆ TIMER_InitCC()

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

Initialize the TIMER compare/capture channel.

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

Parameters
[in]timerA pointer to the TIMER peripheral register block.
[in]chA compare/capture channel to initialize for.
[in]initA pointer to the TIMER initialization structure.

◆ TIMER_InitDTI()

void TIMER_InitDTI ( TIMER_TypeDef *  timer,
const TIMER_InitDTI_TypeDef init 
)

Initialize the TIMER DTI unit.

Parameters
[in]timerA pointer to the TIMER peripheral register block.
[in]initA pointer to the TIMER DTI initialization structure.

◆ TIMER_Reset()

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]timerA pointer to the TIMER peripheral register block.

◆ TIMER_Valid()

bool TIMER_Valid ( const TIMER_TypeDef *  ref)
inline

Validate the TIMER register block pointer.

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

◆ TIMER_SupportsDTI()

bool TIMER_SupportsDTI ( const TIMER_TypeDef *  ref)
inline

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

Parameters
[in]refPointer to the TIMER peripheral register block.
Returns
True if ref points to a valid timer that supports DTI, false otherwise.

◆ TIMER_MaxCount()

uint32_t TIMER_MaxCount ( const TIMER_TypeDef *  ref)
inline

Get the Max count of the timer.

Parameters
[in]refPointer 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.

◆ TIMER_CaptureGet()

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

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

Parameters
[in]timerPointer to the TIMER peripheral register block.
[in]chCompare/capture channel to access.
Returns
Current capture value.

◆ TIMER_CaptureBufGet()

uint32_t TIMER_CaptureBufGet ( TIMER_TypeDef *  timer,
unsigned int  ch 
)
inline

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

Parameters
[in]timerPointer to the TIMER peripheral register block.
[in]chCompare/capture channel to access.
Returns
Current buffered capture value.

◆ TIMER_CompareBufSet()

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

Set the compare value buffer for the 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]timerPointer to the TIMER peripheral register block.
[in]chCompare/capture channel to access.
[in]valValue to set in compare value buffer register.

◆ TIMER_CompareSet()

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

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

Parameters
[in]timerPointer to the TIMER peripheral register block.
[in]chCompare/capture channel to access.
[in]valValue to set in compare value register.

◆ TIMER_CounterGet()

uint32_t TIMER_CounterGet ( TIMER_TypeDef *  timer)
inline

Get the TIMER counter value.

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

◆ TIMER_CounterSet()

void TIMER_CounterSet ( TIMER_TypeDef *  timer,
uint32_t  val 
)
inline

Set the TIMER counter value.

Parameters
[in]timerPointer to the TIMER peripheral register block.
[in]valValue to set counter to.

◆ TIMER_Enable()

void TIMER_Enable ( TIMER_TypeDef *  timer,
bool  enable 
)
inline

Start/stop TIMER.

Parameters
[in]timerPointer to the TIMER peripheral register block.
[in]enableSet to true to enable counting; set to false otherwise.

◆ TIMER_EnableDTI()

void TIMER_EnableDTI ( TIMER_TypeDef *  timer,
bool  enable 
)
inline

Enable or disable DTI unit.

Parameters
[in]timerPointer to the TIMER peripheral register block.
[in]enableSet to true to enable DTI unit; set to false otherwise.

◆ TIMER_GetDTIFault()

uint32_t TIMER_GetDTIFault ( TIMER_TypeDef *  timer)
inline

Get DTI fault source flags status.

Note
Event bits are not cleared by this function.
Parameters
[in]timerPointer to the TIMER peripheral register block.
Returns
Status of the DTI fault source flags. Returns one or more valid DTI fault source flags (TIMER_DTFAULT_nnn) OR'ed together.

◆ TIMER_ClearDTIFault()

void TIMER_ClearDTIFault ( TIMER_TypeDef *  timer,
uint32_t  flags 
)
inline

Clear DTI fault source flags.

Parameters
[in]timerPointer to the TIMER peripheral register block.
[in]flagsDTI fault source(s) to clear. Use one or more valid DTI fault source flags (TIMER_DTFAULT_nnn) OR'ed together.

◆ TIMER_IntClear()

void TIMER_IntClear ( TIMER_TypeDef *  timer,
uint32_t  flags 
)
inline

Clear one or more pending TIMER interrupts.

Parameters
[in]timerPointer to the TIMER peripheral register block.
[in]flagsPending TIMER interrupt source(s) to clear. Use one or more valid interrupt flags for the TIMER module (TIMER_IF_nnn) OR'ed together.

◆ TIMER_IntDisable()

void TIMER_IntDisable ( TIMER_TypeDef *  timer,
uint32_t  flags 
)
inline

Disable one or more TIMER interrupts.

Parameters
[in]timerPointer to the TIMER peripheral register block.
[in]flagsTIMER interrupt source(s) to disable. Use one or more valid interrupt flags for the TIMER module (TIMER_IF_nnn) OR'ed together.

◆ TIMER_IntEnable()

void TIMER_IntEnable ( TIMER_TypeDef *  timer,
uint32_t  flags 
)
inline

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]timerPointer to the TIMER peripheral register block.
[in]flagsTIMER interrupt source(s) to enable. Use one or more valid interrupt flags for the TIMER module (TIMER_IF_nnn) OR'ed together.

◆ TIMER_IntGet()

uint32_t TIMER_IntGet ( TIMER_TypeDef *  timer)
inline

Get pending TIMER interrupt flags.

Note
Event bits are not cleared by this function.
Parameters
[in]timerPointer to the 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.

◆ TIMER_IntGetEnabled()

uint32_t TIMER_IntGetEnabled ( TIMER_TypeDef *  timer)
inline

Get enabled and pending TIMER interrupt flags.

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

Parameters
[in]timerPointer to the 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).

◆ TIMER_IntSet()

void TIMER_IntSet ( TIMER_TypeDef *  timer,
uint32_t  flags 
)
inline

Set one or more pending TIMER interrupts from SW.

Parameters
[in]timerPointer to the TIMER peripheral register block.
[in]flagsTIMER interrupt source(s) to set to pending. Use one or more valid interrupt flags for the TIMER module (TIMER_IF_nnn) OR'ed together.

◆ TIMER_Lock()

void TIMER_Lock ( TIMER_TypeDef *  timer)
inline

Lock some TIMER registers to protect them from being modified.

Refer to the reference manual for TIMER registers that will be locked.

Note
If locking the TIMER registers, they must be unlocked prior to using any TIMER API function that modifies TIMER registers protected by the lock.
Parameters
[in]timerPointer to TIMER peripheral register block.

◆ TIMER_TopBufSet()

<
void TIMER_TopBufSet ( TIMER_TypeDef *  timer,
uint32_t  val