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)13void 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)28uint32_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()46tick SysTick_GetTick() 47 { 48 return SystickCount; 49 } 50 SysTick_IsTimeOut(tick start_tick,int interval)51Boolean 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)66uint32_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