1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-24 14:03:55 +01:00

Merge pull request #18814 from jue89/fix/efm32_series2_timer

cpu/efm32/timer_series2: fix interaction with pm_layered
This commit is contained in:
Gunar Schorcht 2022-11-02 16:30:13 +01:00 committed by GitHub
commit ccbb304eae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -224,26 +224,44 @@ unsigned int timer_read(tim_t dev)
return _is_letimer(dev) ? _letimer_read(dev) : _timer_read(dev);
}
static inline bool _letimer_is_running(LETIMER_TypeDef *tim)
{
/* make sure registers are up-to-date and
* we can rely on the STATS register */
LETIMER_SyncWait(tim);
return tim->STATUS & LETIMER_STATUS_RUNNING;
}
static inline bool _timer_is_running(TIMER_TypeDef *tim)
{
/* make sure registers are up-to-date and
* we can rely on the STATS register */
TIMER_SyncWait(tim);
return tim->STATUS & TIMER_STATUS_RUNNING;
}
static inline void _letimer_stop(tim_t dev)
{
LETIMER_TypeDef *tim = timer_config[dev].dev;
if (tim->STATUS & LETIMER_STATUS_RUNNING) {
if (_letimer_is_running(tim)) {
pm_unblock(LETIMER_PM_BLOCKER);
}
LETIMER_Enable(timer_config[dev].dev, false);
LETIMER_Enable(tim, false);
}
static inline void _timer_stop(tim_t dev)
{
TIMER_TypeDef *tim = timer_config[dev].dev;
if (tim->STATUS & TIMER_STATUS_RUNNING) {
if (_timer_is_running(tim)) {
pm_unblock(TIMER_PM_BLOCKER);
}
TIMER_Enable(timer_config[dev].dev, false);
TIMER_Enable(tim, false);
}
void timer_stop(tim_t dev)
@ -255,22 +273,22 @@ static inline void _letimer_start(tim_t dev)
{
LETIMER_TypeDef *tim = timer_config[dev].dev;
if (tim->STATUS & LETIMER_STATUS_RUNNING) {
if (!_letimer_is_running(tim)) {
pm_block(LETIMER_PM_BLOCKER);
}
LETIMER_Enable(timer_config[dev].dev, true);
LETIMER_Enable(tim, true);
}
static inline void _timer_start(tim_t dev)
{
TIMER_TypeDef *tim = timer_config[dev].dev;
if (tim->STATUS & TIMER_STATUS_RUNNING) {
if (!_timer_is_running(tim)) {
pm_block(TIMER_PM_BLOCKER);
}
TIMER_Enable(timer_config[dev].dev, true);
TIMER_Enable(tim, true);
}
void timer_start(tim_t dev)