48 lines
1.1 KiB
C
48 lines
1.1 KiB
C
#include "fsl_pit.h"
|
|
#include "timer.h"
|
|
|
|
static volatile uint32_t CurrentTime;
|
|
|
|
void PIT_TIMER_HANDLER(void)
|
|
{
|
|
CurrentTime++;
|
|
PIT_ClearStatusFlags(PIT, PIT_TIMER_CHANNEL, PIT_TFLG_TIF_MASK);
|
|
}
|
|
|
|
void Timer_Init(void)
|
|
{
|
|
pit_config_t pitConfig;
|
|
PIT_GetDefaultConfig(&pitConfig);
|
|
PIT_Init(PIT, &pitConfig);
|
|
|
|
// TODO: Why the interval needs to be multiplied by two to arrive to the correct timing?
|
|
// Figure it out and clean this up.
|
|
PIT_SetTimerPeriod(PIT, PIT_TIMER_CHANNEL, MSEC_TO_COUNT(TIMER_INTERVAL_MSEC*2, PIT_SOURCE_CLOCK));
|
|
|
|
PIT_EnableInterrupts(PIT, PIT_TIMER_CHANNEL, kPIT_TimerInterruptEnable);
|
|
EnableIRQ(PIT_TIMER_IRQ_ID);
|
|
PIT_StartTimer(PIT, PIT_TIMER_CHANNEL);
|
|
}
|
|
|
|
uint32_t Timer_GetCurrentTime() {
|
|
return CurrentTime;
|
|
}
|
|
|
|
void Timer_SetCurrentTime(uint32_t *time)
|
|
{
|
|
*time = CurrentTime;
|
|
}
|
|
|
|
uint32_t Timer_GetElapsedTime(uint32_t *time)
|
|
{
|
|
uint32_t elapsedTime = CurrentTime - *time;
|
|
return elapsedTime;
|
|
}
|
|
|
|
uint32_t Timer_GetElapsedTimeAndSetCurrent(uint32_t *time)
|
|
{
|
|
uint32_t elapsedTime = Timer_GetElapsedTime(time);
|
|
*time = CurrentTime;
|
|
return elapsedTime;
|
|
}
|