Files
lishanpi/drv/system/systick.cpp
T
hm fc10ef2e10 Initial commit: LSPi (LiangShanPi) project
GD32F470ZGT6 based project with full peripheral support:
- SDRAM (W9825G6KH) via EXMC
- LCD NT35510 (480x800) via EXMC NOR/PSRAM
- Flash (W25Q64) via SPI
- UART (USART0) debug console
- LED indicators
- CMSIS-DAP debug interface
- CMake + ARM GCC toolchain build system
2026-04-26 16:24:42 +08:00

67 lines
1.0 KiB
C++

#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();
}