From e78630fc405db36722981174011f8457c718be78 Mon Sep 17 00:00:00 2001 From: Marian Buschsieweke Date: Mon, 19 Apr 2021 21:43:45 +0200 Subject: [PATCH] cpu/atmega_common: implement periph_timer_query_freqs --- cpu/atmega_common/Kconfig | 3 ++- cpu/atmega_common/Makefile.features | 3 ++- cpu/atmega_common/periph/timer.c | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/cpu/atmega_common/Kconfig b/cpu/atmega_common/Kconfig index 810df57a4f..efc2f9beba 100644 --- a/cpu/atmega_common/Kconfig +++ b/cpu/atmega_common/Kconfig @@ -25,9 +25,10 @@ config CPU_COMMON_ATMEGA select HAS_PERIPH_GPIO_LL_IRQ_UNMASK select HAS_PERIPH_PM select HAS_PERIPH_RTC_MS + select HAS_PERIPH_RTT_OVERFLOW select HAS_PERIPH_RTT_SET_COUNTER select HAS_PERIPH_TIMER_PERIODIC - select HAS_PERIPH_RTT_OVERFLOW + select HAS_PERIPH_TIMER_QUERY_FREQS select HAS_PERIPH_WDT select HAS_PUF_SRAM diff --git a/cpu/atmega_common/Makefile.features b/cpu/atmega_common/Makefile.features index 42bd92dc22..607d875bed 100644 --- a/cpu/atmega_common/Makefile.features +++ b/cpu/atmega_common/Makefile.features @@ -13,9 +13,10 @@ FEATURES_PROVIDED += periph_gpio_ll_irq_level_triggered_low FEATURES_PROVIDED += periph_gpio_ll_irq_unmask FEATURES_PROVIDED += periph_pm FEATURES_PROVIDED += periph_rtc_ms +FEATURES_PROVIDED += periph_rtt_overflow FEATURES_PROVIDED += periph_rtt_set_counter FEATURES_PROVIDED += periph_timer_periodic -FEATURES_PROVIDED += periph_rtt_overflow +FEATURES_PROVIDED += periph_timer_query_freqs FEATURES_PROVIDED += periph_wdt FEATURES_PROVIDED += puf_sram ifneq (atmega8, $(CPU_FAM)) diff --git a/cpu/atmega_common/periph/timer.c b/cpu/atmega_common/periph/timer.c index 0ab54a394c..374f8d6d30 100644 --- a/cpu/atmega_common/periph/timer.c +++ b/cpu/atmega_common/periph/timer.c @@ -318,6 +318,24 @@ void timer_start(tim_t tim) ctx[tim].dev->CRB = ctx[tim].mode; } +uword_t timer_query_freqs_numof(tim_t dev) +{ + (void) dev; + + return ARRAY_SIZE(prescalers); +} + +uint32_t timer_query_freqs(tim_t dev, uword_t index) +{ + (void)dev; + + if (index >= ARRAY_SIZE(prescalers)) { + return 0; + } + + return CLOCK_CORECLOCK >> prescalers[index]; +} + #ifdef TIMER_NUMOF static inline void _isr(tim_t tim, int chan) {