Merge pull request #16137 from maribu/stm32_rtt
drivers/periph_rtt: add periph_rtt_set_counter feautre
This commit is contained in:
commit
2614831c86
@ -14,6 +14,7 @@ config CPU_COMMON_ATMEGA
|
||||
select HAS_PERIPH_GPIO
|
||||
select HAS_PERIPH_GPIO_IRQ
|
||||
select HAS_PERIPH_PM
|
||||
select HAS_PERIPH_RTT_SET_COUNTER
|
||||
select HAS_PERIPH_TIMER_PERIODIC
|
||||
select HAS_PERIPH_WDT
|
||||
select HAS_PUF_SRAM
|
||||
|
||||
@ -8,6 +8,7 @@ FEATURES_PROVIDED += periph_cpuid
|
||||
FEATURES_PROVIDED += periph_eeprom
|
||||
FEATURES_PROVIDED += periph_gpio periph_gpio_irq
|
||||
FEATURES_PROVIDED += periph_pm
|
||||
FEATURES_PROVIDED += periph_rtt_set_counter
|
||||
FEATURES_PROVIDED += periph_timer_periodic
|
||||
FEATURES_PROVIDED += periph_wdt
|
||||
FEATURES_PROVIDED += puf_sram
|
||||
|
||||
@ -16,6 +16,7 @@ config CPU_FAM_CC2538
|
||||
select HAS_PERIPH_GPIO
|
||||
select HAS_PERIPH_GPIO_IRQ
|
||||
select HAS_PERIPH_HWRNG
|
||||
select HAS_PERIPH_RTT_SET_COUNTER
|
||||
select HAS_PERIPH_UART_MODECFG
|
||||
select HAS_PERIPH_UART_NONBLOCKING
|
||||
select HAS_PERIPH_WDT
|
||||
|
||||
@ -6,6 +6,7 @@ FEATURES_PROVIDED += periph_flashpage
|
||||
FEATURES_PROVIDED += periph_flashpage_pagewise
|
||||
FEATURES_PROVIDED += periph_gpio periph_gpio_irq
|
||||
FEATURES_PROVIDED += periph_hwrng
|
||||
FEATURES_PROVIDED += periph_rtt_set_counter
|
||||
FEATURES_PROVIDED += periph_uart_modecfg
|
||||
FEATURES_PROVIDED += periph_uart_nonblocking
|
||||
FEATURES_PROVIDED += periph_wdt
|
||||
|
||||
@ -13,6 +13,7 @@ config CPU_COMMON_EFM32
|
||||
select HAS_PERIPH_FLASHPAGE_PAGEWISE
|
||||
select HAS_PERIPH_GPIO
|
||||
select HAS_PERIPH_GPIO_IRQ
|
||||
select HAS_PERIPH_RTT_SET_COUNTER
|
||||
select HAS_PERIPH_WDT
|
||||
|
||||
config CPU_EFM32_SERIES0
|
||||
|
||||
@ -13,6 +13,7 @@ FEATURES_PROVIDED += periph_cpuid
|
||||
FEATURES_PROVIDED += periph_flashpage
|
||||
FEATURES_PROVIDED += periph_flashpage_pagewise
|
||||
FEATURES_PROVIDED += periph_gpio periph_gpio_irq
|
||||
FEATURES_PROVIDED += periph_rtt_set_counter
|
||||
FEATURES_PROVIDED += periph_wdt
|
||||
|
||||
FEATURES_CONFLICT += periph_rtc:periph_rtt
|
||||
|
||||
@ -10,14 +10,15 @@ config CPU_CORE_XTENSA_LX6
|
||||
|
||||
config CPU_FAM_ESP32
|
||||
bool
|
||||
select CPU_CORE_XTENSA_LX6
|
||||
select CPU_COMMON_ESP
|
||||
select CPU_CORE_XTENSA_LX6
|
||||
select HAS_ARCH_ESP32
|
||||
select HAS_CPU_ESP32
|
||||
select HAS_ESP_WIFI_ENTERPRISE
|
||||
select HAS_PERIPH_ADC_CTRL
|
||||
select HAS_PERIPH_RTC
|
||||
select HAS_PERIPH_RTT
|
||||
select HAS_PERIPH_RTT_SET_COUNTER
|
||||
|
||||
## CPU Models
|
||||
config CPU_MODEL_ESP32_WROOM_32
|
||||
|
||||
@ -9,3 +9,4 @@ FEATURES_PROVIDED += esp_wifi_enterprise
|
||||
FEATURES_PROVIDED += periph_adc_ctrl
|
||||
FEATURES_PROVIDED += periph_rtc
|
||||
FEATURES_PROVIDED += periph_rtt
|
||||
FEATURES_PROVIDED += periph_rtt_set_counter
|
||||
|
||||
@ -10,12 +10,13 @@ config CPU_CORE_XTENSA_L106
|
||||
|
||||
config CPU_FAM_ESP8266
|
||||
bool
|
||||
select CPU_CORE_XTENSA_L106
|
||||
select CPU_COMMON_ESP
|
||||
select CPU_CORE_XTENSA_L106
|
||||
select HAS_ARCH_ESP8266
|
||||
select HAS_CPU_ESP8266
|
||||
select HAS_PERIPH_RTT
|
||||
select HAS_PERIPH_RTC
|
||||
select HAS_PERIPH_RTT
|
||||
select HAS_PERIPH_RTT_SET_COUNTER
|
||||
|
||||
## CPU Models
|
||||
config CPU_MODEL_ESP8266EX
|
||||
|
||||
@ -7,3 +7,4 @@ include $(RIOTCPU)/esp_common/Makefile.features
|
||||
FEATURES_PROVIDED += arch_esp8266
|
||||
FEATURES_PROVIDED += periph_rtt
|
||||
FEATURES_PROVIDED += periph_rtc
|
||||
FEATURES_PROVIDED += periph_rtt_set_counter
|
||||
|
||||
@ -13,6 +13,7 @@ config CPU_FAM_FE310
|
||||
select HAS_PERIPH_GPIO
|
||||
select HAS_PERIPH_GPIO_IRQ
|
||||
select HAS_PERIPH_PM
|
||||
select HAS_PERIPH_RTT_SET_COUNTER
|
||||
select HAS_PERIPH_WDT
|
||||
|
||||
config CPU_MODEL_FE310_G000
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
FEATURES_PROVIDED += periph_cpuid
|
||||
FEATURES_PROVIDED += periph_gpio periph_gpio_irq
|
||||
FEATURES_PROVIDED += periph_pm
|
||||
FEATURES_PROVIDED += periph_rtt_set_counter
|
||||
FEATURES_PROVIDED += periph_wdt
|
||||
|
||||
include $(RIOTCPU)/riscv_common/Makefile.features
|
||||
|
||||
@ -8,9 +8,10 @@ config CPU_COMMON_KINETIS
|
||||
bool
|
||||
select HAS_CPU_KINETIS
|
||||
select HAS_PERIPH_CPUID
|
||||
select HAS_PERIPH_PM
|
||||
select HAS_PERIPH_GPIO
|
||||
select HAS_PERIPH_GPIO_IRQ
|
||||
select HAS_PERIPH_PM
|
||||
select HAS_PERIPH_RTT_SET_COUNTER
|
||||
|
||||
config CPU_FAM_EA
|
||||
bool
|
||||
|
||||
@ -14,6 +14,7 @@ endif
|
||||
|
||||
FEATURES_PROVIDED += periph_gpio
|
||||
FEATURES_PROVIDED += periph_gpio_irq
|
||||
FEATURES_PROVIDED += periph_rtt_set_counter
|
||||
|
||||
# Parse parameters from CPU_MODEL using the kinetis-info.mk script in the same
|
||||
# directory as this Makefile.
|
||||
|
||||
@ -6,18 +6,19 @@
|
||||
|
||||
config CPU_COMMON_NRF5X
|
||||
bool
|
||||
select HAS_BLE_NIMBLE
|
||||
select HAS_PERIPH_CPUID
|
||||
select HAS_PERIPH_FLASHPAGE
|
||||
select HAS_PERIPH_FLASHPAGE_PAGEWISE
|
||||
select HAS_PERIPH_GPIO
|
||||
select HAS_PERIPH_GPIO_IRQ
|
||||
select HAS_PERIPH_HWRNG
|
||||
select HAS_PERIPH_RTT_SET_COUNTER
|
||||
select HAS_PERIPH_TEMPERATURE
|
||||
select HAS_PERIPH_TIMER_PERIODIC
|
||||
select HAS_PERIPH_UART_MODECFG
|
||||
select HAS_PERIPH_WDT
|
||||
select HAS_PERIPH_WDT_CB
|
||||
select HAS_BLE_NIMBLE
|
||||
select HAS_RADIO_NRFBLE
|
||||
select HAS_RADIO_NRFMIN
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@ FEATURES_PROVIDED += periph_flashpage
|
||||
FEATURES_PROVIDED += periph_flashpage_pagewise
|
||||
FEATURES_PROVIDED += periph_gpio periph_gpio_irq
|
||||
FEATURES_PROVIDED += periph_hwrng
|
||||
FEATURES_PROVIDED += periph_rtt_set_counter
|
||||
FEATURES_PROVIDED += periph_temperature
|
||||
FEATURES_PROVIDED += periph_timer_periodic
|
||||
FEATURES_PROVIDED += periph_uart_modecfg
|
||||
|
||||
@ -14,6 +14,7 @@ config CPU_COMMON_SAM0
|
||||
select HAS_PERIPH_GPIO
|
||||
select HAS_PERIPH_GPIO_IRQ
|
||||
select HAS_PERIPH_I2C_RECONFIGURE
|
||||
select HAS_PERIPH_RTT_SET_COUNTER
|
||||
select HAS_PERIPH_SPI_RECONFIGURE
|
||||
select HAS_PERIPH_TIMER_PERIODIC
|
||||
select HAS_PERIPH_UART_MODECFG
|
||||
|
||||
@ -12,6 +12,7 @@ FEATURES_PROVIDED += periph_flashpage_pagewise
|
||||
FEATURES_PROVIDED += periph_flashpage_rwee
|
||||
FEATURES_PROVIDED += periph_gpio periph_gpio_irq
|
||||
FEATURES_PROVIDED += periph_i2c_reconfigure
|
||||
FEATURES_PROVIDED += periph_rtt_set_counter
|
||||
FEATURES_PROVIDED += periph_spi_reconfigure
|
||||
FEATURES_PROVIDED += periph_timer_periodic # implements timer_set_periodic()
|
||||
FEATURES_PROVIDED += periph_uart_modecfg
|
||||
|
||||
@ -28,6 +28,7 @@ endif
|
||||
ifeq (f1,$(CPU_FAM))
|
||||
FEATURES_CONFLICT += periph_rtc:periph_rtt
|
||||
FEATURES_CONFLICT_MSG += "On the STM32F1, the RTC and RTT map to the same hardware peripheral."
|
||||
FEATURES_PROVIDED += periph_rtt_set_counter
|
||||
endif
|
||||
|
||||
# Not all F4 and L0 parts implement a RNG.
|
||||
|
||||
@ -7,15 +7,16 @@
|
||||
|
||||
config CPU_FAM_F1
|
||||
bool
|
||||
select CPU_STM32
|
||||
select CLOCK_HAS_NO_MCO_PRE
|
||||
select CPU_CORE_CORTEX_M3
|
||||
select CPU_STM32
|
||||
select HAS_BOOTLOADER_STM32
|
||||
select HAS_CPU_STM32F1
|
||||
select HAS_PERIPH_FLASHPAGE
|
||||
select HAS_PERIPH_FLASHPAGE_PAGEWISE
|
||||
select HAS_PERIPH_FLASHPAGE_RAW
|
||||
select HAS_PERIPH_RTT_SET_COUNTER
|
||||
select HAS_PERIPH_WDT
|
||||
select HAS_BOOTLOADER_STM32
|
||||
select CLOCK_HAS_NO_MCO_PRE
|
||||
|
||||
if CPU_FAM_F1
|
||||
|
||||
|
||||
@ -185,6 +185,11 @@ void rtt_set_alarm(uint32_t alarm, rtt_cb_t cb, void *arg)
|
||||
irq_restore(is);
|
||||
}
|
||||
|
||||
uint32_t rtt_get_alarm(void)
|
||||
{
|
||||
return LPTIM1->CMP;
|
||||
}
|
||||
|
||||
void rtt_clear_alarm(void)
|
||||
{
|
||||
to_cb = NULL;
|
||||
|
||||
@ -191,9 +191,11 @@ void rtt_clear_overflow_cb(void);
|
||||
uint32_t rtt_get_counter(void);
|
||||
|
||||
/**
|
||||
* @brief Set the RTT counter to a specified value.
|
||||
* @brief Set the RTT counter to a specified value.
|
||||
*
|
||||
* @param[in] counter The value to set the RTT to.
|
||||
*
|
||||
* @note This function is only provided when the feature `periph_rtt_set_counter` is provided
|
||||
*/
|
||||
void rtt_set_counter(uint32_t counter);
|
||||
|
||||
|
||||
@ -122,6 +122,10 @@ config MODULE_PERIPH_RTT
|
||||
depends on HAS_PERIPH_RTT
|
||||
select MODULE_PERIPH_COMMON
|
||||
|
||||
config MODULE_PERIPH_RTT_SET_COUNTER
|
||||
bool "rtc_set_counter() implementation in the RTT peripheral driver"
|
||||
depends on HAS_PERIPH_RTT_SET_COUNTER && MODULE_PERIPH_RTT
|
||||
|
||||
config MODULE_PERIPH_INIT_RTT
|
||||
bool "Auto initialize RTT peripheral"
|
||||
default y if MODULE_PERIPH_INIT
|
||||
|
||||
@ -251,6 +251,11 @@ config HAS_PERIPH_RTT
|
||||
help
|
||||
Indicates that an RTT peripheral is present.
|
||||
|
||||
config HAS_PERIPH_RTT_SET_COUNTER
|
||||
bool
|
||||
help
|
||||
Indicates that the RTT peripheral implements rtt_set_counter().
|
||||
|
||||
config HAS_PERIPH_SPI
|
||||
bool
|
||||
help
|
||||
|
||||
12
tests/periph_rtt/Kconfig
Normal file
12
tests/periph_rtt/Kconfig
Normal file
@ -0,0 +1,12 @@
|
||||
# Copyright (C) 2021 Otto-von-Guericke-Universität Magdeburg
|
||||
#
|
||||
# This file is subject to the terms and conditions of the GNU Lesser
|
||||
# General Public License v2.1. See the file LICENSE in the top level
|
||||
# directory for more details.
|
||||
#
|
||||
|
||||
config APPLICATION
|
||||
bool
|
||||
default y
|
||||
imply MODULE_PERIPH_RTT_SET_COUNTER
|
||||
depends on TEST_KCONFIG
|
||||
@ -2,6 +2,7 @@ BOARD ?= samr21-xpro
|
||||
include ../Makefile.tests_common
|
||||
|
||||
FEATURES_REQUIRED = periph_rtt
|
||||
FEATURES_OPTIONAL += periph_rtt_set_counter
|
||||
|
||||
DISABLE_MODULE += periph_init_rtt
|
||||
|
||||
|
||||
@ -75,10 +75,32 @@ int main(void)
|
||||
uint32_t now = rtt_get_counter();
|
||||
printf("RTT now: %" PRIu32 "\n", now);
|
||||
|
||||
if (IS_USED(MODULE_PERIPH_RTT_SET_COUNTER)) {
|
||||
puts("Setting RTT timer to 1337");
|
||||
rtt_set_counter(1337);
|
||||
now = rtt_get_counter();
|
||||
printf("RTT now: %" PRIu32 "\n", now);
|
||||
if ((now < 1337) || (now > 1337 + (1 * RTT_FREQUENCY + 999) / 1000)) {
|
||||
puts("ERROR: rtt_set_counter() failed (off by more than 1 ms)");
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
puts("rtt_set_counter() PASSED");
|
||||
}
|
||||
}
|
||||
|
||||
last = (now + TICKS_TO_WAIT) & RTT_MAX_VALUE;
|
||||
printf("Setting initial alarm to now + 5 s (%" PRIu32 ")\n", last);
|
||||
rtt_set_alarm(last, cb, 0);
|
||||
|
||||
if (rtt_get_alarm() != last) {
|
||||
puts("Error: rtt_get_alarm() not working");
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
puts("rtt_get_alarm() PASSED");
|
||||
}
|
||||
|
||||
puts("Done setting up the RTT, wait for many Hellos");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -25,8 +25,8 @@ def testfunc(child):
|
||||
child.expect(r'RTT now: \d+')
|
||||
child.expect(r'Setting initial alarm to now \+ {} s \(\d+\)'
|
||||
.format(period))
|
||||
child.expect_exact('Done setting up the RTT, wait for many Hellos')
|
||||
start = time.time()
|
||||
child.expect_exact('Done setting up the RTT, wait for many Hellos')
|
||||
for _ in range(MAX_HELLOS):
|
||||
child.expect_exact('Hello\r\n', timeout=period + 1)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user