Fix building for BOARD=watch (Fixes #8), enable in CI

This commit is contained in:
2020-05-16 22:04:56 +00:00
parent f455ce9113
commit 0f0cb73fa5
13 changed files with 87 additions and 15 deletions

5
.gitignore vendored
View File

@@ -6,4 +6,7 @@ build
*.pyc *.pyc
*.su *.su
*.map *.map
.gdb_history .gdb_history
GTAGS
GRTAGS
GPATH

View File

@@ -1,8 +1,7 @@
variables: variables:
BOARD: "devboard"
GIT_SUBMODULE_STRATEGY: "recursive" GIT_SUBMODULE_STRATEGY: "recursive"
build: .build_template: &build_template
image: registry.gitlab.maxregan.me/max/arm-build-image:latest image: registry.gitlab.maxregan.me/max/arm-build-image:latest
stage: build stage: build
script: script:
@@ -14,9 +13,20 @@ build:
- "firmware/Application/*.elf" - "firmware/Application/*.elf"
- "firmware/Application/*.bin" - "firmware/Application/*.bin"
test: build-devboard:
<<: *build_template
variables:
BOARD: devboard
build-watch:
<<: *build_template
variables:
BOARD: watch
test-devboard:
stage: test
dependencies: dependencies:
- build - build-devboard
tags: tags:
- tr-hw - tr-hw
- privileged - privileged

View File

@@ -169,6 +169,12 @@ ReturnCode RtcDriver::init_hw()
SET(RTC->CR, RTC_CR_WUTIE); SET(RTC->CR, RTC_CR_WUTIE);
NVIC_EnableIRQ(RTC_IRQn); NVIC_EnableIRQ(RTC_IRQn);
NVIC_SetPriority(RTC_IRQn, 1); NVIC_SetPriority(RTC_IRQn, 1);
enable_periodic_alarm();
// Clear the interrupt in the RTC
CLR(RTC->ISR, RTC_ISR_WUTF);
#elif defined(STM32L4XX) #elif defined(STM32L4XX)
CLR(RTC->ICSR, RTC_ICSR_INIT); CLR(RTC->ICSR, RTC_ICSR_INIT);
@@ -179,20 +185,17 @@ ReturnCode RtcDriver::init_hw()
SET(RTC->CR, RTC_CR_WUTIE); SET(RTC->CR, RTC_CR_WUTIE);
NVIC_EnableIRQ(RTC_WKUP_IRQn); NVIC_EnableIRQ(RTC_WKUP_IRQn);
NVIC_SetPriority(RTC_WKUP_IRQn, 0); NVIC_SetPriority(RTC_WKUP_IRQn, 0);
#else
#error "Unsupported device type"
#endif
enable_periodic_alarm();
// Disable the wakeup timer. This can be leftover from an old firmware/reset enable_periodic_alarm();
// Clear the interrupt in the RTC // Clear the interrupt in the RTC
SET(RTC->SCR, RTC_SCR_CWUTF); SET(RTC->SCR, RTC_SCR_CWUTF);
// Disable the Wakeup timer (its periodic, but we use it as a #else
// one-shot timer #error "Unsupported device type"
#endif
// Disable the wakeup timer. This can be leftover from an old firmware/reset
CLR(RTC->CR, RTC_CR_WUTE); CLR(RTC->CR, RTC_CR_WUTE);
disable_rtc_write(); disable_rtc_write();
return ReturnCode::OK; return ReturnCode::OK;
@@ -313,7 +316,16 @@ ReturnCode RtcDriver::set_wakeup_in(BSP::time_t wakeup_delay)
SET_TO(RTC->WUTR, RTC_WUTR_WUT, delay_cycles - 1); SET_TO(RTC->WUTR, RTC_WUTR_WUT, delay_cycles - 1);
SET_TO(RTC->CR, RTC_CR_WUCKSEL, wucksel << RTC_CR_WUCKSEL_Pos); SET_TO(RTC->CR, RTC_CR_WUCKSEL, wucksel << RTC_CR_WUCKSEL_Pos);
// Clear any pending wakeup flags
#if defined(STM32L0XX)
CLR(RTC->ISR, RTC_ISR_WUTF);
#elif defined(STM32L4XX)
SET(RTC->SCR, RTC_SCR_CWUTF); SET(RTC->SCR, RTC_SCR_CWUTF);
#else
#error "Unsupported family"
#endif
// Finally, enable the timer
SET(RTC->CR, RTC_CR_WUTE); SET(RTC->CR, RTC_CR_WUTE);
disable_rtc_write(); disable_rtc_write();
@@ -327,9 +339,18 @@ BSP::time_t RtcDriver::RtcSystemTimer::get_time()
uint64_t new_timer_ticks, new_millis; uint64_t new_timer_ticks, new_millis;
enable_rtc_write(); enable_rtc_write();
RTC->ICSR = ~(RTC_ICSR_INIT | RTC_ICSR_RSF); #if defined(STM32L0XX)
CLR(RTC->ISR, RTC_ISR_RSF);
disable_rtc_write();
while (!(RTC->ISR & RTC_ISR_RSF)) {}
#elif defined(STM32L4XX)
CLR(RTC->ICSR, RTC_ICSR_RSF);
disable_rtc_write(); disable_rtc_write();
while (!(RTC->ICSR & RTC_ICSR_RSF)) {} while (!(RTC->ICSR & RTC_ICSR_RSF)) {}
#else
#error "Unsupported family"
#endif
do { do {
__disable_irq(); __disable_irq();

View File

@@ -114,6 +114,7 @@ OUTPUT_MAP ?= $(OUTPUT_NAME).map
DEVICE_FAMILY_DEFINE = $(subst XX,xx,$(shell echo $(DEVICE_FAMILY) | tr '[:lower:]' '[:upper:]')) DEVICE_FAMILY_DEFINE = $(subst XX,xx,$(shell echo $(DEVICE_FAMILY) | tr '[:lower:]' '[:upper:]'))
DEVICE_TYPE_DEFINE = $(shell echo $(DEVICE_TYPE) | tr '[:lower:]' '[:upper:]') DEVICE_TYPE_DEFINE = $(shell echo $(DEVICE_TYPE) | tr '[:lower:]' '[:upper:]')
DEVICE_LINE_DEFINE = $(shell echo $(DEVICE_LINE) | tr '[:lower:]' '[:upper:]') DEVICE_LINE_DEFINE = $(shell echo $(DEVICE_LINE) | tr '[:lower:]' '[:upper:]')
BOARD_DEFINE = BOARD_$(shell echo $(BOARD) | tr '[:lower:]' '[:upper:]')
CPU_FLAGS = -mthumb -mcpu=cortex-m0plus -mfloat-abi=soft CPU_FLAGS = -mthumb -mcpu=cortex-m0plus -mfloat-abi=soft
@@ -128,7 +129,7 @@ CFLAGS += $(CPU_FLAGS)
CFLAGS += -ffreestanding CFLAGS += -ffreestanding
CFLAGS += -fstack-usage -Wstack-usage=128 CFLAGS += -fstack-usage -Wstack-usage=128
# Defines # Defines
CFLAGS += -D$(DEVICE_FAMILY_DEFINE) -D$(DEVICE_TYPE_DEFINE) -D$(DEVICE_LINE_DEFINE) CFLAGS += -D$(DEVICE_FAMILY_DEFINE) -D$(DEVICE_TYPE_DEFINE) -D$(DEVICE_LINE_DEFINE) -D$(BOARD_DEFINE)
# CFLAGS += -DPRINTF_DISABLE_SUPPORT_FLOAT -DPRINTF_DISABLE_SUPPORT_EXPONENTIAL -DPRINTF_DISABLE_SUPPORT_PTRDIFF_T # CFLAGS += -DPRINTF_DISABLE_SUPPORT_FLOAT -DPRINTF_DISABLE_SUPPORT_EXPONENTIAL -DPRINTF_DISABLE_SUPPORT_PTRDIFF_T
# Consider this one if we are running short on flash, it saved about 1K # Consider this one if we are running short on flash, it saved about 1K
# CFLAGS += -DPRINTF_DISABLE_SUPPORT_LONG_LONG # CFLAGS += -DPRINTF_DISABLE_SUPPORT_LONG_LONG

View File

@@ -36,7 +36,11 @@ using BSP::ReturnCode;
using BSP::SystemTimer; using BSP::SystemTimer;
static BSP::Schedule::LowPowerTaskScheduler<1> g_sched; static BSP::Schedule::LowPowerTaskScheduler<1> g_sched;
#if defined(BOARD_WATCH)
static BSP::UsartDriver g_test_uart(USART2, g_sched);
#elif defined(BOARD_DEVBOARD)
static BSP::UsartDriver g_test_uart(USART1, g_sched); static BSP::UsartDriver g_test_uart(USART1, g_sched);
#endif
static BSP::GpioDriver g_gpioa(GPIOA); static BSP::GpioDriver g_gpioa(GPIOA);
static BSP::time_t get_time() { static BSP::time_t get_time() {

View File

@@ -33,7 +33,11 @@
using BSP::Time; using BSP::Time;
static BSP::Schedule::LowPowerTaskScheduler<1> g_sched; static BSP::Schedule::LowPowerTaskScheduler<1> g_sched;
#if defined(BOARD_WATCH)
static BSP::UsartDriver g_test_uart(USART2, g_sched);
#elif defined(BOARD_DEVBOARD)
static BSP::UsartDriver g_test_uart(USART1, g_sched); static BSP::UsartDriver g_test_uart(USART1, g_sched);
#endif
static BSP::GpioDriver g_gpioa(GPIOA); static BSP::GpioDriver g_gpioa(GPIOA);
[[noreturn]] void main() { [[noreturn]] void main() {

View File

@@ -37,8 +37,13 @@ using BSP::ReturnCode;
using BSP::SystemTimer; using BSP::SystemTimer;
static BSP::Schedule::LowPowerTaskScheduler<1> g_sched; static BSP::Schedule::LowPowerTaskScheduler<1> g_sched;
#if defined(BOARD_WATCH)
static BSP::UsartDriver g_test_uart(USART2, g_sched);
static BSP::LptimPwm g_test_lptim(LPTIM1);
#elif defined(BOARD_DEVBOARD)
static BSP::UsartDriver g_test_uart(USART1, g_sched); static BSP::UsartDriver g_test_uart(USART1, g_sched);
static BSP::LptimPwm g_test_lptim(LPTIM2); static BSP::LptimPwm g_test_lptim(LPTIM2);
#endif
static BSP::GpioDriver g_gpioa(GPIOA); static BSP::GpioDriver g_gpioa(GPIOA);
static BSP::GpioDriver g_gpiob(GPIOB); static BSP::GpioDriver g_gpiob(GPIOB);
static BSP::GpioPin g_lptim_pin(g_gpiob, 2); static BSP::GpioPin g_lptim_pin(g_gpiob, 2);

View File

@@ -33,7 +33,11 @@
using BSP::Time; using BSP::Time;
static BSP::Schedule::LowPowerTaskScheduler<1> g_sched; static BSP::Schedule::LowPowerTaskScheduler<1> g_sched;
#if defined(BOARD_WATCH)
static BSP::UsartDriver g_test_uart(USART2, g_sched);
#elif defined(BOARD_DEVBOARD)
static BSP::UsartDriver g_test_uart(USART1, g_sched); static BSP::UsartDriver g_test_uart(USART1, g_sched);
#endif
static BSP::GpioDriver g_gpioa(GPIOA); static BSP::GpioDriver g_gpioa(GPIOA);
[[noreturn]] void main() { [[noreturn]] void main() {

View File

@@ -39,7 +39,11 @@ using BSP::SystemTimer;
using BSP::time_t; using BSP::time_t;
static BSP::Schedule::LowPowerTaskScheduler<1> g_sched; static BSP::Schedule::LowPowerTaskScheduler<1> g_sched;
#if defined(BOARD_WATCH)
static BSP::UsartDriver g_test_uart(USART2, g_sched);
#elif defined(BOARD_DEVBOARD)
static BSP::UsartDriver g_test_uart(USART1, g_sched); static BSP::UsartDriver g_test_uart(USART1, g_sched);
#endif
static BSP::GpioDriver g_gpioa(GPIOA); static BSP::GpioDriver g_gpioa(GPIOA);
static BSP::GpioPin g_test_pin(g_gpioa, 6); static BSP::GpioPin g_test_pin(g_gpioa, 6);

View File

@@ -39,7 +39,11 @@ using BSP::WallClockTime;
using BSP::RtcDriver; using BSP::RtcDriver;
static BSP::Schedule::LowPowerTaskScheduler<1> g_sched; static BSP::Schedule::LowPowerTaskScheduler<1> g_sched;
#if defined(BOARD_WATCH)
static BSP::UsartDriver g_test_uart(USART2, g_sched);
#elif defined(BOARD_DEVBOARD)
static BSP::UsartDriver g_test_uart(USART1, g_sched); static BSP::UsartDriver g_test_uart(USART1, g_sched);
#endif
static BSP::GpioDriver g_gpioa(GPIOA); static BSP::GpioDriver g_gpioa(GPIOA);
static BSP::GpioPin g_test_pin(g_gpioa, 6); static BSP::GpioPin g_test_pin(g_gpioa, 6);
static char buffer[128] = {0}; static char buffer[128] = {0};

View File

@@ -39,7 +39,11 @@ using BSP::SystemTimer;
using BSP::time_t; using BSP::time_t;
static BSP::Schedule::LowPowerTaskScheduler<1> g_sched; static BSP::Schedule::LowPowerTaskScheduler<1> g_sched;
#if defined(BOARD_WATCH)
static BSP::UsartDriver g_test_uart(USART2, g_sched);
#elif defined(BOARD_DEVBOARD)
static BSP::UsartDriver g_test_uart(USART1, g_sched); static BSP::UsartDriver g_test_uart(USART1, g_sched);
#endif
static BSP::GpioDriver g_gpioa(GPIOA); static BSP::GpioDriver g_gpioa(GPIOA);
static BSP::GpioPin g_test_pin(g_gpioa, 6); static BSP::GpioPin g_test_pin(g_gpioa, 6);

View File

@@ -33,7 +33,11 @@
using BSP::Time; using BSP::Time;
static BSP::Schedule::LowPowerTaskScheduler<1> g_sched; static BSP::Schedule::LowPowerTaskScheduler<1> g_sched;
#if defined(BOARD_WATCH)
static BSP::UsartDriver g_test_uart(USART2, g_sched);
#elif defined(BOARD_DEVBOARD)
static BSP::UsartDriver g_test_uart(USART1, g_sched); static BSP::UsartDriver g_test_uart(USART1, g_sched);
#endif
static BSP::GpioDriver g_gpioa(GPIOA); static BSP::GpioDriver g_gpioa(GPIOA);
[[noreturn]] void main() { [[noreturn]] void main() {

View File

@@ -38,7 +38,11 @@ using BSP::SystemTimer;
using BSP::time_t; using BSP::time_t;
static BSP::Schedule::LowPowerTaskScheduler<1> g_sched; static BSP::Schedule::LowPowerTaskScheduler<1> g_sched;
#if defined(BOARD_WATCH)
static BSP::UsartDriver g_test_uart(USART2, g_sched);
#elif defined(BOARD_DEVBOARD)
static BSP::UsartDriver g_test_uart(USART1, g_sched); static BSP::UsartDriver g_test_uart(USART1, g_sched);
#endif
static BSP::GpioDriver g_gpioa(GPIOA); static BSP::GpioDriver g_gpioa(GPIOA);
static BSP::GpioPin g_test_pin(g_gpioa, 6); static BSP::GpioPin g_test_pin(g_gpioa, 6);