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
61 lines
1.7 KiB
#include "zdelay.h"
|
|
|
|
#include "zbase.h"
|
|
#include "project_configs.h"
|
|
|
|
extern TIM_HandleTypeDef SDK_DELAY_US_TIMER;
|
|
|
|
static HAL_StatusTypeDef _HAL_TIM_Base_Start(TIM_HandleTypeDef* htim) __attribute__((optimize("O2")));
|
|
static HAL_StatusTypeDef _HAL_TIM_Base_Stop(TIM_HandleTypeDef* htim) __attribute__((optimize("O2")));
|
|
static HAL_StatusTypeDef _HAL_TIM_Base_Start(TIM_HandleTypeDef* htim) {
|
|
uint32_t tmpsmcr;
|
|
/* Check the TIM state */
|
|
if (htim->State != HAL_TIM_STATE_READY) {
|
|
return HAL_ERROR;
|
|
}
|
|
htim->State = HAL_TIM_STATE_BUSY;
|
|
if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {
|
|
tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
|
|
if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {
|
|
__HAL_TIM_ENABLE(htim);
|
|
}
|
|
} else {
|
|
__HAL_TIM_ENABLE(htim);
|
|
}
|
|
return HAL_OK;
|
|
}
|
|
static HAL_StatusTypeDef _HAL_TIM_Base_Stop(TIM_HandleTypeDef* htim) {
|
|
/* Disable the Peripheral */
|
|
__HAL_TIM_DISABLE(htim);
|
|
/* Set the TIM state */
|
|
htim->State = HAL_TIM_STATE_READY;
|
|
/* Return function status */
|
|
return HAL_OK;
|
|
}
|
|
|
|
void zdelay_us(int var_nus) {
|
|
volatile uint32_t counter = 0;
|
|
__HAL_TIM_SET_COUNTER(&SDK_DELAY_US_TIMER, 0);
|
|
_HAL_TIM_Base_Start(&SDK_DELAY_US_TIMER);
|
|
while (counter < var_nus) {
|
|
counter = __HAL_TIM_GET_COUNTER(&SDK_DELAY_US_TIMER);
|
|
}
|
|
_HAL_TIM_Base_Stop(&SDK_DELAY_US_TIMER);
|
|
}
|
|
void zdelay_ms(int ms) {
|
|
for (int i = 0; i < ms; i++) {
|
|
zdelay_us(1000);
|
|
}
|
|
}
|
|
void zos_delay_ms(int ms) { osDelay(ms); }
|
|
|
|
uint32_t zget_ticket(void) { return HAL_GetTick(); }
|
|
|
|
uint32_t zhas_passedms(uint32_t ticket) {
|
|
uint32_t now = HAL_GetTick();
|
|
if (now >= ticket) {
|
|
return now - ticket;
|
|
} else {
|
|
return 0xFFFFFFFF - ticket + now;
|
|
}
|
|
}
|