fc10ef2e10
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
67 lines
1.0 KiB
C++
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();
|
|
}
|