29#if HAL_USE_GPT || defined(__DOXYGEN__)
48#if !defined(KINETIS_GPT_USE_PIT0) || defined(__DOXYGEN__)
49#define KINETIS_GPT_USE_PIT0 FALSE
57#if !defined(KINETIS_GPT_USE_PIT1) || defined(__DOXYGEN__)
58#define KINETIS_GPT_USE_PIT1 TRUE
66#if !defined(KINETIS_GPT_USE_PIT2) || defined(__DOXYGEN__)
67#define KINETIS_GPT_USE_PIT2 FALSE
75#if !defined(KINETIS_GPT_USE_PIT3) || defined(__DOXYGEN__)
76#define KINETIS_GPT_USE_PIT3 FALSE
82#if !defined(KINETIS_GPT_PIT0_IRQ_PRIORITY) || defined(__DOXYGEN__)
83#define KINETIS_GPT_PIT0_IRQ_PRIORITY 7
89#if !defined(KINETIS_GPT_PIT1_IRQ_PRIORITY) || defined(__DOXYGEN__)
90#define KINETIS_GPT_PIT1_IRQ_PRIORITY 7
96#if !defined(KINETIS_GPT_PIT2_IRQ_PRIORITY) || defined(__DOXYGEN__)
97#define KINETIS_GPT_PIT2_IRQ_PRIORITY 7
103#if !defined(KINETIS_GPT_PIT3_IRQ_PRIORITY) || defined(__DOXYGEN__)
104#define KINETIS_GPT_PIT3_IRQ_PRIORITY 7
110#if (KINETIS_HAS_PIT_COMMON_IRQ && !defined(KINETIS_GPT_PIT_IRQ_PRIORITY)) \
111 || defined(__DOXYGEN__)
112#define KINETIS_GPT_PIT_IRQ_PRIORITY 2
119#if KINETIS_GPT_USE_PIT0 && !KINETIS_HAS_PIT0
120#error "PIT0 not present in the selected device"
123#if KINETIS_GPT_USE_PIT1 && !KINETIS_HAS_PIT1
124#error "PIT1 not present in the selected device"
127#if KINETIS_GPT_USE_PIT2 && !KINETIS_HAS_PIT2
128#error "PIT2 not present in the selected device"
131#if KINETIS_GPT_USE_PIT3 && !KINETIS_HAS_PIT3
132#error "PIT3 not present in the selected device"
135#if !KINETIS_GPT_USE_PIT0 && !KINETIS_GPT_USE_PIT1 && \
136 !KINETIS_GPT_USE_PIT2 && !KINETIS_GPT_USE_PIT3
137#error "GPT driver activated but no PIT peripheral assigned"
140#if KINETIS_GPT_USE_PIT0 && !KINETIS_HAS_PIT_COMMON_IRQ && \
141 !OSAL_IRQ_IS_VALID_PRIORITY(KINETIS_GPT_PIT0_IRQ_PRIORITY)
142#error "Invalid IRQ priority assigned to PIT0"
145#if KINETIS_GPT_USE_PIT1 && !KINETIS_HAS_PIT_COMMON_IRQ && \
146 !OSAL_IRQ_IS_VALID_PRIORITY(KINETIS_GPT_PIT1_IRQ_PRIORITY)
147#error "Invalid IRQ priority assigned to PIT1"
150#if KINETIS_GPT_USE_PIT2 && !KINETIS_HAS_PIT_COMMON_IRQ && \
151 !OSAL_IRQ_IS_VALID_PRIORITY(KINETIS_GPT_PIT2_IRQ_PRIORITY)
152#error "Invalid IRQ priority assigned to PIT2"
155#if KINETIS_GPT_USE_PIT3 && !KINETIS_HAS_PIT_COMMON_IRQ && \
156 !OSAL_IRQ_IS_VALID_PRIORITY(KINETIS_GPT_PIT3_IRQ_PRIORITY)
157#error "Invalid IRQ priority assigned to PIT3"
160#if KINETIS_HAS_PIT_COMMON_IRQ && \
161 !OSAL_IRQ_IS_VALID_PRIORITY(KINETIS_GPT_PIT_IRQ_PRIORITY)
162#error "Invalid IRQ priority assigned to PIT"
165#if KINETIS_GPT_USE_PIT0 && !defined(KINETIS_PIT0_IRQ_VECTOR) && \
166 !KINETIS_HAS_PIT_COMMON_IRQ
167#error "KINETIS_PIT0_IRQ_VECTOR not defined"
170#if KINETIS_GPT_USE_PIT1 && !defined(KINETIS_PIT1_IRQ_VECTOR) && \
171 !KINETIS_HAS_PIT_COMMON_IRQ
172#error "KINETIS_PIT1_IRQ_VECTOR not defined"
175#if KINETIS_GPT_USE_PIT2 && !defined(KINETIS_PIT2_IRQ_VECTOR) && \
176 !KINETIS_HAS_PIT_COMMON_IRQ
177#error "KINETIS_PIT2_IRQ_VECTOR not defined"
180#if KINETIS_GPT_USE_PIT3 && !defined(KINETIS_PIT3_IRQ_VECTOR) && \
181 !KINETIS_HAS_PIT_COMMON_IRQ
182#error "KINETIS_PIT3_IRQ_VECTOR not defined"
185#if KINETIS_HAS_PIT_COMMON_IRQ && !defined(KINETIS_PIT_IRQ_VECTOR)
186#error "KINETIS_PIT_IRQ_VECTOR not defined"
248#if defined(GPT_DRIVER_EXT_FIELDS)
249 GPT_DRIVER_EXT_FIELDS
287#define gpt_lld_change_interval(gptp, interval) \
288 (PIT->CHANNEL[(gptp)->channelIndex].TVAL = (uint32_t)( \
289 ( (gptp)->clock / (gptp)->config->frequency ) * \
292#define gpt_lld_change_interval(gptp, interval) \
293 ((gptp)->channel->TVAL = (uint32_t)( \
294 ( (gptp)->clock / (gptp)->config->frequency ) * \
308#define gpt_lld_get_interval(gptp) \
309 ((uint32_t)( ( (uint64_t)PIT->CHANNEL[((gptp)->channelIndex].TVAL * (gptp)->config->frequency ) / \
310 ( (uint32_t)(gptp)->clock ) ))
312#define gpt_lld_get_interval(gptp) \
313 ((uint32_t)( ( (uint64_t)(gptp)->channel->TVAL * (gptp)->config->frequency ) / \
314 ( (uint32_t)(gptp)->clock ) ))
329#define gpt_lld_get_counter(gptp) ((gptcnt_t)PIT->CHANNEL[(gptp)->channelIndex].CVAL)
332#define gpt_lld_get_counter(gptp) ((gptcnt_t)(gptp)->pit->CHANNEL[gptp->channel].CVAL)
339#if KINETIS_GPT_USE_PIT0 && !defined(__DOXYGEN__)
343#if KINETIS_GPT_USE_PIT1 && !defined(__DOXYGEN__)
347#if KINETIS_GPT_USE_PIT2 && !defined(__DOXYGEN__)
351#if KINETIS_GPT_USE_PIT3 && !defined(__DOXYGEN__)
void gpt_lld_start(GPTDriver *gptp)
Configures and activates the GPT peripheral.
uint32_t dier
TIM DIER register initialization data.
void gpt_lld_polled_delay(GPTDriver *gptp, gptcnt_t interval)
Starts the timer in one shot mode and waits for completion.
void gpt_lld_stop(GPTDriver *gptp)
Deactivates the GPT peripheral.
struct PIT_CHANNEL * channel
Channel structure in PIT registers block.
GPTDriver GPTD1
GPTD1 driver identifier.
GPTDriver GPTD3
GPTD3 driver identifier.
void gpt_lld_start_timer(GPTDriver *gptp, gptcnt_t interval)
Starts the timer in continuous mode.
GPTDriver GPTD2
GPTD2 driver identifier.
const GPTConfig * config
Current configuration data.
uint32_t gptcnt_t
GPT counter type.
uint32_t gptfreq_t
GPT frequency type.
gptfreq_t frequency
Timer clock in Hz.
GPTDriver GPTD4
GPTD4 driver identifier.
uint32_t cr2
TIM CR2 register initialization data.
void gpt_lld_stop_timer(GPTDriver *gptp)
Stops the timer.
gptstate_t state
Driver state.
void gpt_lld_init(void)
Low level GPT driver initialization.
GPT_DRIVER_EXT_FIELDS uint32_t clock
Timer base clock.
gptcallback_t callback
Timer callback pointer.
int32_t channelIndex
Channel index.
Driver configuration structure.
Structure representing a GPT driver.