delay.c 925 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "bsp/bsp.h"
  2. #include "bsp/delay.h"
  3. void task_ticks_enable(void)
  4. {
  5. CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
  6. DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
  7. }
  8. uint32_t task_ticks_abs(void)
  9. {
  10. return DWT->CYCCNT;
  11. }
  12. uint32_t task_ticks_rel(uint32_t start)
  13. {
  14. uint32_t ticks = DWT->CYCCNT;
  15. if (ticks >= start) {
  16. return ticks - start;
  17. }
  18. return 0xFFFFFFFF - start + ticks + 1;
  19. }
  20. void task_ticks_delay(uint32_t ticks)
  21. {
  22. uint32_t start;
  23. start = task_ticks_abs();
  24. while (task_ticks_rel(start) < ticks){
  25. };
  26. }
  27. void task_udelay(uint32_t delay)
  28. {
  29. task_ticks_delay(delay * (SystemCoreClock / 1000000));
  30. }
  31. void delay_us(uint16_t cnt)
  32. {
  33. task_udelay(cnt);
  34. }
  35. /*!
  36. \brief delay a time in milliseconds
  37. \param[in] count: count in milliseconds
  38. \param[out] none
  39. \retval none
  40. */
  41. void delay_ms(uint32_t count)
  42. {
  43. task_udelay(1000);
  44. }