78 lines
1.6 KiB
C
78 lines
1.6 KiB
C
|
|
#include "includes.h"
|
|||
|
|
|
|||
|
|
volatile u32 Systick_TickCount = 0;
|
|||
|
|
|
|||
|
|
void SysTick_Handler(void)
|
|||
|
|
{
|
|||
|
|
Systick_TickCount++;
|
|||
|
|
// if(Systick_TickCount % 10 == 0)
|
|||
|
|
// printf("#");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
u32 GetDelayTick(u32 ms)
|
|||
|
|
{
|
|||
|
|
return GetTickCount() + ms;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u8 IsTickOut(u32 OutTick)
|
|||
|
|
{
|
|||
|
|
u32 tick = GetTickCount();
|
|||
|
|
|
|||
|
|
if(tick > OutTick)
|
|||
|
|
{
|
|||
|
|
if(tick - OutTick > 0x80000000UL)
|
|||
|
|
return 0;
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
if(OutTick - tick > 0x80000000UL)
|
|||
|
|
return 1;
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u32 GetTickElapse(u32 start_tick, u32 end_tick)
|
|||
|
|
{
|
|||
|
|
if(end_tick >= start_tick)
|
|||
|
|
return (end_tick - start_tick);
|
|||
|
|
return (0xFFFFFFFFUL - start_tick + end_tick);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3>жϿ<D0B6><CFBF><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD>Ч
|
|||
|
|
void delay_ms(u32 ms)
|
|||
|
|
{
|
|||
|
|
u32 tick = GetDelayTick(ms);
|
|||
|
|
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
} while(!IsTickOut(tick));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ͨ<><CDA8>TMR2<52><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1ms<6D>ж<EFBFBD>
|
|||
|
|
void Clock_Init()
|
|||
|
|
{
|
|||
|
|
u32 us = CyclesPerUs * 1000; // 1ms
|
|||
|
|
|
|||
|
|
if ((us - 1UL) > SysTick_LOAD_RELOAD_Msk)
|
|||
|
|
return; /* Reload value impossible */
|
|||
|
|
|
|||
|
|
SysTick->LOAD = (uint32_t)(us - 1UL); /* set reload register */
|
|||
|
|
NVIC_SetPriority (SysTick_IRQn, 0); /* set Priority for Systick Interrupt */
|
|||
|
|
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
|
|||
|
|
SysTick->CTRL |= (SysTick_CTRL_CLKSOURCE_Msk |
|
|||
|
|
SysTick_CTRL_TICKINT_Msk |
|
|||
|
|
SysTick_CTRL_ENABLE_Msk); /* Enable SysTick IRQ and SysTick Timer */
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void delay_us(uint16_t us)
|
|||
|
|
{
|
|||
|
|
uint32_t j;
|
|||
|
|
|
|||
|
|
while(us--)
|
|||
|
|
{
|
|||
|
|
j = SystemCoreClock / 1000000;
|
|||
|
|
while(j--);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|