第一次提交
This commit is contained in:
58
Common/systick.c
Normal file
58
Common/systick.c
Normal file
@@ -0,0 +1,58 @@
|
||||
#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); }
|
||||
|
||||
Reference in New Issue
Block a user