Files
RaDrone/Source/Drivers/Tick.cpp
2026-04-16 16:48:40 +03:00

61 lines
732 B
C++

#include "Tick.h"
#include "stm32g4xx.h"
static unsigned long Tick = 0;
extern "C" void SysTick_Handler()
{
Tick++;
}
void TICK_Init()
{
SysTick->LOAD = SystemCoreClock / 1000;
SysTick->VAL = 0UL;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;
NVIC_SetPriority(SysTick_IRQn, 0);
}
unsigned long TICK_GetCount() // ms
{
return Tick;
}
float TICK_GetTime() // s
{
return ((float)Tick)/1000.0f;
}
void TICK_Delay(unsigned long us)
{
long tick=SysTick->VAL;
long wait=us*(SystemCoreClock/1000000);
long load = SysTick->LOAD;
long val;
do
{
val=SysTick->VAL;
if(val>tick) val-=load;
} while(tick-val < wait);
}