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.

61 lines
1.7 KiB

12 months ago
11 months ago
12 months ago
  1. #include "zdelay.h"
  2. #include "zbase.h"
  3. #include "project_configs.h"
  4. extern TIM_HandleTypeDef SDK_DELAY_US_TIMER;
  5. static HAL_StatusTypeDef _HAL_TIM_Base_Start(TIM_HandleTypeDef* htim) __attribute__((optimize("O2")));
  6. static HAL_StatusTypeDef _HAL_TIM_Base_Stop(TIM_HandleTypeDef* htim) __attribute__((optimize("O2")));
  7. static HAL_StatusTypeDef _HAL_TIM_Base_Start(TIM_HandleTypeDef* htim) {
  8. uint32_t tmpsmcr;
  9. /* Check the TIM state */
  10. if (htim->State != HAL_TIM_STATE_READY) {
  11. return HAL_ERROR;
  12. }
  13. htim->State = HAL_TIM_STATE_BUSY;
  14. if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {
  15. tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  16. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {
  17. __HAL_TIM_ENABLE(htim);
  18. }
  19. } else {
  20. __HAL_TIM_ENABLE(htim);
  21. }
  22. return HAL_OK;
  23. }
  24. static HAL_StatusTypeDef _HAL_TIM_Base_Stop(TIM_HandleTypeDef* htim) {
  25. /* Disable the Peripheral */
  26. __HAL_TIM_DISABLE(htim);
  27. /* Set the TIM state */
  28. htim->State = HAL_TIM_STATE_READY;
  29. /* Return function status */
  30. return HAL_OK;
  31. }
  32. void zdelay_us(int var_nus) {
  33. volatile uint32_t counter = 0;
  34. __HAL_TIM_SET_COUNTER(&SDK_DELAY_US_TIMER, 0);
  35. _HAL_TIM_Base_Start(&SDK_DELAY_US_TIMER);
  36. while (counter < var_nus) {
  37. counter = __HAL_TIM_GET_COUNTER(&SDK_DELAY_US_TIMER);
  38. }
  39. _HAL_TIM_Base_Stop(&SDK_DELAY_US_TIMER);
  40. }
  41. void zdelay_ms(int ms) {
  42. for (int i = 0; i < ms; i++) {
  43. zdelay_us(1000);
  44. }
  45. }
  46. void zos_delay_ms(int ms) { osDelay(ms); }
  47. uint32_t zget_ticket(void) { return HAL_GetTick(); }
  48. uint32_t zhas_passedms(uint32_t ticket) {
  49. uint32_t now = HAL_GetTick();
  50. if (now >= ticket) {
  51. return now - ticket;
  52. } else {
  53. return 0xFFFFFFFF - ticket + now;
  54. }
  55. }