59 #define LPTMR_MAX_CMR_NTICKS (LPTMR_CMR_COMPARE_MASK + 1u)
60 #define LPTMR_MAX_PRESCALER (1u << LPTMR_PSR_PRESCALE_WIDTH)
74 static inline uint8_t lptmr_cfg2p(
79 static inline uint64_t lptmr_us2nn(
80 const uint32_t clkfreq,
84 static inline uint64_t lptmr_compute_nticks(
89 static inline bool nticks2compare_ticks(
94 static uint32_t lptmr_GetClkFreq(
96 const uint32_t instance
99 static bool lptmr_Ticks2Us(
100 const uint32_t clkfreq,
103 const uint16_t ticks,
107 static bool lptmr_Us2Ticks(
108 const uint32_t clkfreq,
112 uint16_t*
const ticks
115 static bool lptmr_ChooseClkConfig(
116 const uint32_t clkfreq,
120 uint16_t*
const ticks
173 static inline uint8_t lptmr_cfg2p(
182 p = (uint8_t)(((uint8_t)prescval) + 1u);
195 static inline uint64_t lptmr_us2nn(
196 const uint32_t clkfreq,
215 uint64_t nn = (uint64_t)( (uint64_t)us * (uint64_t)clkfreq );
216 nn = (nn + 500000u) / 1000000u;
227 static inline uint64_t lptmr_compute_nticks(
232 uint64_t npresc = (uint64_t) 1u << p;
236 uint64_t nticks = ((nn + (npresc >> 1u)) / npresc);
252 static inline bool nticks2compare_ticks(
271 *ticks = (uint16_t)(nticks - 1u);
293 const uint32_t instance)
314 inputClockName = lptmrPccClockName[instance];
348 static bool lptmr_Ticks2Us(
349 const uint32_t clkfreq,
352 const uint16_t ticks,
357 uint8_t p = lptmr_cfg2p(pval, bypass);
358 uint64_t nn = ( (uint64_t)ticks + 1u ) << p;
359 uint64_t us_real = (nn * 1000000u) / (clkfreq);
362 if ( us_real <= (0xFFFFFFFFu) )
364 us_local = (uint32_t)us_real;
368 us_local = 0xFFFFFFFFu;
386 static bool lptmr_Us2Ticks(
387 const uint32_t clkfreq,
391 uint16_t*
const ticks
396 uint8_t p = lptmr_cfg2p(prescval, bypass);
399 uint64_t nn = lptmr_us2nn(clkfreq, us);
401 uint64_t nticks = lptmr_compute_nticks(nn, p);
403 success = nticks2compare_ticks(nticks, ticks);
419 static bool lptmr_ChooseClkConfig(
420 const uint32_t clkfreq,
424 uint16_t*
const ticks
431 uint64_t nn = lptmr_us2nn(clkfreq, us);
436 nticks = lptmr_compute_nticks(nn, p);
445 success = nticks2compare_ticks(nticks, ticks);
526 const bool startCounter)
531 LPTMR_Type*
const base = g_lptmrBase[instance];
574 LPTMR_Type*
const base = g_lptmrBase[instance];
577 uint16_t cmpValueTicks = 0U;
589 clkFreq = lptmr_GetClkFreq(config->
clockSelect, instance);
594 bool chooseClkConfigStatus;
600 chooseClkConfigStatus = lptmr_ChooseClkConfig(clkFreq, configCmpValue, &prescVal, &prescBypass, &cmpValueTicks);
602 (void) chooseClkConfigStatus;
658 const LPTMR_Type*
const base = g_lptmrBase[instance];
686 LPTMR_Type*
const base = g_lptmrBase[instance];
705 const uint16_t compareValueByCount)
709 LPTMR_Type*
const base = g_lptmrBase[instance];
718 #if (defined (DEV_ERROR_DETECT) || defined (CUSTOM_DEVASSERT))
729 if (timerEnabled && !compareFlag)
738 if (counterVal >= compareValueByCount)
756 uint16_t *
const compareValueByCount)
760 const LPTMR_Type*
const base = g_lptmrBase[instance];
780 const uint32_t compareValueUs)
785 LPTMR_Type*
const base = g_lptmrBase[instance];
786 bool timerEnabled, compareFlag;
790 uint16_t cmpValTicks, currentCounterVal;
792 bool prescBypass, conversionStatus;
800 if (timerEnabled && !compareFlag)
807 clkFreq = lptmr_GetClkFreq(clkSrc, instance);
814 conversionStatus = lptmr_Us2Ticks(clkFreq, prescVal, prescBypass, compareValueUs, &cmpValTicks);
816 (void) conversionStatus;
822 if (currentCounterVal >= cmpValTicks)
840 uint32_t *
const compareValueUs)
845 const LPTMR_Type*
const base = g_lptmrBase[instance];
848 uint16_t cmpValTicks;
850 bool prescBypass, conversionStatus;
856 clkFreq = lptmr_GetClkFreq(clkSrc, instance);
866 conversionStatus = lptmr_Ticks2Us(clkFreq, prescVal, prescBypass, cmpValTicks, compareValueUs);
868 (void) conversionStatus;
883 const LPTMR_Type*
const base = g_lptmrBase[instance];
901 LPTMR_Type*
const base = g_lptmrBase[instance];
921 const LPTMR_Type*
const base = g_lptmrBase[instance];
937 const bool enableInterrupt)
941 LPTMR_Type*
const base = g_lptmrBase[instance];
963 LPTMR_Type*
const base = g_lptmrBase[instance];
982 LPTMR_Type*
const base = g_lptmrBase[instance];
985 #if (defined (DEV_ERROR_DETECT) || defined (CUSTOM_DEVASSERT))
1009 LPTMR_Type*
const base = g_lptmrBase[instance];
1028 LPTMR_Type*
const base = g_lptmrBase[instance];
void LPTMR_DRV_InitConfigStruct(lptmr_config_t *const config)
Initialize a configuration structure with default values.
lptmr_workmode_t workMode
void LPTMR_DRV_Init(const uint32_t instance, const lptmr_config_t *const config, const bool startCounter)
Initialize a LPTMR instance with values from an input configuration structure.
void LPTMR_HAL_Init(LPTMR_Type *const base)
Initialize the LPTMR instance to reset values.
lptmr_pinselect_t
Pulse Counter Input selection Implements : lptmr_pinselect_t_Class.
void LPTMR_DRV_SetInterrupt(const uint32_t instance, const bool enableInterrupt)
Enable/disable the LPTMR interrupt.
lptmr_pinpolarity_t pinPolarity
static void LPTMR_HAL_SetPinSelect(LPTMR_Type *const base, const lptmr_pinselect_t pinsel)
Configure the Pin selection for Pulse Counter Mode.
void LPTMR_DRV_StopCounter(const uint32_t instance)
Disable the LPTMR / Stop the counter.
#define LPTMR_MAX_CMR_NTICKS
lptmr_clocksource_t clockSelect
Defines the configuration structure for LPTMR.
void LPTMR_DRV_ClearCompareFlag(const uint32_t instance)
Clear the Compare Flag of a LPTMR instance.
lptmr_prescaler_t prescaler
static lptmr_pinselect_t LPTMR_HAL_GetPinSelect(const LPTMR_Type *const base)
Get the Pin select for Counter Mode.
bool LPTMR_DRV_IsRunning(const uint32_t instance)
Get the run state of a LPTMR instance.
static lptmr_prescaler_t LPTMR_HAL_GetPrescaler(const LPTMR_Type *const base)
Get Prescaler/Glitch Filter divider value.
#define LPTMR_CMR_COMPARE_MASK
lptmr_counter_units_t counterUnits
static bool LPTMR_HAL_GetEnable(const LPTMR_Type *const base)
Get the Enable state.
static lptmr_pinpolarity_t LPTMR_HAL_GetPinPolarity(const LPTMR_Type *const base)
Get Pin Polarity for Pulse Counter Mode.
void LPTMR_DRV_GetCompareValueByUs(const uint32_t instance, uint32_t *const compareValueUs)
Get the compare value in microseconds, of a LPTMR instance.
lptmr_counter_units_t
Defines the LPTMR counter units available for configuring or reading the timer compare value...
lptmr_pinselect_t pinSelect
lptmr_clocksource_t
Clock Source selection Implements : lptmr_clocksource_t_Class.
#define LPTMR_INSTANCE_COUNT
static void LPTMR_HAL_SetBypass(LPTMR_Type *const base, const bool enable)
Configure the Prescaler/Glitch Filter Bypass enable state.
void LPTMR_DRV_GetCompareValueByCount(const uint32_t instance, uint16_t *const compareValueByCount)
Get the compare value in counter tick units, of a LPTMR instance.
static void LPTMR_HAL_SetPinPolarity(LPTMR_Type *const base, const lptmr_pinpolarity_t pol)
Configure Pin Polarity for Pulse Counter Mode.
static void LPTMR_HAL_ClearCompareFlag(LPTMR_Type *const base)
Clear the Compare Flag.
lptmr_pinpolarity_t
Pulse Counter input polarity Implements : lptmr_pinpolarity_t_Class.
static bool LPTMR_HAL_GetDmaRequest(const LPTMR_Type *const base)
Get the DMA Request Enable Flag.
status_t CLOCK_SYS_GetFreq(clock_names_t clockName, uint32_t *frequency)
Gets the clock frequency for a specific clock name.
void LPTMR_DRV_Deinit(const uint32_t instance)
De-initialize a LPTMR instance.
status_t
Status return codes. Common error codes will be a unified enumeration (C enum) that will contain all ...
static void LPTMR_HAL_SetWorkMode(LPTMR_Type *const base, const lptmr_workmode_t mode)
Configure the Work Mode.
static void LPTMR_HAL_SetDmaRequest(LPTMR_Type *const base, bool enable)
Configure the DMA Request Enable Flag state.
static uint16_t LPTMR_HAL_GetCounterValue(LPTMR_Type *const base)
Get the current Counter Value.
uint16_t LPTMR_DRV_GetCounterValueByCount(const uint32_t instance)
Get the current counter value in counter tick units.
void LPTMR_DRV_StartCounter(const uint32_t instance)
Enable the LPTMR / Start the counter.
clock_names_t
Clock names.
static void LPTMR_HAL_Disable(LPTMR_Type *const base)
Disable the LPTMR.
static void LPTMR_HAL_Enable(LPTMR_Type *const base)
Enable the LPTMR.
void LPTMR_DRV_SetConfig(const uint32_t instance, const lptmr_config_t *const config)
Configure a LPTMR instance.
lptmr_workmode_t
Work Mode Implements : lptmr_workmode_t_Class.
void LPTMR_DRV_GetConfig(const uint32_t instance, lptmr_config_t *const config)
Get the current configuration of a LPTMR instance.
#define LPTMR_MAX_PRESCALER
static void LPTMR_HAL_SetCompareValue(LPTMR_Type *const base, const uint16_t compval)
Configure the Compare Value.
uint32_t SCG_HAL_GetSircAsyncFreq(const SCG_Type *base, scg_async_clock_type_t type)
Get SCG asynchronous clock frequency from SIRC.
static void LPTMR_HAL_SetFreeRunning(LPTMR_Type *const base, const bool enable)
Configure the Free Running state.
static bool LPTMR_HAL_GetBypass(const LPTMR_Type *const base)
Get the Prescaler/Glitch Filter Bypass enable state.
static void LPTMR_HAL_SetClockSelect(LPTMR_Type *const base, const lptmr_clocksource_t clocksel)
Configure the LPTMR input Clock selection.
static bool LPTMR_HAL_GetCompareFlag(const LPTMR_Type *const base)
Get the Compare Flag state.
static lptmr_clocksource_t LPTMR_HAL_GetClockSelect(const LPTMR_Type *const base)
Get the LPTMR input Clock selection.
static void LPTMR_HAL_SetPrescaler(LPTMR_Type *const base, const lptmr_prescaler_t presc)
Configure the Prescaler/Glitch Filter divider value.
lptmr_prescaler_t
Prescaler Selection Implements : lptmr_prescaler_t_Class.
void LPTMR_DRV_SetPinConfiguration(const uint32_t instance, const lptmr_pinselect_t pinSelect, const lptmr_pinpolarity_t pinPolarity)
Set the Input Pin configuration for Pulse Counter mode.
static bool LPTMR_HAL_GetFreeRunning(const LPTMR_Type *const base)
Get the Free Running state.
static void LPTMR_HAL_SetInterrupt(LPTMR_Type *const base, bool enable)
Configure the Interrupt Enable state.
status_t LPTMR_DRV_SetCompareValueByCount(const uint32_t instance, const uint16_t compareValueByCount)
Set the compare value in counter tick units, for a LPTMR instance.
status_t LPTMR_DRV_SetCompareValueByUs(const uint32_t instance, const uint32_t compareValueUs)
Set the compare value for Timer Mode in microseconds, for a LPTMR instance.
static uint16_t LPTMR_HAL_GetCompareValue(const LPTMR_Type *const base)
Get the Compare Value.
bool LPTMR_DRV_GetCompareFlag(const uint32_t instance)
Get the current state of the Compare Flag of a LPTMR instance.
static lptmr_workmode_t LPTMR_HAL_GetWorkMode(const LPTMR_Type *const base)
Get current Work Mode.
static bool LPTMR_HAL_GetInterruptEnable(const LPTMR_Type *const base)
Get the Interrupt Enable state.