You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.2 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #include "delay.h"
  2. #include <stdint.h>
  3. static TIM_HandleTypeDef *m_dhtim;
  4. void chip_delay_init(TIM_HandleTypeDef *htim) { m_dhtim = htim; }
  5. void _chip_delay_us(uint32_t n) {
  6. volatile uint32_t counter = 0;
  7. __HAL_TIM_SET_COUNTER(m_dhtim, 0);
  8. HAL_TIM_Base_Start(m_dhtim);
  9. while (counter < n) {
  10. counter = __HAL_TIM_GET_COUNTER(m_dhtim);
  11. }
  12. HAL_TIM_Base_Stop(m_dhtim);
  13. }
  14. void chip_delay_us(uint32_t n) {
  15. uint32_t us = n % 1000;
  16. uint32_t ms = n / 1000;
  17. if (us > 0) {
  18. _chip_delay_us(us);
  19. }
  20. for (uint32_t i = 0; i < ms; i++) {
  21. _chip_delay_us(1000);
  22. }
  23. }
  24. void chip_delay_ms(uint32_t n) {
  25. uint32_t i;
  26. for (i = 0; i < n; i++) {
  27. chip_delay_us(1000);
  28. }
  29. }
  30. void ifly_delay_ms(uint32_t n) { chip_delay_ms(n); }
  31. uint32_t chip_get_ticket() {
  32. uint32_t ticket = HAL_GetTick();
  33. return ticket;
  34. }
  35. uint32_t haspassedms(uint32_t ticket) {
  36. uint32_t nowticket = HAL_GetTick();
  37. if (nowticket >= ticket) {
  38. return nowticket - ticket;
  39. }
  40. return UINT32_MAX - ticket + nowticket;
  41. }
  42. uint32_t haspassedms2(uint32_t lastticket, uint32_t nowticket) {
  43. if (nowticket >= lastticket) {
  44. return nowticket - lastticket;
  45. }
  46. return UINT32_MAX - lastticket + nowticket;
  47. }