timing.c 879 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "RTE_Components.h"
  2. #include CMSIS_device_header
  3. #define SYSTICK_INITIAL_VALUE 0x0FFFFFF
  4. static int32_t startCycles=0;
  5. void initCycleMeasurement()
  6. {
  7. SysTick->LOAD = SYSTICK_INITIAL_VALUE;
  8. SysTick->VAL = 0;
  9. SysTick->CTRL = 0;
  10. }
  11. void cycleMeasurementStart()
  12. {
  13. SysTick->CTRL = 0;
  14. SysTick->LOAD = SYSTICK_INITIAL_VALUE;
  15. SysTick->VAL = 0;
  16. SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
  17. /* For AVH simulation ONLY */
  18. while(SysTick->VAL == 0);
  19. startCycles = SysTick->VAL;
  20. }
  21. void cycleMeasurementStop()
  22. {
  23. SysTick->CTRL = 0;
  24. SysTick->LOAD = SYSTICK_INITIAL_VALUE;
  25. }
  26. int32_t getCycles()
  27. {
  28. int32_t v = SysTick->VAL;
  29. int32_t result;
  30. result = (int32_t)startCycles - (int32_t)v;
  31. if (result < 0)
  32. {
  33. result += SYSTICK_INITIAL_VALUE;
  34. }
  35. return(result);
  36. }