forked from espressif/esp-idf
esp_timer: correct startup time
This commit is contained in:
@@ -1,7 +1,8 @@
|
|||||||
idf_build_get_property(target IDF_TARGET)
|
idf_build_get_property(target IDF_TARGET)
|
||||||
|
|
||||||
set(srcs "src/esp_timer.c"
|
set(srcs "src/esp_timer.c"
|
||||||
"src/ets_timer_legacy.c")
|
"src/ets_timer_legacy.c"
|
||||||
|
"src/system_time.c")
|
||||||
|
|
||||||
if(CONFIG_ESP_TIMER_IMPL_FRC2)
|
if(CONFIG_ESP_TIMER_IMPL_FRC2)
|
||||||
list(APPEND srcs "src/esp_timer_impl_frc_legacy.c")
|
list(APPEND srcs "src/esp_timer_impl_frc_legacy.c")
|
||||||
|
@@ -132,3 +132,10 @@ uint64_t esp_timer_impl_get_counter_reg(void);
|
|||||||
* @return the value of the alarm register
|
* @return the value of the alarm register
|
||||||
*/
|
*/
|
||||||
uint64_t esp_timer_impl_get_alarm_reg(void);
|
uint64_t esp_timer_impl_get_alarm_reg(void);
|
||||||
|
|
||||||
|
#if CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER
|
||||||
|
/**
|
||||||
|
* @brief Initialize esp_timer as system time provider.
|
||||||
|
*/
|
||||||
|
void esp_timer_impl_init_system_time(void);
|
||||||
|
#endif
|
||||||
|
@@ -446,9 +446,7 @@ esp_err_t esp_timer_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER
|
#if CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER
|
||||||
// [refactor-todo] this logic, "esp_rtc_get_time_us() - g_startup_time", is also
|
esp_timer_impl_init_system_time();
|
||||||
// the weak definition of esp_system_get_time; find a way to remove this duplication.
|
|
||||||
esp_timer_private_advance(esp_rtc_get_time_us() - g_startup_time);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
@@ -600,17 +598,3 @@ int64_t IRAM_ATTR esp_timer_get_next_alarm(void)
|
|||||||
}
|
}
|
||||||
return next_alarm;
|
return next_alarm;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Provides strong definition for system time functions relied upon
|
|
||||||
// by core components.
|
|
||||||
#if CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER
|
|
||||||
int64_t IRAM_ATTR esp_system_get_time(void)
|
|
||||||
{
|
|
||||||
return esp_timer_get_time();
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t IRAM_ATTR esp_system_get_time_resolution(void)
|
|
||||||
{
|
|
||||||
return 1000;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
53
components/esp_timer/src/system_time.c
Normal file
53
components/esp_timer/src/system_time.c
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
// Copyright 2017 Espressif Systems (Shanghai) PTE LTD
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// Provides strong definition for system time functions relied upon
|
||||||
|
// by core components.
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
|
#if CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER
|
||||||
|
#include "esp_timer.h"
|
||||||
|
#include "esp_timer_impl.h"
|
||||||
|
|
||||||
|
#include "esp_private/startup_internal.h"
|
||||||
|
|
||||||
|
#if CONFIG_IDF_TARGET_ESP32
|
||||||
|
#include "esp32/rtc.h"
|
||||||
|
#elif CONFIG_IDF_TARGET_ESP32S2
|
||||||
|
#include "esp32s2/rtc.h"
|
||||||
|
#elif CONFIG_IDF_TARGET_ESP32S3
|
||||||
|
#include "esp32s3/rtc.h"
|
||||||
|
#elif CONFIG_IDF_TARGET_ESP32C3
|
||||||
|
#include "esp32c3/rtc.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Correction for underlying timer to keep definition
|
||||||
|
// of system time consistent.
|
||||||
|
static int64_t s_correction_us = 0;
|
||||||
|
|
||||||
|
void esp_timer_impl_init_system_time(void)
|
||||||
|
{
|
||||||
|
s_correction_us = esp_rtc_get_time_us() - g_startup_time - esp_timer_impl_get_time();
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t IRAM_ATTR esp_system_get_time(void)
|
||||||
|
{
|
||||||
|
return esp_timer_get_time() + s_correction_us;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t IRAM_ATTR esp_system_get_time_resolution(void)
|
||||||
|
{
|
||||||
|
return 1000;
|
||||||
|
}
|
||||||
|
#endif
|
Reference in New Issue
Block a user