From 8636fedb5add89a5fe0abac972ed716f5330caad Mon Sep 17 00:00:00 2001 From: Imbus <> Date: Wed, 16 Jul 2025 15:42:43 +0200 Subject: [PATCH] Pull out systick code into system.c --- Makefile | 4 ++-- main.c | 31 +------------------------------ system.c | 24 +++++++++--------------- system.h | 8 +++++--- 4 files changed, 17 insertions(+), 50 deletions(-) diff --git a/Makefile b/Makefile index 2cb48ca..67cc910 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ PROJECT := main BUILD_DIR := bin -# CFILES := main.c -CFILES += $(wildcard *.c) +CFILES := main.c system.c +# CFILES += $(wildcard *.c) OPENCM3_DIR := ./libopencm3 # Check if libopencm3 is available before including anything diff --git a/main.c b/main.c index ee1d25c..cf64bcd 100644 --- a/main.c +++ b/main.c @@ -4,42 +4,13 @@ #include #include #include - -volatile uint64_t ticks; +#include "system.h" static void gpio_setup(void) { rcc_periph_clock_enable(RCC_GPIOC); gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO13); } -void sys_tick_handler(void) { ticks++; } - -static void sys_tick_setup(void) { - ticks = 0; - // rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE16_72MHZ]); - - // systick_set_clocksource(STK_CSR_CLKSOURCE_AHB_DIV8); - systick_set_clocksource(STK_CSR_CLKSOURCE_AHB); - - // systick_set_reload(48000 - 1); - systick_set_frequency(1000, 72000000); - - systick_clear(); - - systick_interrupt_enable(); - systick_counter_enable(); - - return; -} - -static uint64_t sys_ticks_get(void) { return ticks; } - -static void delay(volatile uint32_t count) { - while (count-- > 0) { - __asm__("nop"); - } -} - int main(void) { rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE8_72MHZ]); // rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSI_48MHZ]); diff --git a/system.c b/system.c index 656b1a3..c1ec96e 100644 --- a/system.c +++ b/system.c @@ -2,30 +2,19 @@ #include #include -volatile uint64_t ticks = 0; +volatile uint64_t ticks; void sys_tick_handler(void) { ticks++; } -uint64_t get_ticks(void) { return ticks; } - -void systick_setup(void) { - // systick_set_frequency(1000, 72000000); - systick_set_clocksource(STK_CSR_CLKSOURCE_AHB); - systick_set_reload(72000000 / 1000 - 1); // 1ms tick - systick_clear(); - systick_interrupt_enable(); - systick_counter_enable(); -} +uint64_t sys_ticks_get(void) { return ticks; } void sys_tick_setup(void) { + /* Make sure clocks are setup */ ticks = 0; - // rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE16_72MHZ]); - // systick_set_clocksource(STK_CSR_CLKSOURCE_AHB_DIV8); systick_set_clocksource(STK_CSR_CLKSOURCE_AHB); - - // systick_set_reload(8999); systick_set_frequency(1000, 72000000); + systick_clear(); systick_interrupt_enable(); @@ -33,3 +22,8 @@ void sys_tick_setup(void) { return; } + +void delay_ms(uint64_t ms) { + uint64_t start = sys_ticks_get(); + while ((sys_ticks_get() - start) < ms); +} diff --git a/system.h b/system.h index 942ec89..84823af 100644 --- a/system.h +++ b/system.h @@ -1,6 +1,8 @@ #pragma once #include -void sys_tick_handler(void); -uint64_t get_ticks(void); -void systick_setup(void); +void sys_tick_handler(void); +uint64_t sys_get_ticks(void); +void sys_tick_setup(void); +uint64_t sys_ticks_get(void); +void delay_ms(uint64_t ms);