aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xci.sh40
-rw-r--r--embassy-nrf/Cargo.toml3
-rw-r--r--embassy-nrf/src/time_driver.rs4
-rw-r--r--embassy-rp/Cargo.toml5
-rw-r--r--embassy-rp/src/lib.rs4
-rw-r--r--embassy-rp/src/time_driver.rs (renamed from embassy-rp/src/timer.rs)4
-rw-r--r--embassy-stm32/Cargo.toml5
-rw-r--r--embassy-stm32/src/time_driver.rs5
-rw-r--r--embassy-time-driver/CHANGELOG.md51
-rw-r--r--embassy-time-driver/Cargo.toml391
-rw-r--r--embassy-time-driver/README.md20
-rw-r--r--embassy-time-driver/build.rs (renamed from embassy-time/build.rs)0
-rw-r--r--embassy-time-driver/gen_tick.py (renamed from embassy-time/gen_tick.py)32
-rw-r--r--embassy-time-driver/src/lib.rs (renamed from embassy-time/src/driver.rs)28
-rw-r--r--embassy-time-driver/src/tick.rs (renamed from embassy-time/src/tick.rs)0
-rw-r--r--embassy-time/Cargo.toml326
-rw-r--r--embassy-time/README.md4
-rw-r--r--embassy-time/src/driver_mock.rs2
-rw-r--r--embassy-time/src/driver_std.rs2
-rw-r--r--embassy-time/src/driver_wasm.rs2
-rw-r--r--embassy-time/src/lib.rs10
21 files changed, 711 insertions, 227 deletions
diff --git a/ci.sh b/ci.sh
index 9c6f58f9f..ac0457679 100755
--- a/ci.sh
+++ b/ci.sh
@@ -47,24 +47,30 @@ cargo batch \
47 --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,proto-ipv6,medium-ip \ 47 --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,proto-ipv6,medium-ip \
48 --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,proto-ipv6,medium-ip,medium-ethernet \ 48 --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,proto-ipv6,medium-ip,medium-ethernet \
49 --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,proto-ipv6,medium-ip,medium-ethernet,medium-ieee802154 \ 49 --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,proto-ipv6,medium-ip,medium-ethernet,medium-ieee802154 \
50 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52805,gpiote,time-driver-rtc1 \ 50 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52805,gpiote,time,time-driver-rtc1 \
51 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52810,gpiote,time-driver-rtc1 \ 51 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52810,gpiote,time,time-driver-rtc1 \
52 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52811,gpiote,time-driver-rtc1 \ 52 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52811,gpiote,time,time-driver-rtc1 \
53 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52820,gpiote,time-driver-rtc1 \ 53 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52820,gpiote,time,time-driver-rtc1 \
54 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52832,gpiote,time-driver-rtc1,reset-pin-as-gpio \ 54 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52832,gpiote,time,time-driver-rtc1,reset-pin-as-gpio \
55 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52833,gpiote,time-driver-rtc1,nfc-pins-as-gpio \ 55 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52833,gpiote,time,time-driver-rtc1,nfc-pins-as-gpio \
56 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf9160-s,gpiote,time-driver-rtc1 \ 56 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf9160-s,gpiote,time,time-driver-rtc1 \
57 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf9160-ns,gpiote,time-driver-rtc1 \ 57 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf9160-ns,gpiote,time,time-driver-rtc1 \
58 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-app-s,gpiote,time-driver-rtc1 \ 58 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-app-s,gpiote,time,time-driver-rtc1 \
59 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-app-ns,gpiote,time-driver-rtc1 \ 59 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-app-ns,gpiote,time,time-driver-rtc1 \
60 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-net,gpiote,time-driver-rtc1 \ 60 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-net,gpiote,time,time-driver-rtc1 \
61 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,gpiote,time \
61 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,gpiote,time-driver-rtc1 \ 62 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,gpiote,time-driver-rtc1 \
62 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,log,gpiote,time-driver-rtc1 \ 63 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,gpiote,time,time-driver-rtc1 \
63 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,defmt,gpiote,time-driver-rtc1 \ 64 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,gpiote,log,time \
64 --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features defmt \ 65 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,gpiote,log,time-driver-rtc1 \
65 --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features log \ 66 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,gpiote,log,time,time-driver-rtc1 \
66 --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features intrinsics \ 67 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,gpiote,defmt,time \
67 --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features qspi-as-gpio \ 68 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,gpiote,defmt,time-driver-rtc1 \
69 --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,gpiote,defmt,time,time-driver-rtc1 \
70 --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features time-driver,defmt \
71 --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features time-driver,log \
72 --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features time-driver,intrinsics \
73 --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features time-driver,qspi-as-gpio \
68 --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time-driver-any,time \ 74 --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time-driver-any,time \
69 --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,time-driver-any,time \ 75 --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,time-driver-any,time \
70 --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time \ 76 --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time \
diff --git a/embassy-nrf/Cargo.toml b/embassy-nrf/Cargo.toml
index 7d7346d92..f62059eb1 100644
--- a/embassy-nrf/Cargo.toml
+++ b/embassy-nrf/Cargo.toml
@@ -96,7 +96,7 @@ _nrf5340 = ["_gpio-p1", "_dppi"]
96_nrf9160 = ["nrf9160-pac", "_dppi"] 96_nrf9160 = ["nrf9160-pac", "_dppi"]
97_nrf52 = ["_ppi"] 97_nrf52 = ["_ppi"]
98 98
99_time-driver = ["dep:embassy-time", "embassy-time?/tick-hz-32_768"] 99_time-driver = ["dep:embassy-time-driver", "embassy-time-driver?/tick-hz-32_768"]
100 100
101# trustzone state. 101# trustzone state.
102_s = [] 102_s = []
@@ -110,6 +110,7 @@ _gpio-p1 = []
110_nrf52832_anomaly_109 = [] 110_nrf52832_anomaly_109 = []
111 111
112[dependencies] 112[dependencies]
113embassy-time-driver = { version = "0.1", path = "../embassy-time-driver", optional = true }
113embassy-time = { version = "0.2", path = "../embassy-time", optional = true } 114embassy-time = { version = "0.2", path = "../embassy-time", optional = true }
114embassy-sync = { version = "0.5.0", path = "../embassy-sync" } 115embassy-sync = { version = "0.5.0", path = "../embassy-sync" }
115embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-3"] } 116embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-3"] }
diff --git a/embassy-nrf/src/time_driver.rs b/embassy-nrf/src/time_driver.rs
index f1ab4f8fd..042f7c5f7 100644
--- a/embassy-nrf/src/time_driver.rs
+++ b/embassy-nrf/src/time_driver.rs
@@ -5,7 +5,7 @@ use core::{mem, ptr};
5use critical_section::CriticalSection; 5use critical_section::CriticalSection;
6use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; 6use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
7use embassy_sync::blocking_mutex::CriticalSectionMutex as Mutex; 7use embassy_sync::blocking_mutex::CriticalSectionMutex as Mutex;
8use embassy_time::driver::{AlarmHandle, Driver}; 8use embassy_time_driver::{AlarmHandle, Driver};
9 9
10use crate::interrupt::InterruptExt; 10use crate::interrupt::InterruptExt;
11use crate::{interrupt, pac}; 11use crate::{interrupt, pac};
@@ -119,7 +119,7 @@ struct RtcDriver {
119} 119}
120 120
121const ALARM_STATE_NEW: AlarmState = AlarmState::new(); 121const ALARM_STATE_NEW: AlarmState = AlarmState::new();
122embassy_time::time_driver_impl!(static DRIVER: RtcDriver = RtcDriver { 122embassy_time_driver::time_driver_impl!(static DRIVER: RtcDriver = RtcDriver {
123 period: AtomicU32::new(0), 123 period: AtomicU32::new(0),
124 alarm_count: AtomicU8::new(0), 124 alarm_count: AtomicU8::new(0),
125 alarms: Mutex::const_new(CriticalSectionRawMutex::new(), [ALARM_STATE_NEW; ALARM_COUNT]), 125 alarms: Mutex::const_new(CriticalSectionRawMutex::new(), [ALARM_STATE_NEW; ALARM_COUNT]),
diff --git a/embassy-rp/Cargo.toml b/embassy-rp/Cargo.toml
index 8d7a11749..b324eab82 100644
--- a/embassy-rp/Cargo.toml
+++ b/embassy-rp/Cargo.toml
@@ -30,7 +30,7 @@ critical-section-impl = ["critical-section/restore-state-u8"]
30unstable-pac = [] 30unstable-pac = []
31 31
32## Enable the timer for use with `embassy-time` with a 1MHz tick rate 32## Enable the timer for use with `embassy-time` with a 1MHz tick rate
33time-driver = [] 33time-driver = ["dep:embassy-time-driver", "embassy-time-driver?/tick-hz-1_000_000"]
34 34
35## Enable ROM function cache 35## Enable ROM function cache
36rom-func-cache = [] 36rom-func-cache = []
@@ -67,7 +67,8 @@ boot2-w25x10cl = []
67 67
68[dependencies] 68[dependencies]
69embassy-sync = { version = "0.5.0", path = "../embassy-sync" } 69embassy-sync = { version = "0.5.0", path = "../embassy-sync" }
70embassy-time = { version = "0.2", path = "../embassy-time", features = [ "tick-hz-1_000_000" ] } 70embassy-time-driver = { version = "0.1", path = "../embassy-time-driver", optional = true }
71embassy-time = { version = "0.2", path = "../embassy-time" }
71embassy-futures = { version = "0.1.0", path = "../embassy-futures" } 72embassy-futures = { version = "0.1.0", path = "../embassy-futures" }
72embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-2"] } 73embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-2"] }
73embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" } 74embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" }
diff --git a/embassy-rp/src/lib.rs b/embassy-rp/src/lib.rs
index 0a3714777..46973fdc8 100644
--- a/embassy-rp/src/lib.rs
+++ b/embassy-rp/src/lib.rs
@@ -30,7 +30,7 @@ pub mod rom_data;
30pub mod rtc; 30pub mod rtc;
31pub mod spi; 31pub mod spi;
32#[cfg(feature = "time-driver")] 32#[cfg(feature = "time-driver")]
33pub mod timer; 33pub mod time_driver;
34pub mod uart; 34pub mod uart;
35pub mod usb; 35pub mod usb;
36pub mod watchdog; 36pub mod watchdog;
@@ -344,7 +344,7 @@ pub fn init(config: config::Config) -> Peripherals {
344 unsafe { 344 unsafe {
345 clocks::init(config.clocks); 345 clocks::init(config.clocks);
346 #[cfg(feature = "time-driver")] 346 #[cfg(feature = "time-driver")]
347 timer::init(); 347 time_driver::init();
348 dma::init(); 348 dma::init();
349 gpio::init(); 349 gpio::init();
350 } 350 }
diff --git a/embassy-rp/src/timer.rs b/embassy-rp/src/time_driver.rs
index 69c0c85b1..bab1044cb 100644
--- a/embassy-rp/src/timer.rs
+++ b/embassy-rp/src/time_driver.rs
@@ -5,7 +5,7 @@ use atomic_polyfill::{AtomicU8, Ordering};
5use critical_section::CriticalSection; 5use critical_section::CriticalSection;
6use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; 6use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
7use embassy_sync::blocking_mutex::Mutex; 7use embassy_sync::blocking_mutex::Mutex;
8use embassy_time::driver::{AlarmHandle, Driver}; 8use embassy_time_driver::{AlarmHandle, Driver};
9 9
10use crate::interrupt::InterruptExt; 10use crate::interrupt::InterruptExt;
11use crate::{interrupt, pac}; 11use crate::{interrupt, pac};
@@ -27,7 +27,7 @@ struct TimerDriver {
27 next_alarm: AtomicU8, 27 next_alarm: AtomicU8,
28} 28}
29 29
30embassy_time::time_driver_impl!(static DRIVER: TimerDriver = TimerDriver{ 30embassy_time_driver::time_driver_impl!(static DRIVER: TimerDriver = TimerDriver{
31 alarms: Mutex::const_new(CriticalSectionRawMutex::new(), [DUMMY_ALARM; ALARM_COUNT]), 31 alarms: Mutex::const_new(CriticalSectionRawMutex::new(), [DUMMY_ALARM; ALARM_COUNT]),
32 next_alarm: AtomicU8::new(0), 32 next_alarm: AtomicU8::new(0),
33}); 33});
diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml
index a798a8c5f..60fc86135 100644
--- a/embassy-stm32/Cargo.toml
+++ b/embassy-stm32/Cargo.toml
@@ -34,6 +34,7 @@ flavors = [
34[dependencies] 34[dependencies]
35embassy-sync = { version = "0.5.0", path = "../embassy-sync" } 35embassy-sync = { version = "0.5.0", path = "../embassy-sync" }
36embassy-time = { version = "0.2", path = "../embassy-time", optional = true } 36embassy-time = { version = "0.2", path = "../embassy-time", optional = true }
37embassy-time-driver = { version = "0.1", path = "../embassy-time-driver", optional = true }
37embassy-futures = { version = "0.1.0", path = "../embassy-futures" } 38embassy-futures = { version = "0.1.0", path = "../embassy-futures" }
38embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-4"] } 39embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-4"] }
39embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" } 40embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" }
@@ -88,7 +89,7 @@ rt = ["stm32-metapac/rt"]
88defmt = ["dep:defmt", "bxcan/unstable-defmt", "embassy-sync/defmt", "embassy-embedded-hal/defmt", "embassy-hal-internal/defmt", "embedded-io-async/defmt-03", "embassy-usb-driver/defmt", "embassy-net-driver/defmt", "embassy-time?/defmt"] 89defmt = ["dep:defmt", "bxcan/unstable-defmt", "embassy-sync/defmt", "embassy-embedded-hal/defmt", "embassy-hal-internal/defmt", "embedded-io-async/defmt-03", "embassy-usb-driver/defmt", "embassy-net-driver/defmt", "embassy-time?/defmt"]
89 90
90exti = [] 91exti = []
91low-power = [ "dep:embassy-executor", "embassy-executor?/arch-cortex-m" ] 92low-power = [ "dep:embassy-executor", "embassy-executor?/arch-cortex-m", "time" ]
92low-power-debug-with-sleep = [] 93low-power-debug-with-sleep = []
93 94
94## Automatically generate `memory.x` file using [`stm32-metapac`](https://docs.rs/stm32-metapac/) 95## Automatically generate `memory.x` file using [`stm32-metapac`](https://docs.rs/stm32-metapac/)
@@ -107,7 +108,7 @@ time = ["dep:embassy-time"]
107 108
108# Features starting with `_` are for internal use only. They're not intended 109# Features starting with `_` are for internal use only. They're not intended
109# to be enabled by other crates, and are not covered by semver guarantees. 110# to be enabled by other crates, and are not covered by semver guarantees.
110_time-driver = ["time"] 111_time-driver = ["dep:embassy-time-driver", "time"]
111 112
112## Use any time driver 113## Use any time driver
113time-driver-any = ["_time-driver"] 114time-driver-any = ["_time-driver"]
diff --git a/embassy-stm32/src/time_driver.rs b/embassy-stm32/src/time_driver.rs
index 9981800b2..0dbadce0c 100644
--- a/embassy-stm32/src/time_driver.rs
+++ b/embassy-stm32/src/time_driver.rs
@@ -6,8 +6,7 @@ use core::{mem, ptr};
6use critical_section::CriticalSection; 6use critical_section::CriticalSection;
7use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; 7use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
8use embassy_sync::blocking_mutex::Mutex; 8use embassy_sync::blocking_mutex::Mutex;
9use embassy_time::driver::{AlarmHandle, Driver}; 9use embassy_time_driver::{AlarmHandle, Driver, TICK_HZ};
10use embassy_time::TICK_HZ;
11use stm32_metapac::timer::regs; 10use stm32_metapac::timer::regs;
12 11
13use crate::interrupt::typelevel::Interrupt; 12use crate::interrupt::typelevel::Interrupt;
@@ -173,7 +172,7 @@ pub(crate) struct RtcDriver {
173 172
174const ALARM_STATE_NEW: AlarmState = AlarmState::new(); 173const ALARM_STATE_NEW: AlarmState = AlarmState::new();
175 174
176embassy_time::time_driver_impl!(static DRIVER: RtcDriver = RtcDriver { 175embassy_time_driver::time_driver_impl!(static DRIVER: RtcDriver = RtcDriver {
177 period: AtomicU32::new(0), 176 period: AtomicU32::new(0),
178 alarm_count: AtomicU8::new(0), 177 alarm_count: AtomicU8::new(0),
179 alarms: Mutex::const_new(CriticalSectionRawMutex::new(), [ALARM_STATE_NEW; ALARM_COUNT]), 178 alarms: Mutex::const_new(CriticalSectionRawMutex::new(), [ALARM_STATE_NEW; ALARM_COUNT]),
diff --git a/embassy-time-driver/CHANGELOG.md b/embassy-time-driver/CHANGELOG.md
new file mode 100644
index 000000000..d8c0c7d08
--- /dev/null
+++ b/embassy-time-driver/CHANGELOG.md
@@ -0,0 +1,51 @@
1# Changelog
2
3All notable changes to this project will be documented in this file.
4
5The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
8## 0.2.0 - 2023-12-04
9
10- Added tick rates in multiples of 10 kHz
11- Remove nightly and unstable-traits features in preparation for 1.75.
12- Update heapless to 0.8.
13
14## 0.1.5 - 2023-10-16
15
16- Added `links` key to Cargo.toml, to prevent multiple copies of this crate in the same binary.
17 Needed because different copies might get different tick rates, causing
18 wrong delays if the time driver is using one copy and user code is using another.
19 This is especially common when mixing crates from crates.io and git.
20
21## 0.1.4 - 2023-10-12
22
23- Added more tick rates
24
25## 0.1.3 - 2023-08-28
26
27- Update `embedded-hal-async` to `1.0.0-rc.2`
28- Update `embedded-hal v1` to `1.0.0-rc.2`
29
30## 0.1.2 - 2023-07-05
31
32- Update `embedded-hal-async` to `0.2.0-alpha.2`.
33- Update `embedded-hal v1` to `1.0.0-alpha.11`. (Note: v0.2 support is kept unchanged).
34
35## 0.1.1 - 2023-04-13
36
37- Update `embedded-hal-async` to `0.2.0-alpha.1` (uses `async fn` in traits).
38- Update `embedded-hal v1` to `1.0.0-alpha.10`. (Note: v0.2 support is kept unchanged).
39- Remove dep on `embassy-sync`.
40- Fix reentrancy issues in the `std` time driver (#1177)
41- Add `Duration::from_hz()`.
42- impl `From` conversions to/from `core::time::Duration`.
43- Add `#[must_use]` to all futures.
44- Add inherent `async fn tick()` to `Ticker`, so you can use it directly without the `Stream` trait.
45- Add more tick rates.
46- impl `Default` for `Signal`
47- Remove unnecessary uses of `atomic-polyfill`
48
49## 0.1.0 - 2022-08-26
50
51- First release
diff --git a/embassy-time-driver/Cargo.toml b/embassy-time-driver/Cargo.toml
new file mode 100644
index 000000000..2ed250d4d
--- /dev/null
+++ b/embassy-time-driver/Cargo.toml
@@ -0,0 +1,391 @@
1[package]
2name = "embassy-time-driver"
3version = "0.1.0"
4edition = "2021"
5description = "Driver trait for embassy-time"
6repository = "https://github.com/embassy-rs/embassy"
7readme = "README.md"
8license = "MIT OR Apache-2.0"
9categories = [
10 "embedded",
11 "no-std",
12 "concurrency",
13 "asynchronous",
14]
15
16# Prevent multiple copies of this crate in the same binary.
17# Needed because different copies might get different tick rates, causing
18# wrong delays if the time driver is using one copy and user code is using another.
19# This is especially common when mixing crates from crates.io and git.
20links = "embassy-time"
21
22[package.metadata.embassy_docs]
23src_base = "https://github.com/embassy-rs/embassy/blob/embassy-time-driver-v$VERSION/embassy-time-driver/src/"
24src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-time-driver/src/"
25target = "x86_64-unknown-linux-gnu"
26
27[features]
28#! ### Tick Rate
29#!
30#! At most 1 `tick-*` feature can be enabled. If none is enabled, a default of 1MHz is used.
31#!
32#! If the time driver in use supports using arbitrary tick rates, you can enable one `tick-*`
33#! feature from your binary crate to set the tick rate. The driver will use configured tick rate.
34#! If the time driver supports a fixed tick rate, it will enable one feature itself, so you should
35#! not enable one. Check the time driver documentation for details.
36#!
37#! When using embassy-time from libraries, you should *not* enable any `tick-*` feature, to allow the
38#! end user or the driver to pick.
39#! <details>
40#! <summary>Available tick rates:</summary>
41#! <!-- Next line must be left empty for the features to render correctly! -->
42#!
43
44# BEGIN TICKS
45# Generated by gen_tick.py. DO NOT EDIT.
46## 1Hz Tick Rate
47tick-hz-1 = []
48## 2Hz Tick Rate
49tick-hz-2 = []
50## 4Hz Tick Rate
51tick-hz-4 = []
52## 8Hz Tick Rate
53tick-hz-8 = []
54## 10Hz Tick Rate
55tick-hz-10 = []
56## 16Hz Tick Rate
57tick-hz-16 = []
58## 32Hz Tick Rate
59tick-hz-32 = []
60## 64Hz Tick Rate
61tick-hz-64 = []
62## 100Hz Tick Rate
63tick-hz-100 = []
64## 128Hz Tick Rate
65tick-hz-128 = []
66## 256Hz Tick Rate
67tick-hz-256 = []
68## 512Hz Tick Rate
69tick-hz-512 = []
70## 1.0kHz Tick Rate
71tick-hz-1_000 = []
72## 1.024kHz Tick Rate
73tick-hz-1_024 = []
74## 2.0kHz Tick Rate
75tick-hz-2_000 = []
76## 2.048kHz Tick Rate
77tick-hz-2_048 = []
78## 4.0kHz Tick Rate
79tick-hz-4_000 = []
80## 4.096kHz Tick Rate
81tick-hz-4_096 = []
82## 8.0kHz Tick Rate
83tick-hz-8_000 = []
84## 8.192kHz Tick Rate
85tick-hz-8_192 = []
86## 10.0kHz Tick Rate
87tick-hz-10_000 = []
88## 16.0kHz Tick Rate
89tick-hz-16_000 = []
90## 16.384kHz Tick Rate
91tick-hz-16_384 = []
92## 20.0kHz Tick Rate
93tick-hz-20_000 = []
94## 32.0kHz Tick Rate
95tick-hz-32_000 = []
96## 32.768kHz Tick Rate
97tick-hz-32_768 = []
98## 40.0kHz Tick Rate
99tick-hz-40_000 = []
100## 64.0kHz Tick Rate
101tick-hz-64_000 = []
102## 65.536kHz Tick Rate
103tick-hz-65_536 = []
104## 80.0kHz Tick Rate
105tick-hz-80_000 = []
106## 100.0kHz Tick Rate
107tick-hz-100_000 = []
108## 128.0kHz Tick Rate
109tick-hz-128_000 = []
110## 131.072kHz Tick Rate
111tick-hz-131_072 = []
112## 160.0kHz Tick Rate
113tick-hz-160_000 = []
114## 256.0kHz Tick Rate
115tick-hz-256_000 = []
116## 262.144kHz Tick Rate
117tick-hz-262_144 = []
118## 320.0kHz Tick Rate
119tick-hz-320_000 = []
120## 512.0kHz Tick Rate
121tick-hz-512_000 = []
122## 524.288kHz Tick Rate
123tick-hz-524_288 = []
124## 640.0kHz Tick Rate
125tick-hz-640_000 = []
126## 1.0MHz Tick Rate
127tick-hz-1_000_000 = []
128## 1.024MHz Tick Rate
129tick-hz-1_024_000 = []
130## 1.048576MHz Tick Rate
131tick-hz-1_048_576 = []
132## 1.28MHz Tick Rate
133tick-hz-1_280_000 = []
134## 2.0MHz Tick Rate
135tick-hz-2_000_000 = []
136## 2.048MHz Tick Rate
137tick-hz-2_048_000 = []
138## 2.097152MHz Tick Rate
139tick-hz-2_097_152 = []
140## 2.56MHz Tick Rate
141tick-hz-2_560_000 = []
142## 3.0MHz Tick Rate
143tick-hz-3_000_000 = []
144## 4.0MHz Tick Rate
145tick-hz-4_000_000 = []
146## 4.096MHz Tick Rate
147tick-hz-4_096_000 = []
148## 4.194304MHz Tick Rate
149tick-hz-4_194_304 = []
150## 5.12MHz Tick Rate
151tick-hz-5_120_000 = []
152## 6.0MHz Tick Rate
153tick-hz-6_000_000 = []
154## 8.0MHz Tick Rate
155tick-hz-8_000_000 = []
156## 8.192MHz Tick Rate
157tick-hz-8_192_000 = []
158## 8.388608MHz Tick Rate
159tick-hz-8_388_608 = []
160## 9.0MHz Tick Rate
161tick-hz-9_000_000 = []
162## 10.0MHz Tick Rate
163tick-hz-10_000_000 = []
164## 10.24MHz Tick Rate
165tick-hz-10_240_000 = []
166## 12.0MHz Tick Rate
167tick-hz-12_000_000 = []
168## 16.0MHz Tick Rate
169tick-hz-16_000_000 = []
170## 16.384MHz Tick Rate
171tick-hz-16_384_000 = []
172## 16.777216MHz Tick Rate
173tick-hz-16_777_216 = []
174## 18.0MHz Tick Rate
175tick-hz-18_000_000 = []
176## 20.0MHz Tick Rate
177tick-hz-20_000_000 = []
178## 20.48MHz Tick Rate
179tick-hz-20_480_000 = []
180## 24.0MHz Tick Rate
181tick-hz-24_000_000 = []
182## 30.0MHz Tick Rate
183tick-hz-30_000_000 = []
184## 32.0MHz Tick Rate
185tick-hz-32_000_000 = []
186## 32.768MHz Tick Rate
187tick-hz-32_768_000 = []
188## 36.0MHz Tick Rate
189tick-hz-36_000_000 = []
190## 40.0MHz Tick Rate
191tick-hz-40_000_000 = []
192## 40.96MHz Tick Rate
193tick-hz-40_960_000 = []
194## 48.0MHz Tick Rate
195tick-hz-48_000_000 = []
196## 50.0MHz Tick Rate
197tick-hz-50_000_000 = []
198## 60.0MHz Tick Rate
199tick-hz-60_000_000 = []
200## 64.0MHz Tick Rate
201tick-hz-64_000_000 = []
202## 65.536MHz Tick Rate
203tick-hz-65_536_000 = []
204## 70.0MHz Tick Rate
205tick-hz-70_000_000 = []
206## 72.0MHz Tick Rate
207tick-hz-72_000_000 = []
208## 80.0MHz Tick Rate
209tick-hz-80_000_000 = []
210## 81.92MHz Tick Rate
211tick-hz-81_920_000 = []
212## 90.0MHz Tick Rate
213tick-hz-90_000_000 = []
214## 96.0MHz Tick Rate
215tick-hz-96_000_000 = []
216## 100.0MHz Tick Rate
217tick-hz-100_000_000 = []
218## 110.0MHz Tick Rate
219tick-hz-110_000_000 = []
220## 120.0MHz Tick Rate
221tick-hz-120_000_000 = []
222## 128.0MHz Tick Rate
223tick-hz-128_000_000 = []
224## 130.0MHz Tick Rate
225tick-hz-130_000_000 = []
226## 131.072MHz Tick Rate
227tick-hz-131_072_000 = []
228## 140.0MHz Tick Rate
229tick-hz-140_000_000 = []
230## 144.0MHz Tick Rate
231tick-hz-144_000_000 = []
232## 150.0MHz Tick Rate
233tick-hz-150_000_000 = []
234## 160.0MHz Tick Rate
235tick-hz-160_000_000 = []
236## 163.84MHz Tick Rate
237tick-hz-163_840_000 = []
238## 170.0MHz Tick Rate
239tick-hz-170_000_000 = []
240## 180.0MHz Tick Rate
241tick-hz-180_000_000 = []
242## 190.0MHz Tick Rate
243tick-hz-190_000_000 = []
244## 192.0MHz Tick Rate
245tick-hz-192_000_000 = []
246## 200.0MHz Tick Rate
247tick-hz-200_000_000 = []
248## 210.0MHz Tick Rate
249tick-hz-210_000_000 = []
250## 220.0MHz Tick Rate
251tick-hz-220_000_000 = []
252## 230.0MHz Tick Rate
253tick-hz-230_000_000 = []
254## 240.0MHz Tick Rate
255tick-hz-240_000_000 = []
256## 250.0MHz Tick Rate
257tick-hz-250_000_000 = []
258## 256.0MHz Tick Rate
259tick-hz-256_000_000 = []
260## 260.0MHz Tick Rate
261tick-hz-260_000_000 = []
262## 262.144MHz Tick Rate
263tick-hz-262_144_000 = []
264## 270.0MHz Tick Rate
265tick-hz-270_000_000 = []
266## 280.0MHz Tick Rate
267tick-hz-280_000_000 = []
268## 288.0MHz Tick Rate
269tick-hz-288_000_000 = []
270## 290.0MHz Tick Rate
271tick-hz-290_000_000 = []
272## 300.0MHz Tick Rate
273tick-hz-300_000_000 = []
274## 320.0MHz Tick Rate
275tick-hz-320_000_000 = []
276## 327.68MHz Tick Rate
277tick-hz-327_680_000 = []
278## 340.0MHz Tick Rate
279tick-hz-340_000_000 = []
280## 360.0MHz Tick Rate
281tick-hz-360_000_000 = []
282## 380.0MHz Tick Rate
283tick-hz-380_000_000 = []
284## 384.0MHz Tick Rate
285tick-hz-384_000_000 = []
286## 400.0MHz Tick Rate
287tick-hz-400_000_000 = []
288## 420.0MHz Tick Rate
289tick-hz-420_000_000 = []
290## 440.0MHz Tick Rate
291tick-hz-440_000_000 = []
292## 460.0MHz Tick Rate
293tick-hz-460_000_000 = []
294## 480.0MHz Tick Rate
295tick-hz-480_000_000 = []
296## 500.0MHz Tick Rate
297tick-hz-500_000_000 = []
298## 512.0MHz Tick Rate
299tick-hz-512_000_000 = []
300## 520.0MHz Tick Rate
301tick-hz-520_000_000 = []
302## 524.288MHz Tick Rate
303tick-hz-524_288_000 = []
304## 540.0MHz Tick Rate
305tick-hz-540_000_000 = []
306## 560.0MHz Tick Rate
307tick-hz-560_000_000 = []
308## 576.0MHz Tick Rate
309tick-hz-576_000_000 = []
310## 580.0MHz Tick Rate
311tick-hz-580_000_000 = []
312## 600.0MHz Tick Rate
313tick-hz-600_000_000 = []
314## 620.0MHz Tick Rate
315tick-hz-620_000_000 = []
316## 640.0MHz Tick Rate
317tick-hz-640_000_000 = []
318## 655.36MHz Tick Rate
319tick-hz-655_360_000 = []
320## 660.0MHz Tick Rate
321tick-hz-660_000_000 = []
322## 680.0MHz Tick Rate
323tick-hz-680_000_000 = []
324## 700.0MHz Tick Rate
325tick-hz-700_000_000 = []
326## 720.0MHz Tick Rate
327tick-hz-720_000_000 = []
328## 740.0MHz Tick Rate
329tick-hz-740_000_000 = []
330## 760.0MHz Tick Rate
331tick-hz-760_000_000 = []
332## 768.0MHz Tick Rate
333tick-hz-768_000_000 = []
334## 780.0MHz Tick Rate
335tick-hz-780_000_000 = []
336## 800.0MHz Tick Rate
337tick-hz-800_000_000 = []
338## 820.0MHz Tick Rate
339tick-hz-820_000_000 = []
340## 840.0MHz Tick Rate
341tick-hz-840_000_000 = []
342## 860.0MHz Tick Rate
343tick-hz-860_000_000 = []
344## 880.0MHz Tick Rate
345tick-hz-880_000_000 = []
346## 900.0MHz Tick Rate
347tick-hz-900_000_000 = []
348## 920.0MHz Tick Rate
349tick-hz-920_000_000 = []
350## 940.0MHz Tick Rate
351tick-hz-940_000_000 = []
352## 960.0MHz Tick Rate
353tick-hz-960_000_000 = []
354## 980.0MHz Tick Rate
355tick-hz-980_000_000 = []
356## 1.0GHz Tick Rate
357tick-hz-1_000_000_000 = []
358## 1.31072GHz Tick Rate
359tick-hz-1_310_720_000 = []
360## 2.62144GHz Tick Rate
361tick-hz-2_621_440_000 = []
362## 5.24288GHz Tick Rate
363tick-hz-5_242_880_000 = []
364# END TICKS
365
366#! </details>
367
368[dependencies]
369defmt = { version = "0.3", optional = true }
370log = { version = "0.4.14", optional = true }
371
372embedded-hal-02 = { package = "embedded-hal", version = "0.2.6" }
373embedded-hal-1 = { package = "embedded-hal", version = "1.0" }
374embedded-hal-async = { version = "1.0" }
375
376futures-util = { version = "0.3.17", default-features = false }
377critical-section = "1.1"
378cfg-if = "1.0.0"
379heapless = "0.8"
380
381document-features = "0.2.7"
382
383# WASM dependencies
384wasm-bindgen = { version = "0.2.81", optional = true }
385js-sys = { version = "0.3", optional = true }
386wasm-timer = { version = "0.2.5", optional = true }
387
388[dev-dependencies]
389serial_test = "0.9"
390critical-section = { version = "1.1", features = ["std"] }
391embassy-executor = { version = "0.4.0", path = "../embassy-executor" }
diff --git a/embassy-time-driver/README.md b/embassy-time-driver/README.md
new file mode 100644
index 000000000..74a5b7876
--- /dev/null
+++ b/embassy-time-driver/README.md
@@ -0,0 +1,20 @@
1# embassy-time-driver
2
3
4This crate contains the driver trait necessary for adding [`embassy-time`](https://crates.io/crates/embassy-time) support
5for a new hardware platform.
6
7If you want to *use* `embassy-time` with already made drivers, you should depend on the main `embassy-time` crate, not on this crate.
8
9If you are writing a driver, you should depend only on this crate, not on the main `embassy-time` crate.
10This will allow your driver to continue working for newer `embassy-time` major versions, without needing an update,
11if the driver trait has not had breaking changes.
12
13## How it works
14
15`embassy-time` module is backed by a global "time driver" specified at build time.
16Only one driver can be active in a program.
17
18All methods and structs transparently call into the active driver. This makes it
19possible for libraries to use `embassy-time` in a driver-agnostic way without
20requiring generic parameters.
diff --git a/embassy-time/build.rs b/embassy-time-driver/build.rs
index f328e4d9d..f328e4d9d 100644
--- a/embassy-time/build.rs
+++ b/embassy-time-driver/build.rs
diff --git a/embassy-time/gen_tick.py b/embassy-time-driver/gen_tick.py
index 8961fb7e6..af194c31f 100644
--- a/embassy-time/gen_tick.py
+++ b/embassy-time-driver/gen_tick.py
@@ -28,18 +28,14 @@ ticks = sorted([x for x in ticks if not (x in seen or seen.add(x))])
28 28
29# ========= Update Cargo.toml 29# ========= Update Cargo.toml
30 30
31things = [(hz, f'tick-hz-{hz:_}') for hz in ticks]
32
33SEPARATOR_START = '# BEGIN TICKS\n' 31SEPARATOR_START = '# BEGIN TICKS\n'
34SEPARATOR_END = '# END TICKS\n' 32SEPARATOR_END = '# END TICKS\n'
35HELP = '# Generated by gen_tick.py. DO NOT EDIT.\n' 33HELP = '# Generated by gen_tick.py. DO NOT EDIT.\n'
36with open('Cargo.toml', 'r') as f:
37 data = f.read()
38before, data = data.split(SEPARATOR_START, maxsplit=1)
39_, after = data.split(SEPARATOR_END, maxsplit=1)
40 34
41data = before + SEPARATOR_START + HELP 35feats_time = ''
42for freq, feature in things: 36feats_driver = ''
37for freq in ticks:
38 feature = f'tick-hz-{freq:_}'
43 if freq >= 1_000_000_000: 39 if freq >= 1_000_000_000:
44 freq_human = f"{freq / 1_000_000_000}GHz" 40 freq_human = f"{freq / 1_000_000_000}GHz"
45 elif freq >= 1_000_000: 41 elif freq >= 1_000_000:
@@ -49,12 +45,24 @@ for freq, feature in things:
49 else: 45 else:
50 freq_human = f"{freq}Hz" 46 freq_human = f"{freq}Hz"
51 47
52 data += f"## {freq_human} Tick Rate\n" 48 feats_time += f"## {freq_human} Tick Rate\n"
53 data += f"{feature} = []\n" 49 feats_time += f"{feature} = [\"embassy-time-driver/{feature}\"]\n"
54data += SEPARATOR_END + after 50 feats_driver += f"## {freq_human} Tick Rate\n"
51 feats_driver += f"{feature} = []\n"
55 52
53with open('Cargo.toml', 'r') as f:
54 data = f.read()
55before, data = data.split(SEPARATOR_START, maxsplit=1)
56_, after = data.split(SEPARATOR_END, maxsplit=1)
56with open('Cargo.toml', 'w') as f: 57with open('Cargo.toml', 'w') as f:
57 f.write(data) 58 f.write(before + SEPARATOR_START + HELP + feats_driver + SEPARATOR_END + after)
59
60with open('../embassy-time/Cargo.toml', 'r') as f:
61 data = f.read()
62before, data = data.split(SEPARATOR_START, maxsplit=1)
63_, after = data.split(SEPARATOR_END, maxsplit=1)
64with open('../embassy-time/Cargo.toml', 'w') as f:
65 f.write(before + SEPARATOR_START + HELP + feats_time + SEPARATOR_END + after)
58 66
59# ========= Update src/tick.rs 67# ========= Update src/tick.rs
60 68
diff --git a/embassy-time/src/driver.rs b/embassy-time-driver/src/lib.rs
index f966386b7..39a772aa5 100644
--- a/embassy-time/src/driver.rs
+++ b/embassy-time-driver/src/lib.rs
@@ -1,3 +1,7 @@
1#![no_std]
2#![doc = include_str!("../README.md")]
3#![warn(missing_docs)]
4
1//! Time driver interface 5//! Time driver interface
2//! 6//!
3//! This module defines the interface a driver needs to implement to power the `embassy_time` module. 7//! This module defines the interface a driver needs to implement to power the `embassy_time` module.
@@ -62,6 +66,16 @@
62//! embassy_time::time_driver_impl!(static DRIVER: MyDriver = MyDriver{}); 66//! embassy_time::time_driver_impl!(static DRIVER: MyDriver = MyDriver{});
63//! ``` 67//! ```
64 68
69//! ## Feature flags
70#![doc = document_features::document_features!(feature_label = r#"<span class="stab portability"><code>{feature}</code></span>"#)]
71
72mod tick;
73
74/// Ticks per second of the global timebase.
75///
76/// This value is specified by the [`tick-*` Cargo features](crate#tick-rate)
77pub const TICK_HZ: u64 = tick::TICK_HZ;
78
65/// Alarm handle, assigned by the driver. 79/// Alarm handle, assigned by the driver.
66#[derive(Clone, Copy)] 80#[derive(Clone, Copy)]
67pub struct AlarmHandle { 81pub struct AlarmHandle {
@@ -165,22 +179,22 @@ macro_rules! time_driver_impl {
165 179
166 #[no_mangle] 180 #[no_mangle]
167 fn _embassy_time_now() -> u64 { 181 fn _embassy_time_now() -> u64 {
168 <$t as $crate::driver::Driver>::now(&$name) 182 <$t as $crate::Driver>::now(&$name)
169 } 183 }
170 184
171 #[no_mangle] 185 #[no_mangle]
172 unsafe fn _embassy_time_allocate_alarm() -> Option<$crate::driver::AlarmHandle> { 186 unsafe fn _embassy_time_allocate_alarm() -> Option<$crate::AlarmHandle> {
173 <$t as $crate::driver::Driver>::allocate_alarm(&$name) 187 <$t as $crate::Driver>::allocate_alarm(&$name)
174 } 188 }
175 189
176 #[no_mangle] 190 #[no_mangle]
177 fn _embassy_time_set_alarm_callback(alarm: $crate::driver::AlarmHandle, callback: fn(*mut ()), ctx: *mut ()) { 191 fn _embassy_time_set_alarm_callback(alarm: $crate::AlarmHandle, callback: fn(*mut ()), ctx: *mut ()) {
178 <$t as $crate::driver::Driver>::set_alarm_callback(&$name, alarm, callback, ctx) 192 <$t as $crate::Driver>::set_alarm_callback(&$name, alarm, callback, ctx)
179 } 193 }
180 194
181 #[no_mangle] 195 #[no_mangle]
182 fn _embassy_time_set_alarm(alarm: $crate::driver::AlarmHandle, timestamp: u64) -> bool { 196 fn _embassy_time_set_alarm(alarm: $crate::AlarmHandle, timestamp: u64) -> bool {
183 <$t as $crate::driver::Driver>::set_alarm(&$name, alarm, timestamp) 197 <$t as $crate::Driver>::set_alarm(&$name, alarm, timestamp)
184 } 198 }
185 }; 199 };
186} 200}
diff --git a/embassy-time/src/tick.rs b/embassy-time-driver/src/tick.rs
index 916ae9498..916ae9498 100644
--- a/embassy-time/src/tick.rs
+++ b/embassy-time-driver/src/tick.rs
diff --git a/embassy-time/Cargo.toml b/embassy-time/Cargo.toml
index 2beefac83..729a2bd4f 100644
--- a/embassy-time/Cargo.toml
+++ b/embassy-time/Cargo.toml
@@ -13,12 +13,6 @@ categories = [
13 "asynchronous", 13 "asynchronous",
14] 14]
15 15
16# Prevent multiple copies of this crate in the same binary.
17# Needed because different copies might get different tick rates, causing
18# wrong delays if the time driver is using one copy and user code is using another.
19# This is especially common when mixing crates from crates.io and git.
20links = "embassy-time"
21
22[package.metadata.embassy_docs] 16[package.metadata.embassy_docs]
23src_base = "https://github.com/embassy-rs/embassy/blob/embassy-time-v$VERSION/embassy-time/src/" 17src_base = "https://github.com/embassy-rs/embassy/blob/embassy-time-v$VERSION/embassy-time/src/"
24src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-time/src/" 18src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-time/src/"
@@ -81,328 +75,330 @@ generic-queue-128 = ["generic-queue"]
81# BEGIN TICKS 75# BEGIN TICKS
82# Generated by gen_tick.py. DO NOT EDIT. 76# Generated by gen_tick.py. DO NOT EDIT.
83## 1Hz Tick Rate 77## 1Hz Tick Rate
84tick-hz-1 = [] 78tick-hz-1 = ["embassy-time-driver/tick-hz-1"]
85## 2Hz Tick Rate 79## 2Hz Tick Rate
86tick-hz-2 = [] 80tick-hz-2 = ["embassy-time-driver/tick-hz-2"]
87## 4Hz Tick Rate 81## 4Hz Tick Rate
88tick-hz-4 = [] 82tick-hz-4 = ["embassy-time-driver/tick-hz-4"]
89## 8Hz Tick Rate 83## 8Hz Tick Rate
90tick-hz-8 = [] 84tick-hz-8 = ["embassy-time-driver/tick-hz-8"]
91## 10Hz Tick Rate 85## 10Hz Tick Rate
92tick-hz-10 = [] 86tick-hz-10 = ["embassy-time-driver/tick-hz-10"]
93## 16Hz Tick Rate 87## 16Hz Tick Rate
94tick-hz-16 = [] 88tick-hz-16 = ["embassy-time-driver/tick-hz-16"]
95## 32Hz Tick Rate 89## 32Hz Tick Rate
96tick-hz-32 = [] 90tick-hz-32 = ["embassy-time-driver/tick-hz-32"]
97## 64Hz Tick Rate 91## 64Hz Tick Rate
98tick-hz-64 = [] 92tick-hz-64 = ["embassy-time-driver/tick-hz-64"]
99## 100Hz Tick Rate 93## 100Hz Tick Rate
100tick-hz-100 = [] 94tick-hz-100 = ["embassy-time-driver/tick-hz-100"]
101## 128Hz Tick Rate 95## 128Hz Tick Rate
102tick-hz-128 = [] 96tick-hz-128 = ["embassy-time-driver/tick-hz-128"]
103## 256Hz Tick Rate 97## 256Hz Tick Rate
104tick-hz-256 = [] 98tick-hz-256 = ["embassy-time-driver/tick-hz-256"]
105## 512Hz Tick Rate 99## 512Hz Tick Rate
106tick-hz-512 = [] 100tick-hz-512 = ["embassy-time-driver/tick-hz-512"]
107## 1.0kHz Tick Rate 101## 1.0kHz Tick Rate
108tick-hz-1_000 = [] 102tick-hz-1_000 = ["embassy-time-driver/tick-hz-1_000"]
109## 1.024kHz Tick Rate 103## 1.024kHz Tick Rate
110tick-hz-1_024 = [] 104tick-hz-1_024 = ["embassy-time-driver/tick-hz-1_024"]
111## 2.0kHz Tick Rate 105## 2.0kHz Tick Rate
112tick-hz-2_000 = [] 106tick-hz-2_000 = ["embassy-time-driver/tick-hz-2_000"]
113## 2.048kHz Tick Rate 107## 2.048kHz Tick Rate
114tick-hz-2_048 = [] 108tick-hz-2_048 = ["embassy-time-driver/tick-hz-2_048"]
115## 4.0kHz Tick Rate 109## 4.0kHz Tick Rate
116tick-hz-4_000 = [] 110tick-hz-4_000 = ["embassy-time-driver/tick-hz-4_000"]
117## 4.096kHz Tick Rate 111## 4.096kHz Tick Rate
118tick-hz-4_096 = [] 112tick-hz-4_096 = ["embassy-time-driver/tick-hz-4_096"]
119## 8.0kHz Tick Rate 113## 8.0kHz Tick Rate
120tick-hz-8_000 = [] 114tick-hz-8_000 = ["embassy-time-driver/tick-hz-8_000"]
121## 8.192kHz Tick Rate 115## 8.192kHz Tick Rate
122tick-hz-8_192 = [] 116tick-hz-8_192 = ["embassy-time-driver/tick-hz-8_192"]
123## 10.0kHz Tick Rate 117## 10.0kHz Tick Rate
124tick-hz-10_000 = [] 118tick-hz-10_000 = ["embassy-time-driver/tick-hz-10_000"]
125## 16.0kHz Tick Rate 119## 16.0kHz Tick Rate
126tick-hz-16_000 = [] 120tick-hz-16_000 = ["embassy-time-driver/tick-hz-16_000"]
127## 16.384kHz Tick Rate 121## 16.384kHz Tick Rate
128tick-hz-16_384 = [] 122tick-hz-16_384 = ["embassy-time-driver/tick-hz-16_384"]
129## 20.0kHz Tick Rate 123## 20.0kHz Tick Rate
130tick-hz-20_000 = [] 124tick-hz-20_000 = ["embassy-time-driver/tick-hz-20_000"]
131## 32.0kHz Tick Rate 125## 32.0kHz Tick Rate
132tick-hz-32_000 = [] 126tick-hz-32_000 = ["embassy-time-driver/tick-hz-32_000"]
133## 32.768kHz Tick Rate 127## 32.768kHz Tick Rate
134tick-hz-32_768 = [] 128tick-hz-32_768 = ["embassy-time-driver/tick-hz-32_768"]
135## 40.0kHz Tick Rate 129## 40.0kHz Tick Rate
136tick-hz-40_000 = [] 130tick-hz-40_000 = ["embassy-time-driver/tick-hz-40_000"]
137## 64.0kHz Tick Rate 131## 64.0kHz Tick Rate
138tick-hz-64_000 = [] 132tick-hz-64_000 = ["embassy-time-driver/tick-hz-64_000"]
139## 65.536kHz Tick Rate 133## 65.536kHz Tick Rate
140tick-hz-65_536 = [] 134tick-hz-65_536 = ["embassy-time-driver/tick-hz-65_536"]
141## 80.0kHz Tick Rate 135## 80.0kHz Tick Rate
142tick-hz-80_000 = [] 136tick-hz-80_000 = ["embassy-time-driver/tick-hz-80_000"]
143## 100.0kHz Tick Rate 137## 100.0kHz Tick Rate
144tick-hz-100_000 = [] 138tick-hz-100_000 = ["embassy-time-driver/tick-hz-100_000"]
145## 128.0kHz Tick Rate 139## 128.0kHz Tick Rate
146tick-hz-128_000 = [] 140tick-hz-128_000 = ["embassy-time-driver/tick-hz-128_000"]
147## 131.072kHz Tick Rate 141## 131.072kHz Tick Rate
148tick-hz-131_072 = [] 142tick-hz-131_072 = ["embassy-time-driver/tick-hz-131_072"]
149## 160.0kHz Tick Rate 143## 160.0kHz Tick Rate
150tick-hz-160_000 = [] 144tick-hz-160_000 = ["embassy-time-driver/tick-hz-160_000"]
151## 256.0kHz Tick Rate 145## 256.0kHz Tick Rate
152tick-hz-256_000 = [] 146tick-hz-256_000 = ["embassy-time-driver/tick-hz-256_000"]
153## 262.144kHz Tick Rate 147## 262.144kHz Tick Rate
154tick-hz-262_144 = [] 148tick-hz-262_144 = ["embassy-time-driver/tick-hz-262_144"]
155## 320.0kHz Tick Rate 149## 320.0kHz Tick Rate
156tick-hz-320_000 = [] 150tick-hz-320_000 = ["embassy-time-driver/tick-hz-320_000"]
157## 512.0kHz Tick Rate 151## 512.0kHz Tick Rate
158tick-hz-512_000 = [] 152tick-hz-512_000 = ["embassy-time-driver/tick-hz-512_000"]
159## 524.288kHz Tick Rate 153## 524.288kHz Tick Rate
160tick-hz-524_288 = [] 154tick-hz-524_288 = ["embassy-time-driver/tick-hz-524_288"]
161## 640.0kHz Tick Rate 155## 640.0kHz Tick Rate
162tick-hz-640_000 = [] 156tick-hz-640_000 = ["embassy-time-driver/tick-hz-640_000"]
163## 1.0MHz Tick Rate 157## 1.0MHz Tick Rate
164tick-hz-1_000_000 = [] 158tick-hz-1_000_000 = ["embassy-time-driver/tick-hz-1_000_000"]
165## 1.024MHz Tick Rate 159## 1.024MHz Tick Rate
166tick-hz-1_024_000 = [] 160tick-hz-1_024_000 = ["embassy-time-driver/tick-hz-1_024_000"]
167## 1.048576MHz Tick Rate 161## 1.048576MHz Tick Rate
168tick-hz-1_048_576 = [] 162tick-hz-1_048_576 = ["embassy-time-driver/tick-hz-1_048_576"]
169## 1.28MHz Tick Rate 163## 1.28MHz Tick Rate
170tick-hz-1_280_000 = [] 164tick-hz-1_280_000 = ["embassy-time-driver/tick-hz-1_280_000"]
171## 2.0MHz Tick Rate 165## 2.0MHz Tick Rate
172tick-hz-2_000_000 = [] 166tick-hz-2_000_000 = ["embassy-time-driver/tick-hz-2_000_000"]
173## 2.048MHz Tick Rate 167## 2.048MHz Tick Rate
174tick-hz-2_048_000 = [] 168tick-hz-2_048_000 = ["embassy-time-driver/tick-hz-2_048_000"]
175## 2.097152MHz Tick Rate 169## 2.097152MHz Tick Rate
176tick-hz-2_097_152 = [] 170tick-hz-2_097_152 = ["embassy-time-driver/tick-hz-2_097_152"]
177## 2.56MHz Tick Rate 171## 2.56MHz Tick Rate
178tick-hz-2_560_000 = [] 172tick-hz-2_560_000 = ["embassy-time-driver/tick-hz-2_560_000"]
179## 3.0MHz Tick Rate 173## 3.0MHz Tick Rate
180tick-hz-3_000_000 = [] 174tick-hz-3_000_000 = ["embassy-time-driver/tick-hz-3_000_000"]
181## 4.0MHz Tick Rate 175## 4.0MHz Tick Rate
182tick-hz-4_000_000 = [] 176tick-hz-4_000_000 = ["embassy-time-driver/tick-hz-4_000_000"]
183## 4.096MHz Tick Rate 177## 4.096MHz Tick Rate
184tick-hz-4_096_000 = [] 178tick-hz-4_096_000 = ["embassy-time-driver/tick-hz-4_096_000"]
185## 4.194304MHz Tick Rate 179## 4.194304MHz Tick Rate
186tick-hz-4_194_304 = [] 180tick-hz-4_194_304 = ["embassy-time-driver/tick-hz-4_194_304"]
187## 5.12MHz Tick Rate 181## 5.12MHz Tick Rate
188tick-hz-5_120_000 = [] 182tick-hz-5_120_000 = ["embassy-time-driver/tick-hz-5_120_000"]
189## 6.0MHz Tick Rate 183## 6.0MHz Tick Rate
190tick-hz-6_000_000 = [] 184tick-hz-6_000_000 = ["embassy-time-driver/tick-hz-6_000_000"]
191## 8.0MHz Tick Rate 185## 8.0MHz Tick Rate
192tick-hz-8_000_000 = [] 186tick-hz-8_000_000 = ["embassy-time-driver/tick-hz-8_000_000"]
193## 8.192MHz Tick Rate 187## 8.192MHz Tick Rate
194tick-hz-8_192_000 = [] 188tick-hz-8_192_000 = ["embassy-time-driver/tick-hz-8_192_000"]
195## 8.388608MHz Tick Rate 189## 8.388608MHz Tick Rate
196tick-hz-8_388_608 = [] 190tick-hz-8_388_608 = ["embassy-time-driver/tick-hz-8_388_608"]
197## 9.0MHz Tick Rate 191## 9.0MHz Tick Rate
198tick-hz-9_000_000 = [] 192tick-hz-9_000_000 = ["embassy-time-driver/tick-hz-9_000_000"]
199## 10.0MHz Tick Rate 193## 10.0MHz Tick Rate
200tick-hz-10_000_000 = [] 194tick-hz-10_000_000 = ["embassy-time-driver/tick-hz-10_000_000"]
201## 10.24MHz Tick Rate 195## 10.24MHz Tick Rate
202tick-hz-10_240_000 = [] 196tick-hz-10_240_000 = ["embassy-time-driver/tick-hz-10_240_000"]
203## 12.0MHz Tick Rate 197## 12.0MHz Tick Rate
204tick-hz-12_000_000 = [] 198tick-hz-12_000_000 = ["embassy-time-driver/tick-hz-12_000_000"]
205## 16.0MHz Tick Rate 199## 16.0MHz Tick Rate
206tick-hz-16_000_000 = [] 200tick-hz-16_000_000 = ["embassy-time-driver/tick-hz-16_000_000"]
207## 16.384MHz Tick Rate 201## 16.384MHz Tick Rate
208tick-hz-16_384_000 = [] 202tick-hz-16_384_000 = ["embassy-time-driver/tick-hz-16_384_000"]
209## 16.777216MHz Tick Rate 203## 16.777216MHz Tick Rate
210tick-hz-16_777_216 = [] 204tick-hz-16_777_216 = ["embassy-time-driver/tick-hz-16_777_216"]
211## 18.0MHz Tick Rate 205## 18.0MHz Tick Rate
212tick-hz-18_000_000 = [] 206tick-hz-18_000_000 = ["embassy-time-driver/tick-hz-18_000_000"]
213## 20.0MHz Tick Rate 207## 20.0MHz Tick Rate
214tick-hz-20_000_000 = [] 208tick-hz-20_000_000 = ["embassy-time-driver/tick-hz-20_000_000"]
215## 20.48MHz Tick Rate 209## 20.48MHz Tick Rate
216tick-hz-20_480_000 = [] 210tick-hz-20_480_000 = ["embassy-time-driver/tick-hz-20_480_000"]
217## 24.0MHz Tick Rate 211## 24.0MHz Tick Rate
218tick-hz-24_000_000 = [] 212tick-hz-24_000_000 = ["embassy-time-driver/tick-hz-24_000_000"]
219## 30.0MHz Tick Rate 213## 30.0MHz Tick Rate
220tick-hz-30_000_000 = [] 214tick-hz-30_000_000 = ["embassy-time-driver/tick-hz-30_000_000"]
221## 32.0MHz Tick Rate 215## 32.0MHz Tick Rate
222tick-hz-32_000_000 = [] 216tick-hz-32_000_000 = ["embassy-time-driver/tick-hz-32_000_000"]
223## 32.768MHz Tick Rate 217## 32.768MHz Tick Rate
224tick-hz-32_768_000 = [] 218tick-hz-32_768_000 = ["embassy-time-driver/tick-hz-32_768_000"]
225## 36.0MHz Tick Rate 219## 36.0MHz Tick Rate
226tick-hz-36_000_000 = [] 220tick-hz-36_000_000 = ["embassy-time-driver/tick-hz-36_000_000"]
227## 40.0MHz Tick Rate 221## 40.0MHz Tick Rate
228tick-hz-40_000_000 = [] 222tick-hz-40_000_000 = ["embassy-time-driver/tick-hz-40_000_000"]
229## 40.96MHz Tick Rate 223## 40.96MHz Tick Rate
230tick-hz-40_960_000 = [] 224tick-hz-40_960_000 = ["embassy-time-driver/tick-hz-40_960_000"]
231## 48.0MHz Tick Rate 225## 48.0MHz Tick Rate
232tick-hz-48_000_000 = [] 226tick-hz-48_000_000 = ["embassy-time-driver/tick-hz-48_000_000"]
233## 50.0MHz Tick Rate 227## 50.0MHz Tick Rate
234tick-hz-50_000_000 = [] 228tick-hz-50_000_000 = ["embassy-time-driver/tick-hz-50_000_000"]
235## 60.0MHz Tick Rate 229## 60.0MHz Tick Rate
236tick-hz-60_000_000 = [] 230tick-hz-60_000_000 = ["embassy-time-driver/tick-hz-60_000_000"]
237## 64.0MHz Tick Rate 231## 64.0MHz Tick Rate
238tick-hz-64_000_000 = [] 232tick-hz-64_000_000 = ["embassy-time-driver/tick-hz-64_000_000"]
239## 65.536MHz Tick Rate 233## 65.536MHz Tick Rate
240tick-hz-65_536_000 = [] 234tick-hz-65_536_000 = ["embassy-time-driver/tick-hz-65_536_000"]
241## 70.0MHz Tick Rate 235## 70.0MHz Tick Rate
242tick-hz-70_000_000 = [] 236tick-hz-70_000_000 = ["embassy-time-driver/tick-hz-70_000_000"]
243## 72.0MHz Tick Rate 237## 72.0MHz Tick Rate
244tick-hz-72_000_000 = [] 238tick-hz-72_000_000 = ["embassy-time-driver/tick-hz-72_000_000"]
245## 80.0MHz Tick Rate 239## 80.0MHz Tick Rate
246tick-hz-80_000_000 = [] 240tick-hz-80_000_000 = ["embassy-time-driver/tick-hz-80_000_000"]
247## 81.92MHz Tick Rate 241## 81.92MHz Tick Rate
248tick-hz-81_920_000 = [] 242tick-hz-81_920_000 = ["embassy-time-driver/tick-hz-81_920_000"]
249## 90.0MHz Tick Rate 243## 90.0MHz Tick Rate
250tick-hz-90_000_000 = [] 244tick-hz-90_000_000 = ["embassy-time-driver/tick-hz-90_000_000"]
251## 96.0MHz Tick Rate 245## 96.0MHz Tick Rate
252tick-hz-96_000_000 = [] 246tick-hz-96_000_000 = ["embassy-time-driver/tick-hz-96_000_000"]
253## 100.0MHz Tick Rate 247## 100.0MHz Tick Rate
254tick-hz-100_000_000 = [] 248tick-hz-100_000_000 = ["embassy-time-driver/tick-hz-100_000_000"]
255## 110.0MHz Tick Rate 249## 110.0MHz Tick Rate
256tick-hz-110_000_000 = [] 250tick-hz-110_000_000 = ["embassy-time-driver/tick-hz-110_000_000"]
257## 120.0MHz Tick Rate 251## 120.0MHz Tick Rate
258tick-hz-120_000_000 = [] 252tick-hz-120_000_000 = ["embassy-time-driver/tick-hz-120_000_000"]
259## 128.0MHz Tick Rate 253## 128.0MHz Tick Rate
260tick-hz-128_000_000 = [] 254tick-hz-128_000_000 = ["embassy-time-driver/tick-hz-128_000_000"]
261## 130.0MHz Tick Rate 255## 130.0MHz Tick Rate
262tick-hz-130_000_000 = [] 256tick-hz-130_000_000 = ["embassy-time-driver/tick-hz-130_000_000"]
263## 131.072MHz Tick Rate 257## 131.072MHz Tick Rate
264tick-hz-131_072_000 = [] 258tick-hz-131_072_000 = ["embassy-time-driver/tick-hz-131_072_000"]
265## 140.0MHz Tick Rate 259## 140.0MHz Tick Rate
266tick-hz-140_000_000 = [] 260tick-hz-140_000_000 = ["embassy-time-driver/tick-hz-140_000_000"]
267## 144.0MHz Tick Rate 261## 144.0MHz Tick Rate
268tick-hz-144_000_000 = [] 262tick-hz-144_000_000 = ["embassy-time-driver/tick-hz-144_000_000"]
269## 150.0MHz Tick Rate 263## 150.0MHz Tick Rate
270tick-hz-150_000_000 = [] 264tick-hz-150_000_000 = ["embassy-time-driver/tick-hz-150_000_000"]
271## 160.0MHz Tick Rate 265## 160.0MHz Tick Rate
272tick-hz-160_000_000 = [] 266tick-hz-160_000_000 = ["embassy-time-driver/tick-hz-160_000_000"]
273## 163.84MHz Tick Rate 267## 163.84MHz Tick Rate
274tick-hz-163_840_000 = [] 268tick-hz-163_840_000 = ["embassy-time-driver/tick-hz-163_840_000"]
275## 170.0MHz Tick Rate 269## 170.0MHz Tick Rate
276tick-hz-170_000_000 = [] 270tick-hz-170_000_000 = ["embassy-time-driver/tick-hz-170_000_000"]
277## 180.0MHz Tick Rate 271## 180.0MHz Tick Rate
278tick-hz-180_000_000 = [] 272tick-hz-180_000_000 = ["embassy-time-driver/tick-hz-180_000_000"]
279## 190.0MHz Tick Rate 273## 190.0MHz Tick Rate
280tick-hz-190_000_000 = [] 274tick-hz-190_000_000 = ["embassy-time-driver/tick-hz-190_000_000"]
281## 192.0MHz Tick Rate 275## 192.0MHz Tick Rate
282tick-hz-192_000_000 = [] 276tick-hz-192_000_000 = ["embassy-time-driver/tick-hz-192_000_000"]
283## 200.0MHz Tick Rate 277## 200.0MHz Tick Rate
284tick-hz-200_000_000 = [] 278tick-hz-200_000_000 = ["embassy-time-driver/tick-hz-200_000_000"]
285## 210.0MHz Tick Rate 279## 210.0MHz Tick Rate
286tick-hz-210_000_000 = [] 280tick-hz-210_000_000 = ["embassy-time-driver/tick-hz-210_000_000"]
287## 220.0MHz Tick Rate 281## 220.0MHz Tick Rate
288tick-hz-220_000_000 = [] 282tick-hz-220_000_000 = ["embassy-time-driver/tick-hz-220_000_000"]
289## 230.0MHz Tick Rate 283## 230.0MHz Tick Rate
290tick-hz-230_000_000 = [] 284tick-hz-230_000_000 = ["embassy-time-driver/tick-hz-230_000_000"]
291## 240.0MHz Tick Rate 285## 240.0MHz Tick Rate
292tick-hz-240_000_000 = [] 286tick-hz-240_000_000 = ["embassy-time-driver/tick-hz-240_000_000"]
293## 250.0MHz Tick Rate 287## 250.0MHz Tick Rate
294tick-hz-250_000_000 = [] 288tick-hz-250_000_000 = ["embassy-time-driver/tick-hz-250_000_000"]
295## 256.0MHz Tick Rate 289## 256.0MHz Tick Rate
296tick-hz-256_000_000 = [] 290tick-hz-256_000_000 = ["embassy-time-driver/tick-hz-256_000_000"]
297## 260.0MHz Tick Rate 291## 260.0MHz Tick Rate
298tick-hz-260_000_000 = [] 292tick-hz-260_000_000 = ["embassy-time-driver/tick-hz-260_000_000"]
299## 262.144MHz Tick Rate 293## 262.144MHz Tick Rate
300tick-hz-262_144_000 = [] 294tick-hz-262_144_000 = ["embassy-time-driver/tick-hz-262_144_000"]
301## 270.0MHz Tick Rate 295## 270.0MHz Tick Rate
302tick-hz-270_000_000 = [] 296tick-hz-270_000_000 = ["embassy-time-driver/tick-hz-270_000_000"]
303## 280.0MHz Tick Rate 297## 280.0MHz Tick Rate
304tick-hz-280_000_000 = [] 298tick-hz-280_000_000 = ["embassy-time-driver/tick-hz-280_000_000"]
305## 288.0MHz Tick Rate 299## 288.0MHz Tick Rate
306tick-hz-288_000_000 = [] 300tick-hz-288_000_000 = ["embassy-time-driver/tick-hz-288_000_000"]
307## 290.0MHz Tick Rate 301## 290.0MHz Tick Rate
308tick-hz-290_000_000 = [] 302tick-hz-290_000_000 = ["embassy-time-driver/tick-hz-290_000_000"]
309## 300.0MHz Tick Rate 303## 300.0MHz Tick Rate
310tick-hz-300_000_000 = [] 304tick-hz-300_000_000 = ["embassy-time-driver/tick-hz-300_000_000"]
311## 320.0MHz Tick Rate 305## 320.0MHz Tick Rate
312tick-hz-320_000_000 = [] 306tick-hz-320_000_000 = ["embassy-time-driver/tick-hz-320_000_000"]
313## 327.68MHz Tick Rate 307## 327.68MHz Tick Rate
314tick-hz-327_680_000 = [] 308tick-hz-327_680_000 = ["embassy-time-driver/tick-hz-327_680_000"]
315## 340.0MHz Tick Rate 309## 340.0MHz Tick Rate
316tick-hz-340_000_000 = [] 310tick-hz-340_000_000 = ["embassy-time-driver/tick-hz-340_000_000"]
317## 360.0MHz Tick Rate 311## 360.0MHz Tick Rate
318tick-hz-360_000_000 = [] 312tick-hz-360_000_000 = ["embassy-time-driver/tick-hz-360_000_000"]
319## 380.0MHz Tick Rate 313## 380.0MHz Tick Rate
320tick-hz-380_000_000 = [] 314tick-hz-380_000_000 = ["embassy-time-driver/tick-hz-380_000_000"]
321## 384.0MHz Tick Rate 315## 384.0MHz Tick Rate
322tick-hz-384_000_000 = [] 316tick-hz-384_000_000 = ["embassy-time-driver/tick-hz-384_000_000"]
323## 400.0MHz Tick Rate 317## 400.0MHz Tick Rate
324tick-hz-400_000_000 = [] 318tick-hz-400_000_000 = ["embassy-time-driver/tick-hz-400_000_000"]
325## 420.0MHz Tick Rate 319## 420.0MHz Tick Rate
326tick-hz-420_000_000 = [] 320tick-hz-420_000_000 = ["embassy-time-driver/tick-hz-420_000_000"]
327## 440.0MHz Tick Rate 321## 440.0MHz Tick Rate
328tick-hz-440_000_000 = [] 322tick-hz-440_000_000 = ["embassy-time-driver/tick-hz-440_000_000"]
329## 460.0MHz Tick Rate 323## 460.0MHz Tick Rate
330tick-hz-460_000_000 = [] 324tick-hz-460_000_000 = ["embassy-time-driver/tick-hz-460_000_000"]
331## 480.0MHz Tick Rate 325## 480.0MHz Tick Rate
332tick-hz-480_000_000 = [] 326tick-hz-480_000_000 = ["embassy-time-driver/tick-hz-480_000_000"]
333## 500.0MHz Tick Rate 327## 500.0MHz Tick Rate
334tick-hz-500_000_000 = [] 328tick-hz-500_000_000 = ["embassy-time-driver/tick-hz-500_000_000"]
335## 512.0MHz Tick Rate 329## 512.0MHz Tick Rate
336tick-hz-512_000_000 = [] 330tick-hz-512_000_000 = ["embassy-time-driver/tick-hz-512_000_000"]
337## 520.0MHz Tick Rate 331## 520.0MHz Tick Rate
338tick-hz-520_000_000 = [] 332tick-hz-520_000_000 = ["embassy-time-driver/tick-hz-520_000_000"]
339## 524.288MHz Tick Rate 333## 524.288MHz Tick Rate
340tick-hz-524_288_000 = [] 334tick-hz-524_288_000 = ["embassy-time-driver/tick-hz-524_288_000"]
341## 540.0MHz Tick Rate 335## 540.0MHz Tick Rate
342tick-hz-540_000_000 = [] 336tick-hz-540_000_000 = ["embassy-time-driver/tick-hz-540_000_000"]
343## 560.0MHz Tick Rate 337## 560.0MHz Tick Rate
344tick-hz-560_000_000 = [] 338tick-hz-560_000_000 = ["embassy-time-driver/tick-hz-560_000_000"]
345## 576.0MHz Tick Rate 339## 576.0MHz Tick Rate
346tick-hz-576_000_000 = [] 340tick-hz-576_000_000 = ["embassy-time-driver/tick-hz-576_000_000"]
347## 580.0MHz Tick Rate 341## 580.0MHz Tick Rate
348tick-hz-580_000_000 = [] 342tick-hz-580_000_000 = ["embassy-time-driver/tick-hz-580_000_000"]
349## 600.0MHz Tick Rate 343## 600.0MHz Tick Rate
350tick-hz-600_000_000 = [] 344tick-hz-600_000_000 = ["embassy-time-driver/tick-hz-600_000_000"]
351## 620.0MHz Tick Rate 345## 620.0MHz Tick Rate
352tick-hz-620_000_000 = [] 346tick-hz-620_000_000 = ["embassy-time-driver/tick-hz-620_000_000"]
353## 640.0MHz Tick Rate 347## 640.0MHz Tick Rate
354tick-hz-640_000_000 = [] 348tick-hz-640_000_000 = ["embassy-time-driver/tick-hz-640_000_000"]
355## 655.36MHz Tick Rate 349## 655.36MHz Tick Rate
356tick-hz-655_360_000 = [] 350tick-hz-655_360_000 = ["embassy-time-driver/tick-hz-655_360_000"]
357## 660.0MHz Tick Rate 351## 660.0MHz Tick Rate
358tick-hz-660_000_000 = [] 352tick-hz-660_000_000 = ["embassy-time-driver/tick-hz-660_000_000"]
359## 680.0MHz Tick Rate 353## 680.0MHz Tick Rate
360tick-hz-680_000_000 = [] 354tick-hz-680_000_000 = ["embassy-time-driver/tick-hz-680_000_000"]
361## 700.0MHz Tick Rate 355## 700.0MHz Tick Rate
362tick-hz-700_000_000 = [] 356tick-hz-700_000_000 = ["embassy-time-driver/tick-hz-700_000_000"]
363## 720.0MHz Tick Rate 357## 720.0MHz Tick Rate
364tick-hz-720_000_000 = [] 358tick-hz-720_000_000 = ["embassy-time-driver/tick-hz-720_000_000"]
365## 740.0MHz Tick Rate 359## 740.0MHz Tick Rate
366tick-hz-740_000_000 = [] 360tick-hz-740_000_000 = ["embassy-time-driver/tick-hz-740_000_000"]
367## 760.0MHz Tick Rate 361## 760.0MHz Tick Rate
368tick-hz-760_000_000 = [] 362tick-hz-760_000_000 = ["embassy-time-driver/tick-hz-760_000_000"]
369## 768.0MHz Tick Rate 363## 768.0MHz Tick Rate
370tick-hz-768_000_000 = [] 364tick-hz-768_000_000 = ["embassy-time-driver/tick-hz-768_000_000"]
371## 780.0MHz Tick Rate 365## 780.0MHz Tick Rate
372tick-hz-780_000_000 = [] 366tick-hz-780_000_000 = ["embassy-time-driver/tick-hz-780_000_000"]
373## 800.0MHz Tick Rate 367## 800.0MHz Tick Rate
374tick-hz-800_000_000 = [] 368tick-hz-800_000_000 = ["embassy-time-driver/tick-hz-800_000_000"]
375## 820.0MHz Tick Rate 369## 820.0MHz Tick Rate
376tick-hz-820_000_000 = [] 370tick-hz-820_000_000 = ["embassy-time-driver/tick-hz-820_000_000"]
377## 840.0MHz Tick Rate 371## 840.0MHz Tick Rate
378tick-hz-840_000_000 = [] 372tick-hz-840_000_000 = ["embassy-time-driver/tick-hz-840_000_000"]
379## 860.0MHz Tick Rate 373## 860.0MHz Tick Rate
380tick-hz-860_000_000 = [] 374tick-hz-860_000_000 = ["embassy-time-driver/tick-hz-860_000_000"]
381## 880.0MHz Tick Rate 375## 880.0MHz Tick Rate
382tick-hz-880_000_000 = [] 376tick-hz-880_000_000 = ["embassy-time-driver/tick-hz-880_000_000"]
383## 900.0MHz Tick Rate 377## 900.0MHz Tick Rate
384tick-hz-900_000_000 = [] 378tick-hz-900_000_000 = ["embassy-time-driver/tick-hz-900_000_000"]
385## 920.0MHz Tick Rate 379## 920.0MHz Tick Rate
386tick-hz-920_000_000 = [] 380tick-hz-920_000_000 = ["embassy-time-driver/tick-hz-920_000_000"]
387## 940.0MHz Tick Rate 381## 940.0MHz Tick Rate
388tick-hz-940_000_000 = [] 382tick-hz-940_000_000 = ["embassy-time-driver/tick-hz-940_000_000"]
389## 960.0MHz Tick Rate 383## 960.0MHz Tick Rate
390tick-hz-960_000_000 = [] 384tick-hz-960_000_000 = ["embassy-time-driver/tick-hz-960_000_000"]
391## 980.0MHz Tick Rate 385## 980.0MHz Tick Rate
392tick-hz-980_000_000 = [] 386tick-hz-980_000_000 = ["embassy-time-driver/tick-hz-980_000_000"]
393## 1.0GHz Tick Rate 387## 1.0GHz Tick Rate
394tick-hz-1_000_000_000 = [] 388tick-hz-1_000_000_000 = ["embassy-time-driver/tick-hz-1_000_000_000"]
395## 1.31072GHz Tick Rate 389## 1.31072GHz Tick Rate
396tick-hz-1_310_720_000 = [] 390tick-hz-1_310_720_000 = ["embassy-time-driver/tick-hz-1_310_720_000"]
397## 2.62144GHz Tick Rate 391## 2.62144GHz Tick Rate
398tick-hz-2_621_440_000 = [] 392tick-hz-2_621_440_000 = ["embassy-time-driver/tick-hz-2_621_440_000"]
399## 5.24288GHz Tick Rate 393## 5.24288GHz Tick Rate
400tick-hz-5_242_880_000 = [] 394tick-hz-5_242_880_000 = ["embassy-time-driver/tick-hz-5_242_880_000"]
401# END TICKS 395# END TICKS
402 396
403#! </details> 397#! </details>
404 398
405[dependencies] 399[dependencies]
400embassy-time-driver = { version = "0.1.0", path = "../embassy-time-driver" }
401
406defmt = { version = "0.3", optional = true } 402defmt = { version = "0.3", optional = true }
407log = { version = "0.4.14", optional = true } 403log = { version = "0.4.14", optional = true }
408 404
diff --git a/embassy-time/README.md b/embassy-time/README.md
index a4e150c14..20772f1d8 100644
--- a/embassy-time/README.md
+++ b/embassy-time/README.md
@@ -12,7 +12,7 @@ Tick counts are 64 bits. The default tick rate of 1Mhz supports
12representing time spans of up to ~584558 years, which is big enough for all practical 12representing time spans of up to ~584558 years, which is big enough for all practical
13purposes and allows not having to worry about overflows. 13purposes and allows not having to worry about overflows.
14 14
15## Time driver 15## Global time driver
16 16
17The `time` module is backed by a global "time driver" specified at build time. 17The `time` module is backed by a global "time driver" specified at build time.
18Only one driver can be active in a program. 18Only one driver can be active in a program.
@@ -21,7 +21,7 @@ All methods and structs transparently call into the active driver. This makes it
21possible for libraries to use `embassy_time` in a driver-agnostic way without 21possible for libraries to use `embassy_time` in a driver-agnostic way without
22requiring generic parameters. 22requiring generic parameters.
23 23
24For more details, check the [`driver`] module. 24For more details, check the [`embassy_time_driver`] crate.
25 25
26## Instants and Durations 26## Instants and Durations
27 27
diff --git a/embassy-time/src/driver_mock.rs b/embassy-time/src/driver_mock.rs
index 7533d51e5..7abc2bd70 100644
--- a/embassy-time/src/driver_mock.rs
+++ b/embassy-time/src/driver_mock.rs
@@ -28,7 +28,7 @@ use crate::{Duration, Instant};
28/// ``` 28/// ```
29pub struct MockDriver(CsMutex<RefCell<InnerMockDriver>>); 29pub struct MockDriver(CsMutex<RefCell<InnerMockDriver>>);
30 30
31crate::time_driver_impl!(static DRIVER: MockDriver = MockDriver::new()); 31crate::driver::time_driver_impl!(static DRIVER: MockDriver = MockDriver::new());
32 32
33impl MockDriver { 33impl MockDriver {
34 /// Creates a new mock driver. 34 /// Creates a new mock driver.
diff --git a/embassy-time/src/driver_std.rs b/embassy-time/src/driver_std.rs
index 32db47a37..3b5524f9e 100644
--- a/embassy-time/src/driver_std.rs
+++ b/embassy-time/src/driver_std.rs
@@ -45,7 +45,7 @@ struct TimeDriver {
45} 45}
46 46
47const ALARM_NEW: AlarmState = AlarmState::new(); 47const ALARM_NEW: AlarmState = AlarmState::new();
48crate::time_driver_impl!(static DRIVER: TimeDriver = TimeDriver { 48crate::driver::time_driver_impl!(static DRIVER: TimeDriver = TimeDriver {
49 alarm_count: AtomicU8::new(0), 49 alarm_count: AtomicU8::new(0),
50 50
51 once: Once::new(), 51 once: Once::new(),
diff --git a/embassy-time/src/driver_wasm.rs b/embassy-time/src/driver_wasm.rs
index 0f672dc75..d75856c26 100644
--- a/embassy-time/src/driver_wasm.rs
+++ b/embassy-time/src/driver_wasm.rs
@@ -42,7 +42,7 @@ struct TimeDriver {
42} 42}
43 43
44const ALARM_NEW: AlarmState = AlarmState::new(); 44const ALARM_NEW: AlarmState = AlarmState::new();
45crate::time_driver_impl!(static DRIVER: TimeDriver = TimeDriver { 45crate::driver::time_driver_impl!(static DRIVER: TimeDriver = TimeDriver {
46 alarm_count: AtomicU8::new(0), 46 alarm_count: AtomicU8::new(0),
47 once: Once::new(), 47 once: Once::new(),
48 alarms: UninitCell::uninit(), 48 alarms: UninitCell::uninit(),
diff --git a/embassy-time/src/lib.rs b/embassy-time/src/lib.rs
index 7e2546f68..3f8c09f1a 100644
--- a/embassy-time/src/lib.rs
+++ b/embassy-time/src/lib.rs
@@ -10,12 +10,12 @@
10// This mod MUST go first, so that the others see its macros. 10// This mod MUST go first, so that the others see its macros.
11pub(crate) mod fmt; 11pub(crate) mod fmt;
12 12
13pub use embassy_time_driver as driver;
14
13mod delay; 15mod delay;
14pub mod driver;
15mod duration; 16mod duration;
16mod instant; 17mod instant;
17pub mod queue; 18pub mod queue;
18mod tick;
19mod timer; 19mod timer;
20 20
21#[cfg(feature = "mock-driver")] 21#[cfg(feature = "mock-driver")]
@@ -32,15 +32,11 @@ mod driver_wasm;
32mod queue_generic; 32mod queue_generic;
33 33
34pub use delay::{block_for, Delay}; 34pub use delay::{block_for, Delay};
35pub use driver::TICK_HZ;
35pub use duration::Duration; 36pub use duration::Duration;
36pub use instant::Instant; 37pub use instant::Instant;
37pub use timer::{with_timeout, Ticker, TimeoutError, Timer}; 38pub use timer::{with_timeout, Ticker, TimeoutError, Timer};
38 39
39/// Ticks per second of the global timebase.
40///
41/// This value is specified by the [`tick-*` Cargo features](crate#tick-rate)
42pub const TICK_HZ: u64 = tick::TICK_HZ;
43
44const fn gcd(a: u64, b: u64) -> u64 { 40const fn gcd(a: u64, b: u64) -> u64 {
45 if b == 0 { 41 if b == 0 {
46 a 42 a