#include "gd32f4xx.h" #include "systick.h" SysTickTimer &SysTickTimer::instance() { static SysTickTimer timer; return timer; } RetCode SysTickTimer::config() { uint32_t clock_freq = SystemCoreClock; SysTick->CTRL = 0; if (clock_freq / 1000U > 0xFFFFFFU) { SysTick->LOAD = 0xFFFFFFU; } else { SysTick->LOAD = (clock_freq / 1000U) - 1; } SysTick->VAL = 0; SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; NVIC_SetPriority(SysTick_IRQn, 0x80U); return RET_OK; } void SysTickTimer::delay_ms(uint32_t count) { delay_ = count; while (0U != delay_) { } } void SysTickTimer::decrement() { if (0U != delay_) { delay_--; } } void systick_config(void) { SysTickTimer::instance().config(); } void delay_1ms(uint32_t count) { SysTickTimer::instance().delay_ms(count); } void delay_decrement(void) { SysTickTimer::instance().decrement(); }