Skip to content

Commit

Permalink
Rename esp_hal::time::current_time to esp_hal::time::now (#2091)
Browse files Browse the repository at this point in the history
* rename esp_hal::time::current_time to esp_hal::time::uptime

* changelog

* move more things to init

* s/uptime/now/g
  • Loading branch information
MabezDev authored Sep 5, 2024
1 parent f11c18a commit 70126c8
Show file tree
Hide file tree
Showing 21 changed files with 73 additions and 152 deletions.
6 changes: 3 additions & 3 deletions esp-hal-embassy/src/time_driver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use embassy_time_driver::{AlarmHandle, Driver};
use esp_hal::{
interrupt::{InterruptHandler, Priority},
prelude::*,
time::current_time,
time::now,
timer::{ErasedTimer, OneShotTimer},
};

Expand Down Expand Up @@ -119,7 +119,7 @@ impl EmbassyTimer {
}

fn arm(timer: &mut Timer, timestamp: u64) {
let now = current_time().duration_since_epoch();
let now = now().duration_since_epoch();
let ts = timestamp.micros();
// if the TS is already in the past make the timer fire immediately
let timeout = if ts > now { ts - now } else { 0.micros() };
Expand All @@ -130,7 +130,7 @@ impl EmbassyTimer {

impl Driver for EmbassyTimer {
fn now(&self) -> u64 {
current_time().ticks()
now().ticks()
}

unsafe fn allocate_alarm(&self) -> Option<AlarmHandle> {
Expand Down
1 change: 1 addition & 0 deletions esp-hal/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- `Delay::new()` is now a `const` function (#1999)
- You can now create an `AnyPin` out of an `ErasedPin`. (#2072)
- `Input`, `Output`, `OutputOpenDrain` and `Flex` are now type-erased by default. Use the new `new_typed` constructor to keep using the ZST pin types. (#2075)
- To avoid confusion with the `Rtc::current_time` wall clock time APIs, we've renamed `esp_hal::time::current_time` to `esp_hal::time::now`. (#2091)

### Fixed
- SHA driver can now be safely used in multiple contexts concurrently (#2049)
Expand Down
8 changes: 8 additions & 0 deletions esp-hal/MIGRATING-0.20.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,12 @@ However, if you want to, you can keep using their typed form!
```rust
let pin = Input::new(io.gpio0); // pin will have the type `Input<'some>` (or `Input<'some, ErasedPin>` if you want to be explicit about it)
let pin = Input::new_typed(io.gpio0); // pin will have the type `Input<'some, GpioPin<0>>`

## `esp_hal::time::current_time` rename

To avoid confusion with the `Rtc::current_time` wall clock time APIs, we've renamed `esp_hal::time::current_time` to `esp_hal::time::now()`.

```diff
- use esp_hal::time::current_time;
+ use esp_hal::time::now;
```
10 changes: 5 additions & 5 deletions esp-hal/src/delay.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
//! ## Overview
//!
//! The Delay driver provides blocking delay functionalities using the
//! [current_time] function.
//! [now] function.
//!
//! ## Configuration
//!
Expand Down Expand Up @@ -31,7 +31,7 @@
//! [DelayMs]: embedded_hal_02::blocking::delay::DelayMs
//! [DelayUs]: embedded_hal_02::blocking::delay::DelayUs
//! [embedded-hal]: https://docs.rs/embedded-hal/1.0.0/embedded_hal/delay/index.html
//! [current_time]: crate::time::current_time
//! [now]: crate::time::now

pub use fugit::MicrosDurationU64;

Expand Down Expand Up @@ -75,7 +75,7 @@ impl Delay {

/// Delay for the specified time
pub fn delay(&self, delay: MicrosDurationU64) {
let start = crate::time::current_time();
let start = crate::time::now();

while elapsed_since(start) < delay {}
}
Expand All @@ -101,12 +101,12 @@ impl Delay {
}

fn elapsed_since(start: fugit::Instant<u64, 1, 1_000_000>) -> MicrosDurationU64 {
let now = crate::time::current_time();
let now = crate::time::now();

if start.ticks() <= now.ticks() {
now - start
} else {
// current_time specifies at least 7 happy years, let's ignore this issue for
// now specifies at least 7 happy years, let's ignore this issue for
// now.
panic!("Time has wrapped around, which we currently don't handle");
}
Expand Down
19 changes: 18 additions & 1 deletion esp-hal/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -734,9 +734,26 @@ pub struct Config {
///
/// This function sets up the CPU clock and returns the peripherals and clocks.
pub fn init(config: Config) -> Peripherals {
let peripherals = Peripherals::take();
let mut peripherals = Peripherals::take();

Clocks::init(config.cpu_clock);

#[cfg(xtensa)]
crate::interrupt::setup_interrupts();
#[cfg(esp32)]
crate::time::time_init();

// RTC domain must be enabled before we try to disable
let mut rtc = crate::rtc_cntl::Rtc::new(&mut peripherals.LPWR);
#[cfg(not(any(esp32, esp32s2)))]
rtc.swd.disable();
rtc.rwdt.disable();

unsafe {
crate::timer::timg::Wdt::<self::peripherals::TIMG0, Blocking>::set_wdt_enabled(false);
#[cfg(timg1)]
crate::timer::timg::Wdt::<self::peripherals::TIMG1, Blocking>::set_wdt_enabled(false);
}

peripherals
}
19 changes: 1 addition & 18 deletions esp-hal/src/soc/esp32/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,7 @@

use core::ptr::addr_of_mut;

use self::peripherals::{LPWR, TIMG0, TIMG1};
use crate::{
rtc_cntl::{Rtc, SocResetReason},
timer::timg::Wdt,
};
use crate::rtc_cntl::SocResetReason;

pub mod cpu_control;
pub mod efuse;
Expand Down Expand Up @@ -111,9 +107,6 @@ pub unsafe extern "C" fn ESP32Reset() -> ! {
stack_chk_guard.write_volatile(0xdeadbabe);
}

crate::interrupt::setup_interrupts();
crate::time::time_init();

// continue with default reset handler
xtensa_lx_rt::Reset();
}
Expand All @@ -126,13 +119,3 @@ pub unsafe extern "C" fn ESP32Reset() -> ! {
pub extern "Rust" fn __init_data() -> bool {
false
}

#[export_name = "__post_init"]
unsafe fn post_init() {
// RTC domain must be enabled before we try to disable
let mut rtc = Rtc::new(LPWR::steal());
rtc.rwdt.disable();

Wdt::<TIMG0, crate::Blocking>::set_wdt_enabled(false);
Wdt::<TIMG1, crate::Blocking>::set_wdt_enabled(false);
}
13 changes: 0 additions & 13 deletions esp-hal/src/soc/esp32c2/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@
//! The `SOC` module provides access, functions and structures that are useful
//! for interacting with various system-related peripherals on `ESP32-C2` chip.

use self::peripherals::{LPWR, TIMG0};
use crate::{rtc_cntl::Rtc, timer::timg::Wdt};

pub mod efuse;
pub mod gpio;
pub mod peripherals;
Expand Down Expand Up @@ -38,13 +35,3 @@ pub(crate) mod constants {
/// RC FAST Clock value (Hertz).
pub const RC_FAST_CLK: fugit::HertzU32 = fugit::HertzU32::kHz(17500);
}

#[export_name = "__post_init"]
unsafe fn post_init() {
// RTC domain must be enabled before we try to disable
let mut rtc = Rtc::new(LPWR::steal());
rtc.swd.disable();
rtc.rwdt.disable();

Wdt::<TIMG0, crate::Blocking>::set_wdt_enabled(false);
}
14 changes: 0 additions & 14 deletions esp-hal/src/soc/esp32c3/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@
//! * I2S_SCLK: 160_000_000 - I2S clock frequency
//! * I2S_DEFAULT_CLK_SRC: 2 - I2S clock source

use self::peripherals::{LPWR, TIMG0, TIMG1};
use crate::{rtc_cntl::Rtc, timer::timg::Wdt};

pub mod efuse;
pub mod gpio;
pub mod peripherals;
Expand Down Expand Up @@ -56,14 +53,3 @@ pub(crate) mod constants {
/// RC FAST Clock value (Hertz).
pub const RC_FAST_CLK: fugit::HertzU32 = fugit::HertzU32::kHz(17500);
}

#[export_name = "__post_init"]
unsafe fn post_init() {
// RTC domain must be enabled before we try to disable
let mut rtc = Rtc::new(LPWR::steal());
rtc.swd.disable();
rtc.rwdt.disable();

Wdt::<TIMG0, crate::Blocking>::set_wdt_enabled(false);
Wdt::<TIMG1, crate::Blocking>::set_wdt_enabled(false);
}
14 changes: 0 additions & 14 deletions esp-hal/src/soc/esp32c6/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,6 @@
//! * I2S_DEFAULT_CLK_SRC: 2 - I2S clock source
//! * I2S_SCLK: 160_000_000 - I2S clock frequency

use self::peripherals::{LPWR, TIMG0, TIMG1};
use crate::{rtc_cntl::Rtc, timer::timg::Wdt};

pub mod efuse;
pub mod gpio;
pub mod lp_core;
Expand Down Expand Up @@ -64,14 +61,3 @@ pub(crate) mod constants {
/// RC FAST Clock value (Hertz).
pub const RC_FAST_CLK: fugit::HertzU32 = fugit::HertzU32::kHz(17_500);
}

#[export_name = "__post_init"]
unsafe fn post_init() {
// RTC domain must be enabled before we try to disable
let mut rtc = Rtc::new(LPWR::steal());
rtc.swd.disable();
rtc.rwdt.disable();

Wdt::<TIMG0, crate::Blocking>::set_wdt_enabled(false);
Wdt::<TIMG1, crate::Blocking>::set_wdt_enabled(false);
}
14 changes: 0 additions & 14 deletions esp-hal/src/soc/esp32h2/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,6 @@
//! * I2S_DEFAULT_CLK_SRC: 1 - I2S clock source
//! * I2S_SCLK: 96_000_000 - I2S clock frequency

use self::peripherals::{LPWR, TIMG0, TIMG1};
use crate::{rtc_cntl::Rtc, timer::timg::Wdt};

pub mod efuse;
pub mod gpio;
pub mod peripherals;
Expand Down Expand Up @@ -64,14 +61,3 @@ pub(crate) mod constants {
/// RC FAST Clock value (Hertz).
pub const RC_FAST_CLK: fugit::HertzU32 = fugit::HertzU32::kHz(17500);
}

#[export_name = "__post_init"]
unsafe fn post_init() {
// RTC domain must be enabled before we try to disable
let mut rtc = Rtc::new(LPWR::steal());
rtc.swd.disable();
rtc.rwdt.disable();

Wdt::<TIMG0, crate::Blocking>::set_wdt_enabled(false);
Wdt::<TIMG1, crate::Blocking>::set_wdt_enabled(false);
}
18 changes: 1 addition & 17 deletions esp-hal/src/soc/esp32s2/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,7 @@

use core::ptr::addr_of_mut;

use self::peripherals::{LPWR, TIMG0, TIMG1};
use crate::{
rtc_cntl::{Rtc, SocResetReason},
timer::timg::Wdt,
};
use crate::rtc_cntl::SocResetReason;

pub mod efuse;
pub mod gpio;
Expand Down Expand Up @@ -116,8 +112,6 @@ pub unsafe extern "C" fn ESP32Reset() -> ! {
stack_chk_guard.write_volatile(0xdeadbabe);
}

crate::interrupt::setup_interrupts();

// continue with default reset handler
xtensa_lx_rt::Reset();
}
Expand All @@ -130,13 +124,3 @@ pub unsafe extern "C" fn ESP32Reset() -> ! {
pub extern "Rust" fn __init_data() -> bool {
false
}

#[export_name = "__post_init"]
unsafe fn post_init() {
// RTC domain must be enabled before we try to disable
let mut rtc = Rtc::new(LPWR::steal());
rtc.rwdt.disable();

Wdt::<TIMG0, crate::Blocking>::set_wdt_enabled(false);
Wdt::<TIMG1, crate::Blocking>::set_wdt_enabled(false);
}
18 changes: 1 addition & 17 deletions esp-hal/src/soc/esp32s3/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,7 @@

use core::ptr::addr_of_mut;

use self::peripherals::{LPWR, TIMG0, TIMG1};
use crate::{
rtc_cntl::{Rtc, SocResetReason},
timer::timg::Wdt,
};
use crate::rtc_cntl::SocResetReason;

pub mod cpu_control;
pub mod efuse;
Expand Down Expand Up @@ -155,8 +151,6 @@ pub unsafe extern "C" fn ESP32Reset() -> ! {
stack_chk_guard.write_volatile(0xdeadbabe);
}

crate::interrupt::setup_interrupts();

// continue with default reset handler
xtensa_lx_rt::Reset();
}
Expand All @@ -170,16 +164,6 @@ pub extern "Rust" fn __init_data() -> bool {
false
}

#[export_name = "__post_init"]
unsafe fn post_init() {
// RTC domain must be enabled before we try to disable
let mut rtc = Rtc::new(LPWR::steal());
rtc.rwdt.disable();

Wdt::<TIMG0, crate::Blocking>::set_wdt_enabled(false);
Wdt::<TIMG1, crate::Blocking>::set_wdt_enabled(false);
}

/// Write back a specific range of data in the cache.
#[doc(hidden)]
#[link_section = ".rwtext"]
Expand Down
9 changes: 5 additions & 4 deletions esp-hal/src/time.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//! # Time
//!
//! The `time` module offers a way to get the system uptime.
//! The `time` module offers a way to get the system now.

/// Provides time since system start in microseconds precision.
///
Expand All @@ -10,7 +10,7 @@
#[cfg_attr(esp32, doc = "36_558 years")]
#[cfg_attr(esp32s2, doc = "7_311 years")]
#[cfg_attr(not(any(esp32, esp32s2)), doc = "more than 7 years")]
pub fn current_time() -> fugit::Instant<u64, 1, 1_000_000> {
pub fn now() -> fugit::Instant<u64, 1, 1_000_000> {
#[cfg(esp32)]
let (ticks, div) = {
// on ESP32 use LACT
Expand Down Expand Up @@ -50,9 +50,10 @@ pub fn current_time() -> fugit::Instant<u64, 1, 1_000_000> {

#[cfg(esp32)]
pub(crate) fn time_init() {
let apb = crate::Clocks::get().apb_clock.to_Hz();
// we assume 80MHz APB clock source - there is no way to configure it in a
// different way currently
const APB_FREQUENCY: u32 = 80_000_000u32;
assert_eq!(apb, 80_000_000u32);

let tg0 = unsafe { crate::peripherals::TIMG0::steal() };

Expand All @@ -63,7 +64,7 @@ pub(crate) fn time_init() {

// 16 MHz counter
tg0.lactconfig()
.modify(|_, w| unsafe { w.divider().bits((APB_FREQUENCY / 16_000_000u32) as u16) });
.modify(|_, w| unsafe { w.divider().bits((apb / 16_000_000u32) as u16) });
tg0.lactconfig().modify(|_, w| {
w.increase().bit(true);
w.autoreload().bit(true);
Expand Down
2 changes: 1 addition & 1 deletion esp-hal/src/timer/systimer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ impl<'d> SystemTimer<'d> {

/// Create a new instance.
pub fn new(_systimer: impl Peripheral<P = SYSTIMER> + 'd) -> Self {
// Don't reset Systimer as it will break `current_time`, only enable it
// Don't reset Systimer as it will break `time::now`, only enable it
PeripheralClockControl::enable(PeripheralEnable::Systimer);

#[cfg(soc_etm)]
Expand Down
2 changes: 1 addition & 1 deletion esp-hal/src/timer/timg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ impl TimerGroupInstance for TIMG0 {
}

fn reset_peripheral() {
// for TIMG0 do nothing for now because the reset breaks `current_time`
// for TIMG0 do nothing for now because the reset breaks `time::now`
}

#[inline(always)]
Expand Down
2 changes: 1 addition & 1 deletion esp-wifi/src/timer/riscv.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ pub fn yield_task() {
/// Current systimer count value
/// A tick is 1 / 1_000_000 seconds
pub fn get_systimer_count() -> u64 {
esp_hal::time::current_time().ticks()
esp_hal::time::now().ticks()
}

// TODO: use an Instance type instead...
Expand Down
Loading

0 comments on commit 70126c8

Please sign in to comment.