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.
41 lines
949 B
41 lines
949 B
#include "clock.hpp"
|
|
extern "C" {
|
|
|
|
static zchip_tim_t* m_usdleaytim;
|
|
|
|
uint32_t zchip_clock_init(zchip_clock_cfg_t* cfg) {
|
|
m_usdleaytim = cfg->usdleaytim;
|
|
return 0;
|
|
}
|
|
//
|
|
uint32_t zchip_clock_get_ticket(void) { return HAL_GetTick(); }
|
|
uint32_t zchip_clock_hasspassed(uint32_t ticket) {
|
|
uint32_t nowticket = HAL_GetTick();
|
|
if (nowticket >= ticket) {
|
|
return nowticket - ticket;
|
|
}
|
|
return UINT32_MAX - ticket + nowticket;
|
|
}
|
|
|
|
void __zchip_clock_early_delayus(uint32_t n) {
|
|
volatile uint32_t counter = 0;
|
|
__HAL_TIM_SET_COUNTER(m_usdleaytim, 0);
|
|
HAL_TIM_Base_Start(m_usdleaytim);
|
|
while (counter < n) {
|
|
counter = __HAL_TIM_GET_COUNTER(m_usdleaytim);
|
|
}
|
|
HAL_TIM_Base_Stop(m_usdleaytim);
|
|
}
|
|
void zchip_clock_early_delayus(uint32_t n) {
|
|
uint32_t us = n % 1000;
|
|
uint32_t ms = n / 1000;
|
|
if (us > 0) {
|
|
__zchip_clock_early_delayus(us);
|
|
}
|
|
for (uint32_t i = 0; i < ms; i++) {
|
|
__zchip_clock_early_delayus(1000);
|
|
}
|
|
}
|
|
|
|
|
|
}
|