59 lines
1.1 KiB
C
59 lines
1.1 KiB
C
|
|
#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); }
|
|||
|
|
|