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 (