All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
PIT: Periodic Interrupt Timer

## Overview

The KSDK provides a driver for the Periodic Interrupt Timer (PIT) of Kinetis devices.

# Function groups

The PIT driver supports operating the module as a time counter.

## Initialization and deinitialization

The function PIT_Init() initializes the PIT with specified configurations. The function PIT_GetDefaultConfig() gets the default configurations. The initialization function configures the PIT operation in debug mode.

The function PIT_SetTimerChainMode() configures the chain mode operation of each PIT channel.

The function PIT_Deinit() disables the PIT timers and disables the module clock.

## Timer period Operations

The function PITR_SetTimerPeriod() sets the timer period in units of count. Timers begin counting down from the value set by this function until it reaches 0.

The function PIT_GetCurrentTimerCount() reads the current timer counting value. This function returns the real-time timer counting value, in a range from 0 to a timer period.

The timer period operation functions takes the count value in ticks. User can call the utility macros provided in fsl_common.h to convert to microseconds or milliseconds

## Start and Stop timer operations

The function PIT_StartTimer() starts the timer counting. After calling this function, the timer loads the period value set earlier via the PIT_SetPeriod() function and starts counting down to 0. When the timer reaches 0, it generates a trigger pulse and sets the timeout interrupt flag.

The function PIT_StopTimer() stops the timer counting.

## Status

Provides functions to get and clear the PIT status.

## Interrupt

Provides functions to enable/disable PIT interrupts and get current enabled interrupts.

# Typical use case

## PIT tick example

Updates the PIT period and toggles an LED periodically.

int main(void)
{
/* Structure of initialize PIT */
pit_config_t pitConfig;
/* Initialize and enable LED */
LED_INIT();
/* Board pin, clock, debug console init */
BOARD_InitHardware();
PIT_GetDefaultConfig(&pitConfig);
/* Init pit module */
PIT_Init(PIT, &pitConfig);
/* Set timer period for channel 0 */
PIT_SetTimerPeriod(PIT, kPIT_Chnl_0, USEC_TO_COUNT(1000000U, PIT_SOURCE_CLOCK));
/* Enable timer interrupts for channel 0 */
PIT_EnableInterrupts(PIT, kPIT_Chnl_0, kPIT_TimerInterruptEnable);
/* Enable at the NVIC */
EnableIRQ(PIT_IRQ_ID);
/* Start channel 0 */
PRINTF("\r\nStarting channel No.0 ...");
PIT_StartTimer(PIT, kPIT_Chnl_0);
while (true)
{
/* Check whether occur interupt and toggle LED */
if (true == pitIsrFlag)
{
PRINTF("\r\n Channel No.0 interrupt is occured !");
LED_TOGGLE();
pitIsrFlag = false;
}
}
}

## Data Structures

struct | pit_config_t
| PIT config structure. More...

## Enumerations

enum | pit_chnl_t { kPIT_Chnl_0 = 0U, kPIT_Chnl_1, kPIT_Chnl_2, kPIT_Chnl_3 }
| List of PIT channels. More...
enum | pit_interrupt_enable_t { kPIT_TimerInterruptEnable = PIT_TCTRL_TIE_MASK }
| List of PIT interrupts. More...
enum | pit_status_flags_t { kPIT_TimerFlag = PIT_TFLG_TIF_MASK }
| List of PIT status flags. More...

## Driver version

#define | FSL_PIT_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
| Version 2.0.0.

## Initialization and deinitialization

void | PIT_Init (PIT_Type *base, const pit_config_t *config)
| Ungates the PIT clock, enables the PIT module and configures the peripheral for basic operation. More...
void | PIT_Deinit (PIT_Type *base)
| Gate the PIT clock and disable the PIT module. More...
static void | PIT_GetDefaultConfig (pit_config_t *config)
| Fill in the PIT config struct with the default settings. More...

## Interrupt Interface

static void | PIT_EnableInterrupts (PIT_Type *base, pit_chnl_t channel, uint32_t mask)
| Enables the selected PIT interrupts. More...
static void | PIT_DisableInterrupts (PIT_Type *base, pit_chnl_t channel, uint32_t mask)
| Disables the selected PIT interrupts. More...
static uint32_t | PIT_GetEnabledInterrupts (PIT_Type *base, pit_chnl_t channel)
| Gets the enabled PIT interrupts. More...

## Status Interface

static uint32_t | PIT_GetStatusFlags (PIT_Type *base, pit_chnl_t channel)
| Gets the PIT status flags. More...
static void | PIT_ClearStatusFlags (PIT_Type *base, pit_chnl_t channel, uint32_t mask)
| Clears the PIT status flags. More...

## Read and Write the timer period

static void | PIT_SetTimerPeriod (PIT_Type *base, pit_chnl_t channel, uint32_t count)
| Sets the timer period in units of count. More...
static uint32_t | PIT_GetCurrentTimerCount (PIT_Type *base, pit_chnl_t channel)
| Reads the current timer counting value. More...

## Timer Start and Stop

static void | PIT_StartTimer (PIT_Type *base, pit_chnl_t channel)
| Starts the timer counting. More...
static void | PIT_StopTimer (PIT_Type *base, pit_chnl_t channel)
| Stops the timer counting. More...

## Data Structure Documentation

struct pit_config_t

This structure holds the configuration settings for the PIT peripheral. To initialize this structure to reasonable defaults, call the PIT_GetDefaultConfig() function and pass a pointer to your config structure instance.

The config struct can be made const so it resides in flash

### Data Fields

bool | enableRunInDebug
| true: Timers run in debug mode; false: Timers stop in debug mode

## Enumeration Type Documentation

enum pit_chnl_t

Note
  Actual number of available channels is SoC dependent

Enumerator
kPIT_Chnl_0 | PIT channel number 0.
kPIT_Chnl_1 | PIT channel number 1.
kPIT_Chnl_2 | PIT channel number 2.
kPIT_Chnl_3 | PIT channel number 3.

enum pit_interrupt_enable_t

Enumerator
kPIT_TimerInterruptEnable | Timer interrupt enable.

enum pit_status_flags_t

Enumerator
kPIT_TimerFlag | Timer flag.

## Function Documentation

void PIT_Init | ( | PIT_Type * | base,
|  | const pit_config_t * | config
| ) |  |

Note
  This API should be called at the beginning of the application using the PIT driver.

Parameters

  base | PIT peripheral base address
  config | Pointer to user's PIT config structure

void PIT_Deinit | ( | PIT_Type * | base | ) |

Parameters

  base | PIT peripheral base address

static void PIT_GetDefaultConfig | ( | pit_config_t * | config | ) |

inlinestatic

The default values are:

* config->enableRunInDebug = false;
*

Parameters

  config | Pointer to user's PIT config structure.

static void PIT_EnableInterrupts | ( | PIT_Type * | base,
|  | pit_chnl_t | channel,
|  | uint32_t | mask
| ) |  |

inlinestatic

Parameters

  base | PIT peripheral base address
  channel | Timer channel number
  mask | The interrupts to enable. This is a logical OR of members of the enumeration pit_interrupt_enable_t

static void PIT_DisableInterrupts | ( | PIT_Type * | base,
|  | pit_chnl_t | channel,
|  | uint32_t | mask
| ) |  |

inlinestatic

Parameters

  base | PIT peripheral base address
  channel | Timer channel number
  mask | The interrupts to disable. This is a logical OR of members of the enumeration pit_interrupt_enable_t

static uint32_t PIT_GetEnabledInterrupts | ( | PIT_Type * | base,
|  | pit_chnl_t | channel
| ) |  |

inlinestatic

Parameters

  base | PIT peripheral base address
  channel | Timer channel number

Returns
  The enabled interrupts. This is the logical OR of members of the enumeration pit_interrupt_enable_t

static uint32_t PIT_GetStatusFlags | ( | PIT_Type * | base,
|  | pit_chnl_t | channel
| ) |  |

inlinestatic

Parameters

  base | PIT peripheral base address
  channel | Timer channel number

Returns
  The status flags. This is the logical OR of members of the enumeration pit_status_flags_t

static void PIT_ClearStatusFlags | ( | PIT_Type * | base,
|  | pit_chnl_t | channel,
|  | uint32_t | mask
| ) |  |

inlinestatic

Parameters

  base | PIT peripheral base address
  channel | Timer channel number
  mask | The status flags to clear. This is a logical OR of members of the enumeration pit_status_flags_t

static void PIT_SetTimerPeriod | ( | PIT_Type * | base,
|  | pit_chnl_t | channel,
|  | uint32_t | count
| ) |  |

inlinestatic

Timers begin counting from the value set by this function until it reaches 0, then it generates an interrupt and load this register value again. Writing a new value to this register does not restart the timer. Instead, the value is loaded after the timer expires.

Note
  User can call the utility macros provided in fsl_common.h to convert to ticks

Parameters

  base | PIT peripheral base address
  channel | Timer channel number
  count | Timer period in units of ticks

static uint32_t PIT_GetCurrentTimerCount | ( | PIT_Type * | base,
|  | pit_chnl_t | channel
| ) |  |

inlinestatic

This function returns the real-time timer counting value, in a range from 0 to a timer period.

Note
  User can call the utility macros provided in fsl_common.h to convert ticks to usec or msec

Parameters

  base | PIT peripheral base address
  channel | Timer channel number

Returns
  Current timer counting value in ticks

static void PIT_StartTimer | ( | PIT_Type * | base,
|  | pit_chnl_t | channel
| ) |  |

inlinestatic

After calling this function, timers load period value, count down to 0 and then load the respective start value again. Each time a timer reaches 0, it generates a trigger pulse and sets the timeout interrupt flag.

Parameters

  base | PIT peripheral base address
  channel | Timer channel number.

static void PIT_StopTimer | ( | PIT_Type * | base,
|  | pit_chnl_t | channel
| ) |  |

inlinestatic

This function stops every timer counting. Timers reload their periods respectively after the next time they call the PIT_DRV_StartTimer.

Parameters

  base | PIT peripheral base address
  channel | Timer channel number.