Files
lishanpi/drv/system/systick.cpp
T

67 lines
1.0 KiB
C++
Raw Normal View History

2026-04-26 16:24:42 +08:00
#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();
}