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
|
*.pyc
|
||||||
*.su
|
*.su
|
||||||
*.map
|
*.map
|
||||||
.gdb_history
|
.gdb_history
|
||||||
|
GTAGS
|
||||||
|
GRTAGS
|
||||||
|
GPATH
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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};
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user