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

3
.gitignore vendored
View File

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

View File

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

View File

@@ -169,6 +169,12 @@ ReturnCode RtcDriver::init_hw()
SET(RTC->CR, RTC_CR_WUTIE);
NVIC_EnableIRQ(RTC_IRQn);
NVIC_SetPriority(RTC_IRQn, 1);
enable_periodic_alarm();
// Clear the interrupt in the RTC
CLR(RTC->ISR, RTC_ISR_WUTF);
#elif defined(STM32L4XX)
CLR(RTC->ICSR, RTC_ICSR_INIT);
@@ -179,20 +185,17 @@ ReturnCode RtcDriver::init_hw()
SET(RTC->CR, RTC_CR_WUTIE);
NVIC_EnableIRQ(RTC_WKUP_IRQn);
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
SET(RTC->SCR, RTC_SCR_CWUTF);
// Disable the Wakeup timer (its periodic, but we use it as a
// one-shot timer
#else
#error "Unsupported device type"
#endif
// Disable the wakeup timer. This can be leftover from an old firmware/reset
CLR(RTC->CR, RTC_CR_WUTE);
disable_rtc_write();
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->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);
#else
#error "Unsupported family"
#endif
// Finally, enable the timer
SET(RTC->CR, RTC_CR_WUTE);
disable_rtc_write();
@@ -327,9 +339,18 @@ BSP::time_t RtcDriver::RtcSystemTimer::get_time()
uint64_t new_timer_ticks, new_millis;
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();
while (!(RTC->ICSR & RTC_ICSR_RSF)) {}
#else
#error "Unsupported family"
#endif
do {
__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_TYPE_DEFINE = $(shell echo $(DEVICE_TYPE) | 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
@@ -128,7 +129,7 @@ CFLAGS += $(CPU_FLAGS)
CFLAGS += -ffreestanding
CFLAGS += -fstack-usage -Wstack-usage=128
# 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
# Consider this one if we are running short on flash, it saved about 1K
# CFLAGS += -DPRINTF_DISABLE_SUPPORT_LONG_LONG

View File

@@ -36,7 +36,11 @@ using BSP::ReturnCode;
using BSP::SystemTimer;
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);
#endif
static BSP::GpioDriver g_gpioa(GPIOA);
static BSP::time_t get_time() {

View File

@@ -33,7 +33,11 @@
using BSP::Time;
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);
#endif
static BSP::GpioDriver g_gpioa(GPIOA);
[[noreturn]] void main() {

View File

@@ -37,8 +37,13 @@ using BSP::ReturnCode;
using BSP::SystemTimer;
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::LptimPwm g_test_lptim(LPTIM2);
#endif
static BSP::GpioDriver g_gpioa(GPIOA);
static BSP::GpioDriver g_gpiob(GPIOB);
static BSP::GpioPin g_lptim_pin(g_gpiob, 2);

View File

@@ -33,7 +33,11 @@
using BSP::Time;
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);
#endif
static BSP::GpioDriver g_gpioa(GPIOA);
[[noreturn]] void main() {

View File

@@ -39,7 +39,11 @@ using BSP::SystemTimer;
using BSP::time_t;
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);
#endif
static BSP::GpioDriver g_gpioa(GPIOA);
static BSP::GpioPin g_test_pin(g_gpioa, 6);

View File

@@ -39,7 +39,11 @@ using BSP::WallClockTime;
using BSP::RtcDriver;
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);
#endif
static BSP::GpioDriver g_gpioa(GPIOA);
static BSP::GpioPin g_test_pin(g_gpioa, 6);
static char buffer[128] = {0};

View File

@@ -39,7 +39,11 @@ using BSP::SystemTimer;
using BSP::time_t;
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);
#endif
static BSP::GpioDriver g_gpioa(GPIOA);
static BSP::GpioPin g_test_pin(g_gpioa, 6);

View File

@@ -33,7 +33,11 @@
using BSP::Time;
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);
#endif
static BSP::GpioDriver g_gpioa(GPIOA);
[[noreturn]] void main() {

View File

@@ -38,7 +38,11 @@ using BSP::SystemTimer;
using BSP::time_t;
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);
#endif
static BSP::GpioDriver g_gpioa(GPIOA);
static BSP::GpioPin g_test_pin(g_gpioa, 6);