The MCUXpresso SDK provides a driver for the Periodic Interrupt Timer (PIT) of MCUXpresso SDK 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. Users 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. Refer to the driver examples codes located at <SDK_ROOT>/boards/<BOARD>/driver_examples/pit
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 configuration structure can be made constant so it resides in flash.
Data Fields |
bool | enableRunInDebug |
| true: Timers run in debug mode; false: Timers stop in debug mode
|
|
- 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.
|
Enumerator |
---|
kPIT_TimerInterruptEnable |
Timer interrupt enable.
|
Enumerator |
---|
kPIT_TimerFlag |
Timer flag.
|
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 the user's PIT config structure |
void PIT_Deinit |
( |
PIT_Type * |
base | ) |
|
- Parameters
-
base | PIT peripheral base address |
The default values are as follows.
* config->enableRunInDebug = false;
*
- Parameters
-
config | Pointer to the configuration structure. |
static void PIT_SetTimerChainMode |
( |
PIT_Type * |
base, |
|
|
pit_chnl_t |
channel, |
|
|
bool |
enable |
|
) |
| |
|
inlinestatic |
When a timer has a chain mode enabled, it only counts after the previous timer has expired. If the timer n-1 has counted down to 0, counter n decrements the value by one. Each timer is 32-bits, which allows the developers to chain timers together and form a longer timer (64-bits and larger). The first timer (timer 0) can't be chained to any other timer.
- Parameters
-
base | PIT peripheral base address |
channel | Timer channel number which is chained with the previous timer |
enable | Enable or disable chain. true: Current timer is chained with the previous timer. false: Timer doesn't chain with other timers. |
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
- Users 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
- Users 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. |
uint64_t PIT_GetLifetimeTimerCount |
( |
PIT_Type * |
base | ) |
|
The lifetime timer is a 64-bit timer which chains timer 0 and timer 1 together. Timer 0 and 1 are chained by calling the PIT_SetTimerChainMode before using this timer. The period of lifetime timer is equal to the "period of timer 0 * period of timer 1". For the 64-bit value, the higher 32-bit has the value of timer 1, and the lower 32-bit has the value of timer 0.
- Parameters
-
base | PIT peripheral base address |
- Returns
- Current lifetime timer value