yc_systick.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. #include "yc_systick.h"
  9. tick SystickCount;
  10. void Systick_Dealy_Ms(uint32_t MS)
  11. {
  12. uint32_t ReloadValue;
  13. ReloadValue = MS * 9600;
  14. *SYSTICK_CSR &= ~(((uint32_t)1) << SYSTICK_CSR_ENABLE);
  15. *SYSTICK_RVR = ReloadValue; //Set the reload value
  16. *SYSTICK_CVR = 0; //clear the current value
  17. *SYSTICK_CSR |= ((SYSTICK_SYSCLOCK << SYSTICK_CSR_CLKSOURCE) | (1 << SYSTICK_CSR_ENABLE));
  18. while (!(*SYSTICK_CVR == 0));
  19. *SYSTICK_RVR = 0;
  20. }
  21. uint32_t SysTick_Config(uint32_t ReloadValue)
  22. {
  23. ReloadValue -= 1;
  24. if (!IS_RELOAD_VALUE(ReloadValue))
  25. return 1;
  26. *SYSTICK_CSR &= ~(((uint32_t)1) << SYSTICK_CSR_ENABLE);
  27. *SYSTICK_RVR = ReloadValue; //Set the reload value
  28. *SYSTICK_CVR = 0; //clear the current value
  29. SystickCount = 0; // Reset the overflow counter
  30. *SYSTICK_CSR |=
  31. ((SYSTICK_SYSCLOCK << SYSTICK_CSR_CLKSOURCE) |
  32. (1 << SYSTICK_CSR_ENABLE) |
  33. (1 << SYSTICK_CSR_TICKINT));
  34. return 0;
  35. }
  36. tick SysTick_GetTick()
  37. {
  38. return SystickCount;
  39. }
  40. Boolean SysTick_IsTimeOut(tick start_tick, int interval)
  41. {
  42. start_tick = SysTick_GetTick() - start_tick;
  43. if (start_tick < 0)
  44. start_tick += TICK_MAX_VALUE;
  45. if (((start_tick * (*SYSTICK_RVR)) / (CPU_MHZ / 1000)) >= interval)
  46. {
  47. return TRUE;
  48. }
  49. else
  50. {
  51. return FALSE;
  52. }
  53. }
  54. uint32_t SysTick_GetRelativeTime(tick start_tick)
  55. {
  56. start_tick = SysTick_GetTick() - start_tick;
  57. if (start_tick < 0)
  58. start_tick += TICK_MAX_VALUE;
  59. return ((start_tick * (*SYSTICK_RVR)) / (CPU_MHZ / 1000));
  60. }