Files
Frame-rate-optimization/Common/systick.c

59 lines
1.1 KiB
C
Raw Normal View History

2026-04-09 10:14:20 +08:00
#include "systick.h"
__IO uint64_t g_system_tick = 0;
void systick_config(void)
{
/* setup systick timer for 1000Hz interrupts */
if(SysTick_Config( system_core_clock / 1000U)) {
/* capture error */
while(1) {
}
}
/* configure the systick handler priority */
NVIC_SetPriority(SysTick_IRQn, 0x00U);
}
uint64_t get_system_tick(void)
{
return g_system_tick;
}
void delay_us(uint32_t _us)
{
uint32_t ticks;
uint32_t told, tnow, tcnt = 0;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> = <20>ӳ<EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD> * ÿ΢<C3BF><CEA2><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
ticks = _us * (SystemCoreClock / 1000000);
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0>SysTickֵ
told = SysTick->VAL;
while (1)
{
// <20>ظ<EFBFBD>ˢ<EFBFBD>»<EFBFBD>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0>SysTickֵ
tnow = SysTick->VAL;
if (tnow != told)
{
if (tnow < told)
tcnt += told - tnow;
else
tcnt += SysTick->LOAD - tnow + told;
told = tnow;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB5BD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ѭ<EFBFBD><D1AD>
if (tcnt >= ticks)
break;
}
}
}
void delay_ms(uint32_t _ms) { delay_us(_ms * 500); }