Merge pull request #16137 from maribu/stm32_rtt

drivers/periph_rtt: add periph_rtt_set_counter  feautre
This commit is contained in:
benpicco 2021-03-08 16:53:57 +01:00 committed by GitHub
commit 2614831c86
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 81 additions and 10 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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;

View File

@ -194,6 +194,8 @@ uint32_t rtt_get_counter(void);
* @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);

View File

@ -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

View File

@ -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
View 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

View File

@ -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

View File

@ -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;
}

View File

@ -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)