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.

60 lines
1.7 KiB

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