diff --git a/Makefile b/Makefile index 174ec04..3e3bb7f 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,11 @@ APPLICATION ?= blinky PLATFORM ?= nrf52 + +ifneq "$(findstring $(PLATFORM), nrf52)" "" +CORE = cm4 +endif + TARGET_FILE ?= $(APPLICATION).elf CC = $(CROSS_COMPILE)gcc @@ -25,6 +30,7 @@ C_SRCS += $(wildcard $(SRC_DIR)/application/$(APPLICATION)/*.c) C_OBJS = $(patsubst $(SRC_DIR)%,$(OBJ_DIR)%,$(patsubst %.c,%.c.o,$(C_SRCS))) CC_SRCS = $(wildcard $(SRC_DIR)/*.cc) +CC_SRCS += $(wildcard $(SRC_DIR)/platform/$(CORE)/*.cc) CC_SRCS += $(wildcard $(SRC_DIR)/platform/$(PLATFORM)/*.cc) CC_SRCS += $(wildcard $(SRC_DIR)/application/$(APPLICATION)/*.cc) CC_OBJS = $(patsubst $(SRC_DIR)%,$(OBJ_DIR)%,$(patsubst %.cc,%.cc.o,$(CC_SRCS))) diff --git a/src/platform/cm4/SystemTick.cc b/src/platform/cm4/SystemTick.cc new file mode 100644 index 0000000..be2cc5b --- /dev/null +++ b/src/platform/cm4/SystemTick.cc @@ -0,0 +1,35 @@ +extern "C" { + #include "nrf52.h" +} + +#include "platform/cm4/SystemTick.h" +#include "platform/nrf52/InterruptGuardian.h" + +using namespace pinetime::platform::cm4; +using namespace pinetime::platform::nrf52; + +SystemTick::SystemTick() + : InterruptHandler(InterruptGuardian::Nrf52IrqN::SYS_TICK_IRQ) + , sys_tick(0) +{ +} + +void SystemTick::handle() +{ + this->sys_tick++; +} + +void SystemTick::enable() +{ + SysTick_Config(SystemCoreClock / 1000); +} + +void SystemTick::disable() +{ + SysTick->CTRL = 0; +} + +uint32_t SystemTick::tick() +{ + return this->sys_tick; +} diff --git a/src/platform/cm4/SystemTick.h b/src/platform/cm4/SystemTick.h new file mode 100644 index 0000000..0a52cbf --- /dev/null +++ b/src/platform/cm4/SystemTick.h @@ -0,0 +1,23 @@ +#ifndef __PLATFORM_CM4_SYSTEMTICK_H__ +#define __PLATFORM_CM4_SYSTEMTICK_H__ + +#include "platform/nrf52/InterruptHandler.h" + +namespace pinetime::platform::cm4 { + +class SystemTick : public pinetime::platform::nrf52::InterruptHandler +{ + public: + SystemTick(); + void handle(); + void enable(); + void disable(); + uint32_t tick(); + + private: + uint32_t sys_tick; +}; + +} + +#endif