Kinetis SDK v.1.2 API Reference Manual  Rev. 0
Freescale Semiconductor, Inc.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
FlexTimer Peripheral Driver

Overview

This section describes the programming interface of the FlexTimer Peripheral driver.

FlexTimer Overview

The FlexTimer module is a timer that supports input capture, output compare, and generation of PWM signals. The current Kinetis SDK driver only supports the generation of PWM signals. The input capture and output compare will be supported in upcoming Kinetis SDK releases.

FlexTimer Initialization

  1. To initialize the FlexTimer driver, call the FTM_DRV_Init() function and pass the instance number of the relevant FTM. For example, to use FTM0, pass a value of 0 to the initialization function.
  2. Pass a user configuration structure ftm_user_config_t, as shown here:
// FTM configuration structure
typedef struct FtmUserConfig {
uint8_t tofFrequency;
bool isFTMMode;
uint8_t BDMMode;
bool isWriteProtection;
bool isTimerOverFlowInterrupt;
bool isFaultInterrupt;

FlexTimer Generate a PWM signal

FTM calls the FTM_DRV_PwmStart() function to generate a PWM signal. Use this structure to configure different parameters for the PWM signal:

typedef struct FtmPwmParam
{
uint32_t uFrequencyHZ;
uint32_t uDutyCyclePercent;
0 = inactive signal(0% duty cycle)...
100 = active signal (100% duty cycle). //
uint16_t uFirstEdgeDelayPercent;
Specifies the delay to the first edge in a PWM period.
If unsure leave as 0. Should be specified as
percentage of the PWM period//

The mode options are kFtmEdgeAlignedPWM, kFtmCenterAlignedPWM, and kFtmCombinedPWM. For edge mode, the options available are kFtmHighTrue and kFtmLowTrue. Specify the PWM signal frequency in Hertz and the duty cycle percentage (value between 0-100). If the PWM mode is kFtmCombinedPWM and if the user chooses to specify a value for the uFirstEdgeDelayPercent, start of the PWM pulse is delayed.

Enumerations

enum  quadtmr_ip_bus_clock_source_t {
  kQuadTmrIpBusClkDiv1 = 0,
  kQuadTmrIpBusClkDiv2,
  kQuadTmrIpBusClkDiv4,
  kQuadTmrIpBusClkDiv8,
  kQuadTmrIpBusClkDiv16,
  kQuadTmrIpBusClkDiv32,
  kQuadTmrIpBusClkDiv64,
  kQuadTmrIpBusClkDiv128
}
 Quad timer IP bus clock options to run the counter. More...
 

Functions

void QUADTMR_DRV_Init (uint8_t instance)
 Initializes the Quad Timer driver. More...
 
void QUADTMR_DRV_Deinit (uint8_t instance)
 Shuts down the Quad Timer driver. More...
 
void QUADTMR_DRV_Start64BitCounter (quadtmr_pri_count_source_t clk)
 Provides a 64-bit counter. More...
 
uint64_t QUADTMR_DRV_Get64BitCountVal (void)
 Gets the current count value when running in 64-bit mode. More...
 
void QUADTMR_DRV_SetupFlexPwm (uint8_t instance, quadtmr_ip_bus_clock_source_t clockSrc, uint32_t pwmPulsePeriod, uint32_t pulseWidthPeriod)
 Provides the PWM signal. More...
 
void QUADTMR_DRV_UpdatePwm (uint8_t instance, uint32_t pwmPulsePeriod, uint32_t pulseWidthPeriod)
 Provides a way to update the current PWM signal. More...
 
void QUADTMR_DRV_IRQHandler (uint8_t instance)
 Action to take when a Quad Timer interrupt is triggered. More...
 

Variables

TMR_Type *const g_quadtmrBase [TMR_INSTANCE_COUNT]
 Table of base addresses for Quad Timer instances. More...
 
const IRQn_Type g_quadtmrIrqId [TMR_INSTANCE_COUNT]
 Table to save Quad Timer IRQ enumeration numbers defined in the CMSIS header file. More...
 

Enumeration Type Documentation

Enumerator
kQuadTmrIpBusClkDiv1 

IP Bus clock Div 1.

kQuadTmrIpBusClkDiv2 

IP Bus clock Div 2.

kQuadTmrIpBusClkDiv4 

IP Bus clock Div 4.

kQuadTmrIpBusClkDiv8 

IP Bus clock Div 8.

kQuadTmrIpBusClkDiv16 

IP Bus clock Div 16.

kQuadTmrIpBusClkDiv32 

IP Bus clock Div 32.

kQuadTmrIpBusClkDiv64 

IP Bus clock Div 64.

kQuadTmrIpBusClkDiv128 

IP Bus clock Div 128.

Function Documentation

void QUADTMR_DRV_Init ( uint8_t  instance)

Initializes the Quad Timer registers, un-gates the module clock and enables Quad Timer interrupt in the system interrupt controller.

Parameters
instanceThe Quad Timer peripheral instance number.
void QUADTMR_DRV_Deinit ( uint8_t  instance)

Gates the module clock and disables the interrupt in the system interrupt controller.

Parameters
instanceThe Quad Timer peripheral instance number.
void QUADTMR_DRV_Start64BitCounter ( quadtmr_pri_count_source_t  clk)

The user gets to choose which source clock is used by the counter. The user must ensure that the QUADTMR_DRV_Init() function is called on all timer instances because all timer instances are used in this mode. Timer 0 is clocked via the source clock and Timers 1, 2, and 3 are set up in the cascade mode. All 4 counters count up to 0xFFFF, then roll-over and continue counting.

Parameters
clkSource clock that feeds timer 0 counter.
uint64_t QUADTMR_DRV_Get64BitCountVal ( void  )

The function reads all 4 timer values and returns the value.

Returns
The current value of all 4 counters is concatenated to a 64-bit value.
void QUADTMR_DRV_SetupFlexPwm ( uint8_t  instance,
quadtmr_ip_bus_clock_source_t  clockSrc,
uint32_t  pwmPulsePeriod,
uint32_t  pulseWidthPeriod 
)

The user provides the input clock source which is derived from the IP Bus clock. The user also provides the desired PWM signal's period in microseconds and the pulse width in microseconds. This function enables the pre-load function for each compare register to allow updating the PWM signal characteristics at a later time.

Parameters
instanceThe Quad timer peripheral instance number.
clockSrcCounter source clock, options available in quadtmr_ip_bus_clock_source_t enum
pwmPulsePeriodPWM period specified in microseconds
pulseWidthPeriodPWM pulse width specified in microseconds
void QUADTMR_DRV_UpdatePwm ( uint8_t  instance,
uint32_t  pwmPulsePeriod,
uint32_t  pulseWidthPeriod 
)

Prior to calling this function, the user should call the QUADTMR_DRV_SetupFlexPwm() function to start outputting a PWM signal. Call this function to update the PWM's period and/or pulse width. The PWM continues to be derived from the clock source provided during setup.

Parameters
instanceThe Quad timer peripheral instance number.
pwmPulsePeriodUpdated PWM period specified in microseconds
pulseWidthPeriodUpdated PWM pulse width specified in microseconds
void QUADTMR_DRV_IRQHandler ( uint8_t  instance)

The timer compare flags are checked and cleared if set.

Parameters
instanceThe Quad timer peripheral instance number.

Variable Documentation

TMR_Type* const g_quadtmrBase[TMR_INSTANCE_COUNT]
const IRQn_Type g_quadtmrIrqId[TMR_INSTANCE_COUNT]