1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-26 06:53:52 +01:00
RIOT/sys/ztimer/Makefile.dep
Marian Buschsieweke 25b8d65f68
sys/ztimer: make use of periph_timer_query_freqs
This makes use of the `periph_timer_query_freqs` feature:

1. It does choose the closest frequency supported before calling
   timer_init() in the ztimer_periph_timer backend.
2. It does make use of the actually chosen frequency when using
   `ztimer_convert_frac`.
3. It does `assert()` the frequency is within 5% of the specified when
   no frequency conversion is performed or `ztimer_convert_shift_up`
   is used.
2025-04-15 15:10:07 +02:00

102 lines
3.2 KiB
Makefile

#
# ztimer dependencies
#
# "ztimer" is the default meta-module of ztimer
ifneq (,$(filter ztimer,$(USEMODULE)))
USEMODULE += ztimer_core
USEMODULE += ztimer_convert_frac
USEMODULE += ztimer_convert_shift
DEFAULT_MODULE += auto_init_ztimer
DEFAULT_MODULE += ztimer_init
endif
ifneq (,$(filter ztimer_xtimer_compat,$(USEMODULE)))
USEMODULE += ztimer_usec
endif
ifneq (,$(filter ztimer64_xtimer_compat,$(USEMODULE)))
USEMODULE += ztimer64_usec
USEMODULE += ztimer_xtimer_compat
endif
ifneq (,$(filter ztimer_%,$(USEMODULE)))
USEMODULE += ztimer_core
USEMODULE += ztimer_extend
endif
ifneq (,$(filter ztimer_ondemand_%,$(USEMODULE)))
USEMODULE += ztimer_ondemand
endif
ifneq (,$(filter ztimer_convert_%,$(USEMODULE)))
USEMODULE += ztimer_convert
endif
ifneq (,$(filter ztimer_periph_lptimer,$(USEMODULE)))
USEMODULE += ztimer_periph_timer
endif
ifneq (,$(filter ztimer_periph_timer,$(USEMODULE)))
FEATURES_REQUIRED += periph_timer
FEATURES_OPTIONAL += periph_timer_query_freqs
endif
ifneq (,$(filter ztimer_periph_rtc,$(USEMODULE)))
FEATURES_REQUIRED += periph_rtc
endif
ifneq (,$(filter ztimer_periph_rtt,$(USEMODULE)))
FEATURES_REQUIRED += periph_rtt
endif
ifneq (,$(filter ztimer_periph_ptp,$(USEMODULE)))
FEATURES_REQUIRED += periph_ptp_timer
endif
ifneq (,$(filter ztimer_convert_frac,$(USEMODULE)))
USEMODULE += frac
endif
ifneq (,$(filter ztimer_usec,$(USEMODULE)))
USEMODULE += ztimer
USEMODULE += ztimer_periph_timer
endif
# NOTE: select the module here and not in the CPU so that order of inclusion
# does not have periph_rtt selected earlier that it should be while at the same
# time avoiding the module 'ztimer-no_periph_rtt' being included unecesarily.
# The samd21 rtt busy loops for 180us every time an alarm is set or
# the counter is read, this propagates and leads to timing errors
# on ztimer_msec that are higher than > +-1msec.
# The same goes for the fe310 rtt.
ifneq (,$(filter samd21 fe310,$(CPU)))
USEMODULE += ztimer_no_periph_rtt
endif
ifneq (,$(filter ztimer_msec ztimer_sec,$(USEMODULE)))
USEMODULE += ztimer
ifeq (,$(filter ztimer_no_periph_rtt,$(USEMODULE)))
FEATURES_OPTIONAL += periph_rtt
# HACK: periph_rtt will get used only in the next iteration but an updated
# state for FEATURES_USED is needed here so include `features_check.inc.mk`
# here instead.
# An other option would be to check FEATURES_PROVIDED this would avoid the
# order of inclusion problem but it would no take into account possible conflicts
# and is also currently not allowed in the build system.
# An other alternative would be to delay to the next loop, but this produce a
# case where another loop is not executed and the conditional not evaluated
# If these kind of usecases pop up before Kconfig migration is completed
# then another alternative would be introduce a variable to require an extra
# loop independent of USEMODULE, FEATURES_REQUIRED and USEPKG
include $(RIOTMAKE)/features_check.inc.mk
ifneq (,$(filter periph_rtt,$(FEATURES_USED)))
USEMODULE += ztimer_periph_rtt
else
USEMODULE += ztimer_periph_timer
endif
else
USEMODULE += ztimer_periph_timer
endif
endif