Fix building for BOARD=watch (Fixes #8), enable in CI
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@@ -6,4 +6,7 @@ build
|
||||
*.pyc
|
||||
*.su
|
||||
*.map
|
||||
.gdb_history
|
||||
.gdb_history
|
||||
GTAGS
|
||||
GRTAGS
|
||||
GPATH
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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};
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user