1 /*
2 File Name    : yc_systick.c
3 Author       : Yichip
4 Version      : V1.0
5 Date         : 2018/03/27
6 Description  : systick encapsulation.
7 */
8 
9 #include "yc_systick.h"
10 
11 tick SystickCount;
12 
Systick_Dealy_Ms(uint32_t MS)13 void Systick_Dealy_Ms(uint32_t MS)
14 {
15 	uint32_t ReloadValue;
16 
17 	ReloadValue = MS * 9600;
18 
19 	*SYSTICK_CSR &= ~(((uint32_t)1) << SYSTICK_CSR_ENABLE);
20 	*SYSTICK_RVR = ReloadValue; //Set the reload value
21 	*SYSTICK_CVR = 0;			//clear the current value
22 	*SYSTICK_CSR |= ((SYSTICK_SYSCLOCK << SYSTICK_CSR_CLKSOURCE) | (1 << SYSTICK_CSR_ENABLE));
23 
24 	while (!(*SYSTICK_CVR == 0));
25 	*SYSTICK_RVR = 0;
26 }
27 
SysTick_Config(uint32_t ReloadValue)28 uint32_t SysTick_Config(uint32_t ReloadValue)
29 {
30 	ReloadValue -= 1;
31 	if (!IS_RELOAD_VALUE(ReloadValue))
32 		return 1;
33 
34 	*SYSTICK_CSR &= ~(((uint32_t)1) << SYSTICK_CSR_ENABLE);
35 
36 	*SYSTICK_RVR = ReloadValue; //Set the reload value
37 	*SYSTICK_CVR = 0;			//clear the current value
38 	SystickCount = 0;			// Reset the overflow counter
39 	*SYSTICK_CSR |=
40 		((SYSTICK_SYSCLOCK << SYSTICK_CSR_CLKSOURCE) |
41 		 (1 << SYSTICK_CSR_ENABLE) |
42 		 (1 << SYSTICK_CSR_TICKINT));
43 	return 0;
44 }
45 
SysTick_GetTick()46 tick SysTick_GetTick()
47 {
48 	return SystickCount;
49 }
50 
SysTick_IsTimeOut(tick start_tick,int interval)51 Boolean SysTick_IsTimeOut(tick start_tick, int interval)
52 {
53 	start_tick = SysTick_GetTick() - start_tick;
54 	if (start_tick < 0)
55 		start_tick += TICK_MAX_VALUE;
56 	if (((start_tick * (*SYSTICK_RVR)) / (CPU_MHZ / 1000)) >= interval)
57 	{
58 		return TRUE;
59 	}
60 	else
61 	{
62 		return FALSE;
63 	}
64 }
65 
SysTick_GetRelativeTime(tick start_tick)66 uint32_t SysTick_GetRelativeTime(tick start_tick)
67 {
68 	start_tick = SysTick_GetTick() - start_tick;
69 	if (start_tick < 0)
70 		start_tick += TICK_MAX_VALUE;
71 	return ((start_tick * (*SYSTICK_RVR)) / (CPU_MHZ / 1000));
72 }
73