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.

40 lines
949 B

2 years ago
  1. #include "clock.hpp"
  2. extern "C" {
  3. static zchip_tim_t* m_usdleaytim;
  4. uint32_t zchip_clock_init(zchip_clock_cfg_t* cfg) {
  5. m_usdleaytim = cfg->usdleaytim;
  6. return 0;
  7. }
  8. //
  9. uint32_t zchip_clock_get_ticket(void) { return HAL_GetTick(); }
  10. uint32_t zchip_clock_hasspassed(uint32_t ticket) {
  11. uint32_t nowticket = HAL_GetTick();
  12. if (nowticket >= ticket) {
  13. return nowticket - ticket;
  14. }
  15. return UINT32_MAX - ticket + nowticket;
  16. }
  17. void __zchip_clock_early_delayus(uint32_t n) {
  18. volatile uint32_t counter = 0;
  19. __HAL_TIM_SET_COUNTER(m_usdleaytim, 0);
  20. HAL_TIM_Base_Start(m_usdleaytim);
  21. while (counter < n) {
  22. counter = __HAL_TIM_GET_COUNTER(m_usdleaytim);
  23. }
  24. HAL_TIM_Base_Stop(m_usdleaytim);
  25. }
  26. void zchip_clock_early_delayus(uint32_t n) {
  27. uint32_t us = n % 1000;
  28. uint32_t ms = n / 1000;
  29. if (us > 0) {
  30. __zchip_clock_early_delayus(us);
  31. }
  32. for (uint32_t i = 0; i < ms; i++) {
  33. __zchip_clock_early_delayus(1000);
  34. }
  35. }
  36. }