diff options
21 files changed, 711 insertions, 227 deletions
| @@ -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] |
| 113 | embassy-time-driver = { version = "0.1", path = "../embassy-time-driver", optional = true } | ||
| 113 | embassy-time = { version = "0.2", path = "../embassy-time", optional = true } | 114 | embassy-time = { version = "0.2", path = "../embassy-time", optional = true } |
| 114 | embassy-sync = { version = "0.5.0", path = "../embassy-sync" } | 115 | embassy-sync = { version = "0.5.0", path = "../embassy-sync" } |
| 115 | embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-3"] } | 116 | embassy-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}; | |||
| 5 | use critical_section::CriticalSection; | 5 | use critical_section::CriticalSection; |
| 6 | use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; | 6 | use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; |
| 7 | use embassy_sync::blocking_mutex::CriticalSectionMutex as Mutex; | 7 | use embassy_sync::blocking_mutex::CriticalSectionMutex as Mutex; |
| 8 | use embassy_time::driver::{AlarmHandle, Driver}; | 8 | use embassy_time_driver::{AlarmHandle, Driver}; |
| 9 | 9 | ||
| 10 | use crate::interrupt::InterruptExt; | 10 | use crate::interrupt::InterruptExt; |
| 11 | use crate::{interrupt, pac}; | 11 | use crate::{interrupt, pac}; |
| @@ -119,7 +119,7 @@ struct RtcDriver { | |||
| 119 | } | 119 | } |
| 120 | 120 | ||
| 121 | const ALARM_STATE_NEW: AlarmState = AlarmState::new(); | 121 | const ALARM_STATE_NEW: AlarmState = AlarmState::new(); |
| 122 | embassy_time::time_driver_impl!(static DRIVER: RtcDriver = RtcDriver { | 122 | embassy_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"] | |||
| 30 | unstable-pac = [] | 30 | unstable-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 |
| 33 | time-driver = [] | 33 | time-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 |
| 36 | rom-func-cache = [] | 36 | rom-func-cache = [] |
| @@ -67,7 +67,8 @@ boot2-w25x10cl = [] | |||
| 67 | 67 | ||
| 68 | [dependencies] | 68 | [dependencies] |
| 69 | embassy-sync = { version = "0.5.0", path = "../embassy-sync" } | 69 | embassy-sync = { version = "0.5.0", path = "../embassy-sync" } |
| 70 | embassy-time = { version = "0.2", path = "../embassy-time", features = [ "tick-hz-1_000_000" ] } | 70 | embassy-time-driver = { version = "0.1", path = "../embassy-time-driver", optional = true } |
| 71 | embassy-time = { version = "0.2", path = "../embassy-time" } | ||
| 71 | embassy-futures = { version = "0.1.0", path = "../embassy-futures" } | 72 | embassy-futures = { version = "0.1.0", path = "../embassy-futures" } |
| 72 | embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-2"] } | 73 | embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-2"] } |
| 73 | embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" } | 74 | embassy-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; | |||
| 30 | pub mod rtc; | 30 | pub mod rtc; |
| 31 | pub mod spi; | 31 | pub mod spi; |
| 32 | #[cfg(feature = "time-driver")] | 32 | #[cfg(feature = "time-driver")] |
| 33 | pub mod timer; | 33 | pub mod time_driver; |
| 34 | pub mod uart; | 34 | pub mod uart; |
| 35 | pub mod usb; | 35 | pub mod usb; |
| 36 | pub mod watchdog; | 36 | pub 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}; | |||
| 5 | use critical_section::CriticalSection; | 5 | use critical_section::CriticalSection; |
| 6 | use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; | 6 | use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; |
| 7 | use embassy_sync::blocking_mutex::Mutex; | 7 | use embassy_sync::blocking_mutex::Mutex; |
| 8 | use embassy_time::driver::{AlarmHandle, Driver}; | 8 | use embassy_time_driver::{AlarmHandle, Driver}; |
| 9 | 9 | ||
| 10 | use crate::interrupt::InterruptExt; | 10 | use crate::interrupt::InterruptExt; |
| 11 | use crate::{interrupt, pac}; | 11 | use crate::{interrupt, pac}; |
| @@ -27,7 +27,7 @@ struct TimerDriver { | |||
| 27 | next_alarm: AtomicU8, | 27 | next_alarm: AtomicU8, |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | embassy_time::time_driver_impl!(static DRIVER: TimerDriver = TimerDriver{ | 30 | embassy_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] |
| 35 | embassy-sync = { version = "0.5.0", path = "../embassy-sync" } | 35 | embassy-sync = { version = "0.5.0", path = "../embassy-sync" } |
| 36 | embassy-time = { version = "0.2", path = "../embassy-time", optional = true } | 36 | embassy-time = { version = "0.2", path = "../embassy-time", optional = true } |
| 37 | embassy-time-driver = { version = "0.1", path = "../embassy-time-driver", optional = true } | ||
| 37 | embassy-futures = { version = "0.1.0", path = "../embassy-futures" } | 38 | embassy-futures = { version = "0.1.0", path = "../embassy-futures" } |
| 38 | embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-4"] } | 39 | embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-4"] } |
| 39 | embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" } | 40 | embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" } |
| @@ -88,7 +89,7 @@ rt = ["stm32-metapac/rt"] | |||
| 88 | defmt = ["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 | defmt = ["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 | ||
| 90 | exti = [] | 91 | exti = [] |
| 91 | low-power = [ "dep:embassy-executor", "embassy-executor?/arch-cortex-m" ] | 92 | low-power = [ "dep:embassy-executor", "embassy-executor?/arch-cortex-m", "time" ] |
| 92 | low-power-debug-with-sleep = [] | 93 | low-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 |
| 113 | time-driver-any = ["_time-driver"] | 114 | time-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}; | |||
| 6 | use critical_section::CriticalSection; | 6 | use critical_section::CriticalSection; |
| 7 | use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; | 7 | use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; |
| 8 | use embassy_sync::blocking_mutex::Mutex; | 8 | use embassy_sync::blocking_mutex::Mutex; |
| 9 | use embassy_time::driver::{AlarmHandle, Driver}; | 9 | use embassy_time_driver::{AlarmHandle, Driver, TICK_HZ}; |
| 10 | use embassy_time::TICK_HZ; | ||
| 11 | use stm32_metapac::timer::regs; | 10 | use stm32_metapac::timer::regs; |
| 12 | 11 | ||
| 13 | use crate::interrupt::typelevel::Interrupt; | 12 | use crate::interrupt::typelevel::Interrupt; |
| @@ -173,7 +172,7 @@ pub(crate) struct RtcDriver { | |||
| 173 | 172 | ||
| 174 | const ALARM_STATE_NEW: AlarmState = AlarmState::new(); | 173 | const ALARM_STATE_NEW: AlarmState = AlarmState::new(); |
| 175 | 174 | ||
| 176 | embassy_time::time_driver_impl!(static DRIVER: RtcDriver = RtcDriver { | 175 | embassy_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 | |||
| 3 | All notable changes to this project will be documented in this file. | ||
| 4 | |||
| 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), | ||
| 6 | and 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] | ||
| 2 | name = "embassy-time-driver" | ||
| 3 | version = "0.1.0" | ||
| 4 | edition = "2021" | ||
| 5 | description = "Driver trait for embassy-time" | ||
| 6 | repository = "https://github.com/embassy-rs/embassy" | ||
| 7 | readme = "README.md" | ||
| 8 | license = "MIT OR Apache-2.0" | ||
| 9 | categories = [ | ||
| 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. | ||
| 20 | links = "embassy-time" | ||
| 21 | |||
| 22 | [package.metadata.embassy_docs] | ||
| 23 | src_base = "https://github.com/embassy-rs/embassy/blob/embassy-time-driver-v$VERSION/embassy-time-driver/src/" | ||
| 24 | src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-time-driver/src/" | ||
| 25 | target = "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 | ||
| 47 | tick-hz-1 = [] | ||
| 48 | ## 2Hz Tick Rate | ||
| 49 | tick-hz-2 = [] | ||
| 50 | ## 4Hz Tick Rate | ||
| 51 | tick-hz-4 = [] | ||
| 52 | ## 8Hz Tick Rate | ||
| 53 | tick-hz-8 = [] | ||
| 54 | ## 10Hz Tick Rate | ||
| 55 | tick-hz-10 = [] | ||
| 56 | ## 16Hz Tick Rate | ||
| 57 | tick-hz-16 = [] | ||
| 58 | ## 32Hz Tick Rate | ||
| 59 | tick-hz-32 = [] | ||
| 60 | ## 64Hz Tick Rate | ||
| 61 | tick-hz-64 = [] | ||
| 62 | ## 100Hz Tick Rate | ||
| 63 | tick-hz-100 = [] | ||
| 64 | ## 128Hz Tick Rate | ||
| 65 | tick-hz-128 = [] | ||
| 66 | ## 256Hz Tick Rate | ||
| 67 | tick-hz-256 = [] | ||
| 68 | ## 512Hz Tick Rate | ||
| 69 | tick-hz-512 = [] | ||
| 70 | ## 1.0kHz Tick Rate | ||
| 71 | tick-hz-1_000 = [] | ||
| 72 | ## 1.024kHz Tick Rate | ||
| 73 | tick-hz-1_024 = [] | ||
| 74 | ## 2.0kHz Tick Rate | ||
| 75 | tick-hz-2_000 = [] | ||
| 76 | ## 2.048kHz Tick Rate | ||
| 77 | tick-hz-2_048 = [] | ||
| 78 | ## 4.0kHz Tick Rate | ||
| 79 | tick-hz-4_000 = [] | ||
| 80 | ## 4.096kHz Tick Rate | ||
| 81 | tick-hz-4_096 = [] | ||
| 82 | ## 8.0kHz Tick Rate | ||
| 83 | tick-hz-8_000 = [] | ||
| 84 | ## 8.192kHz Tick Rate | ||
| 85 | tick-hz-8_192 = [] | ||
| 86 | ## 10.0kHz Tick Rate | ||
| 87 | tick-hz-10_000 = [] | ||
| 88 | ## 16.0kHz Tick Rate | ||
| 89 | tick-hz-16_000 = [] | ||
| 90 | ## 16.384kHz Tick Rate | ||
| 91 | tick-hz-16_384 = [] | ||
| 92 | ## 20.0kHz Tick Rate | ||
| 93 | tick-hz-20_000 = [] | ||
| 94 | ## 32.0kHz Tick Rate | ||
| 95 | tick-hz-32_000 = [] | ||
| 96 | ## 32.768kHz Tick Rate | ||
| 97 | tick-hz-32_768 = [] | ||
| 98 | ## 40.0kHz Tick Rate | ||
| 99 | tick-hz-40_000 = [] | ||
| 100 | ## 64.0kHz Tick Rate | ||
| 101 | tick-hz-64_000 = [] | ||
| 102 | ## 65.536kHz Tick Rate | ||
| 103 | tick-hz-65_536 = [] | ||
| 104 | ## 80.0kHz Tick Rate | ||
| 105 | tick-hz-80_000 = [] | ||
| 106 | ## 100.0kHz Tick Rate | ||
| 107 | tick-hz-100_000 = [] | ||
| 108 | ## 128.0kHz Tick Rate | ||
| 109 | tick-hz-128_000 = [] | ||
| 110 | ## 131.072kHz Tick Rate | ||
| 111 | tick-hz-131_072 = [] | ||
| 112 | ## 160.0kHz Tick Rate | ||
| 113 | tick-hz-160_000 = [] | ||
| 114 | ## 256.0kHz Tick Rate | ||
| 115 | tick-hz-256_000 = [] | ||
| 116 | ## 262.144kHz Tick Rate | ||
| 117 | tick-hz-262_144 = [] | ||
| 118 | ## 320.0kHz Tick Rate | ||
| 119 | tick-hz-320_000 = [] | ||
| 120 | ## 512.0kHz Tick Rate | ||
| 121 | tick-hz-512_000 = [] | ||
| 122 | ## 524.288kHz Tick Rate | ||
| 123 | tick-hz-524_288 = [] | ||
| 124 | ## 640.0kHz Tick Rate | ||
| 125 | tick-hz-640_000 = [] | ||
| 126 | ## 1.0MHz Tick Rate | ||
| 127 | tick-hz-1_000_000 = [] | ||
| 128 | ## 1.024MHz Tick Rate | ||
| 129 | tick-hz-1_024_000 = [] | ||
| 130 | ## 1.048576MHz Tick Rate | ||
| 131 | tick-hz-1_048_576 = [] | ||
| 132 | ## 1.28MHz Tick Rate | ||
| 133 | tick-hz-1_280_000 = [] | ||
| 134 | ## 2.0MHz Tick Rate | ||
| 135 | tick-hz-2_000_000 = [] | ||
| 136 | ## 2.048MHz Tick Rate | ||
| 137 | tick-hz-2_048_000 = [] | ||
| 138 | ## 2.097152MHz Tick Rate | ||
| 139 | tick-hz-2_097_152 = [] | ||
| 140 | ## 2.56MHz Tick Rate | ||
| 141 | tick-hz-2_560_000 = [] | ||
| 142 | ## 3.0MHz Tick Rate | ||
| 143 | tick-hz-3_000_000 = [] | ||
| 144 | ## 4.0MHz Tick Rate | ||
| 145 | tick-hz-4_000_000 = [] | ||
| 146 | ## 4.096MHz Tick Rate | ||
| 147 | tick-hz-4_096_000 = [] | ||
| 148 | ## 4.194304MHz Tick Rate | ||
| 149 | tick-hz-4_194_304 = [] | ||
| 150 | ## 5.12MHz Tick Rate | ||
| 151 | tick-hz-5_120_000 = [] | ||
| 152 | ## 6.0MHz Tick Rate | ||
| 153 | tick-hz-6_000_000 = [] | ||
| 154 | ## 8.0MHz Tick Rate | ||
| 155 | tick-hz-8_000_000 = [] | ||
| 156 | ## 8.192MHz Tick Rate | ||
| 157 | tick-hz-8_192_000 = [] | ||
| 158 | ## 8.388608MHz Tick Rate | ||
| 159 | tick-hz-8_388_608 = [] | ||
| 160 | ## 9.0MHz Tick Rate | ||
| 161 | tick-hz-9_000_000 = [] | ||
| 162 | ## 10.0MHz Tick Rate | ||
| 163 | tick-hz-10_000_000 = [] | ||
| 164 | ## 10.24MHz Tick Rate | ||
| 165 | tick-hz-10_240_000 = [] | ||
| 166 | ## 12.0MHz Tick Rate | ||
| 167 | tick-hz-12_000_000 = [] | ||
| 168 | ## 16.0MHz Tick Rate | ||
| 169 | tick-hz-16_000_000 = [] | ||
| 170 | ## 16.384MHz Tick Rate | ||
| 171 | tick-hz-16_384_000 = [] | ||
| 172 | ## 16.777216MHz Tick Rate | ||
| 173 | tick-hz-16_777_216 = [] | ||
| 174 | ## 18.0MHz Tick Rate | ||
| 175 | tick-hz-18_000_000 = [] | ||
| 176 | ## 20.0MHz Tick Rate | ||
| 177 | tick-hz-20_000_000 = [] | ||
| 178 | ## 20.48MHz Tick Rate | ||
| 179 | tick-hz-20_480_000 = [] | ||
| 180 | ## 24.0MHz Tick Rate | ||
| 181 | tick-hz-24_000_000 = [] | ||
| 182 | ## 30.0MHz Tick Rate | ||
| 183 | tick-hz-30_000_000 = [] | ||
| 184 | ## 32.0MHz Tick Rate | ||
| 185 | tick-hz-32_000_000 = [] | ||
| 186 | ## 32.768MHz Tick Rate | ||
| 187 | tick-hz-32_768_000 = [] | ||
| 188 | ## 36.0MHz Tick Rate | ||
| 189 | tick-hz-36_000_000 = [] | ||
| 190 | ## 40.0MHz Tick Rate | ||
| 191 | tick-hz-40_000_000 = [] | ||
| 192 | ## 40.96MHz Tick Rate | ||
| 193 | tick-hz-40_960_000 = [] | ||
| 194 | ## 48.0MHz Tick Rate | ||
| 195 | tick-hz-48_000_000 = [] | ||
| 196 | ## 50.0MHz Tick Rate | ||
| 197 | tick-hz-50_000_000 = [] | ||
| 198 | ## 60.0MHz Tick Rate | ||
| 199 | tick-hz-60_000_000 = [] | ||
| 200 | ## 64.0MHz Tick Rate | ||
| 201 | tick-hz-64_000_000 = [] | ||
| 202 | ## 65.536MHz Tick Rate | ||
| 203 | tick-hz-65_536_000 = [] | ||
| 204 | ## 70.0MHz Tick Rate | ||
| 205 | tick-hz-70_000_000 = [] | ||
| 206 | ## 72.0MHz Tick Rate | ||
| 207 | tick-hz-72_000_000 = [] | ||
| 208 | ## 80.0MHz Tick Rate | ||
| 209 | tick-hz-80_000_000 = [] | ||
| 210 | ## 81.92MHz Tick Rate | ||
| 211 | tick-hz-81_920_000 = [] | ||
| 212 | ## 90.0MHz Tick Rate | ||
| 213 | tick-hz-90_000_000 = [] | ||
| 214 | ## 96.0MHz Tick Rate | ||
| 215 | tick-hz-96_000_000 = [] | ||
| 216 | ## 100.0MHz Tick Rate | ||
| 217 | tick-hz-100_000_000 = [] | ||
| 218 | ## 110.0MHz Tick Rate | ||
| 219 | tick-hz-110_000_000 = [] | ||
| 220 | ## 120.0MHz Tick Rate | ||
| 221 | tick-hz-120_000_000 = [] | ||
| 222 | ## 128.0MHz Tick Rate | ||
| 223 | tick-hz-128_000_000 = [] | ||
| 224 | ## 130.0MHz Tick Rate | ||
| 225 | tick-hz-130_000_000 = [] | ||
| 226 | ## 131.072MHz Tick Rate | ||
| 227 | tick-hz-131_072_000 = [] | ||
| 228 | ## 140.0MHz Tick Rate | ||
| 229 | tick-hz-140_000_000 = [] | ||
| 230 | ## 144.0MHz Tick Rate | ||
| 231 | tick-hz-144_000_000 = [] | ||
| 232 | ## 150.0MHz Tick Rate | ||
| 233 | tick-hz-150_000_000 = [] | ||
| 234 | ## 160.0MHz Tick Rate | ||
| 235 | tick-hz-160_000_000 = [] | ||
| 236 | ## 163.84MHz Tick Rate | ||
| 237 | tick-hz-163_840_000 = [] | ||
| 238 | ## 170.0MHz Tick Rate | ||
| 239 | tick-hz-170_000_000 = [] | ||
| 240 | ## 180.0MHz Tick Rate | ||
| 241 | tick-hz-180_000_000 = [] | ||
| 242 | ## 190.0MHz Tick Rate | ||
| 243 | tick-hz-190_000_000 = [] | ||
| 244 | ## 192.0MHz Tick Rate | ||
| 245 | tick-hz-192_000_000 = [] | ||
| 246 | ## 200.0MHz Tick Rate | ||
| 247 | tick-hz-200_000_000 = [] | ||
| 248 | ## 210.0MHz Tick Rate | ||
| 249 | tick-hz-210_000_000 = [] | ||
| 250 | ## 220.0MHz Tick Rate | ||
| 251 | tick-hz-220_000_000 = [] | ||
| 252 | ## 230.0MHz Tick Rate | ||
| 253 | tick-hz-230_000_000 = [] | ||
| 254 | ## 240.0MHz Tick Rate | ||
| 255 | tick-hz-240_000_000 = [] | ||
| 256 | ## 250.0MHz Tick Rate | ||
| 257 | tick-hz-250_000_000 = [] | ||
| 258 | ## 256.0MHz Tick Rate | ||
| 259 | tick-hz-256_000_000 = [] | ||
| 260 | ## 260.0MHz Tick Rate | ||
| 261 | tick-hz-260_000_000 = [] | ||
| 262 | ## 262.144MHz Tick Rate | ||
| 263 | tick-hz-262_144_000 = [] | ||
| 264 | ## 270.0MHz Tick Rate | ||
| 265 | tick-hz-270_000_000 = [] | ||
| 266 | ## 280.0MHz Tick Rate | ||
| 267 | tick-hz-280_000_000 = [] | ||
| 268 | ## 288.0MHz Tick Rate | ||
| 269 | tick-hz-288_000_000 = [] | ||
| 270 | ## 290.0MHz Tick Rate | ||
| 271 | tick-hz-290_000_000 = [] | ||
| 272 | ## 300.0MHz Tick Rate | ||
| 273 | tick-hz-300_000_000 = [] | ||
| 274 | ## 320.0MHz Tick Rate | ||
| 275 | tick-hz-320_000_000 = [] | ||
| 276 | ## 327.68MHz Tick Rate | ||
| 277 | tick-hz-327_680_000 = [] | ||
| 278 | ## 340.0MHz Tick Rate | ||
| 279 | tick-hz-340_000_000 = [] | ||
| 280 | ## 360.0MHz Tick Rate | ||
| 281 | tick-hz-360_000_000 = [] | ||
| 282 | ## 380.0MHz Tick Rate | ||
| 283 | tick-hz-380_000_000 = [] | ||
| 284 | ## 384.0MHz Tick Rate | ||
| 285 | tick-hz-384_000_000 = [] | ||
| 286 | ## 400.0MHz Tick Rate | ||
| 287 | tick-hz-400_000_000 = [] | ||
| 288 | ## 420.0MHz Tick Rate | ||
| 289 | tick-hz-420_000_000 = [] | ||
| 290 | ## 440.0MHz Tick Rate | ||
| 291 | tick-hz-440_000_000 = [] | ||
| 292 | ## 460.0MHz Tick Rate | ||
| 293 | tick-hz-460_000_000 = [] | ||
| 294 | ## 480.0MHz Tick Rate | ||
| 295 | tick-hz-480_000_000 = [] | ||
| 296 | ## 500.0MHz Tick Rate | ||
| 297 | tick-hz-500_000_000 = [] | ||
| 298 | ## 512.0MHz Tick Rate | ||
| 299 | tick-hz-512_000_000 = [] | ||
| 300 | ## 520.0MHz Tick Rate | ||
| 301 | tick-hz-520_000_000 = [] | ||
| 302 | ## 524.288MHz Tick Rate | ||
| 303 | tick-hz-524_288_000 = [] | ||
| 304 | ## 540.0MHz Tick Rate | ||
| 305 | tick-hz-540_000_000 = [] | ||
| 306 | ## 560.0MHz Tick Rate | ||
| 307 | tick-hz-560_000_000 = [] | ||
| 308 | ## 576.0MHz Tick Rate | ||
| 309 | tick-hz-576_000_000 = [] | ||
| 310 | ## 580.0MHz Tick Rate | ||
| 311 | tick-hz-580_000_000 = [] | ||
| 312 | ## 600.0MHz Tick Rate | ||
| 313 | tick-hz-600_000_000 = [] | ||
| 314 | ## 620.0MHz Tick Rate | ||
| 315 | tick-hz-620_000_000 = [] | ||
| 316 | ## 640.0MHz Tick Rate | ||
| 317 | tick-hz-640_000_000 = [] | ||
| 318 | ## 655.36MHz Tick Rate | ||
| 319 | tick-hz-655_360_000 = [] | ||
| 320 | ## 660.0MHz Tick Rate | ||
| 321 | tick-hz-660_000_000 = [] | ||
| 322 | ## 680.0MHz Tick Rate | ||
| 323 | tick-hz-680_000_000 = [] | ||
| 324 | ## 700.0MHz Tick Rate | ||
| 325 | tick-hz-700_000_000 = [] | ||
| 326 | ## 720.0MHz Tick Rate | ||
| 327 | tick-hz-720_000_000 = [] | ||
| 328 | ## 740.0MHz Tick Rate | ||
| 329 | tick-hz-740_000_000 = [] | ||
| 330 | ## 760.0MHz Tick Rate | ||
| 331 | tick-hz-760_000_000 = [] | ||
| 332 | ## 768.0MHz Tick Rate | ||
| 333 | tick-hz-768_000_000 = [] | ||
| 334 | ## 780.0MHz Tick Rate | ||
| 335 | tick-hz-780_000_000 = [] | ||
| 336 | ## 800.0MHz Tick Rate | ||
| 337 | tick-hz-800_000_000 = [] | ||
| 338 | ## 820.0MHz Tick Rate | ||
| 339 | tick-hz-820_000_000 = [] | ||
| 340 | ## 840.0MHz Tick Rate | ||
| 341 | tick-hz-840_000_000 = [] | ||
| 342 | ## 860.0MHz Tick Rate | ||
| 343 | tick-hz-860_000_000 = [] | ||
| 344 | ## 880.0MHz Tick Rate | ||
| 345 | tick-hz-880_000_000 = [] | ||
| 346 | ## 900.0MHz Tick Rate | ||
| 347 | tick-hz-900_000_000 = [] | ||
| 348 | ## 920.0MHz Tick Rate | ||
| 349 | tick-hz-920_000_000 = [] | ||
| 350 | ## 940.0MHz Tick Rate | ||
| 351 | tick-hz-940_000_000 = [] | ||
| 352 | ## 960.0MHz Tick Rate | ||
| 353 | tick-hz-960_000_000 = [] | ||
| 354 | ## 980.0MHz Tick Rate | ||
| 355 | tick-hz-980_000_000 = [] | ||
| 356 | ## 1.0GHz Tick Rate | ||
| 357 | tick-hz-1_000_000_000 = [] | ||
| 358 | ## 1.31072GHz Tick Rate | ||
| 359 | tick-hz-1_310_720_000 = [] | ||
| 360 | ## 2.62144GHz Tick Rate | ||
| 361 | tick-hz-2_621_440_000 = [] | ||
| 362 | ## 5.24288GHz Tick Rate | ||
| 363 | tick-hz-5_242_880_000 = [] | ||
| 364 | # END TICKS | ||
| 365 | |||
| 366 | #! </details> | ||
| 367 | |||
| 368 | [dependencies] | ||
| 369 | defmt = { version = "0.3", optional = true } | ||
| 370 | log = { version = "0.4.14", optional = true } | ||
| 371 | |||
| 372 | embedded-hal-02 = { package = "embedded-hal", version = "0.2.6" } | ||
| 373 | embedded-hal-1 = { package = "embedded-hal", version = "1.0" } | ||
| 374 | embedded-hal-async = { version = "1.0" } | ||
| 375 | |||
| 376 | futures-util = { version = "0.3.17", default-features = false } | ||
| 377 | critical-section = "1.1" | ||
| 378 | cfg-if = "1.0.0" | ||
| 379 | heapless = "0.8" | ||
| 380 | |||
| 381 | document-features = "0.2.7" | ||
| 382 | |||
| 383 | # WASM dependencies | ||
| 384 | wasm-bindgen = { version = "0.2.81", optional = true } | ||
| 385 | js-sys = { version = "0.3", optional = true } | ||
| 386 | wasm-timer = { version = "0.2.5", optional = true } | ||
| 387 | |||
| 388 | [dev-dependencies] | ||
| 389 | serial_test = "0.9" | ||
| 390 | critical-section = { version = "1.1", features = ["std"] } | ||
| 391 | embassy-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 | |||
| 4 | This crate contains the driver trait necessary for adding [`embassy-time`](https://crates.io/crates/embassy-time) support | ||
| 5 | for a new hardware platform. | ||
| 6 | |||
| 7 | If you want to *use* `embassy-time` with already made drivers, you should depend on the main `embassy-time` crate, not on this crate. | ||
| 8 | |||
| 9 | If you are writing a driver, you should depend only on this crate, not on the main `embassy-time` crate. | ||
| 10 | This will allow your driver to continue working for newer `embassy-time` major versions, without needing an update, | ||
| 11 | if 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. | ||
| 16 | Only one driver can be active in a program. | ||
| 17 | |||
| 18 | All methods and structs transparently call into the active driver. This makes it | ||
| 19 | possible for libraries to use `embassy-time` in a driver-agnostic way without | ||
| 20 | requiring 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 | ||
| 31 | things = [(hz, f'tick-hz-{hz:_}') for hz in ticks] | ||
| 32 | |||
| 33 | SEPARATOR_START = '# BEGIN TICKS\n' | 31 | SEPARATOR_START = '# BEGIN TICKS\n' |
| 34 | SEPARATOR_END = '# END TICKS\n' | 32 | SEPARATOR_END = '# END TICKS\n' |
| 35 | HELP = '# Generated by gen_tick.py. DO NOT EDIT.\n' | 33 | HELP = '# Generated by gen_tick.py. DO NOT EDIT.\n' |
| 36 | with open('Cargo.toml', 'r') as f: | ||
| 37 | data = f.read() | ||
| 38 | before, data = data.split(SEPARATOR_START, maxsplit=1) | ||
| 39 | _, after = data.split(SEPARATOR_END, maxsplit=1) | ||
| 40 | 34 | ||
| 41 | data = before + SEPARATOR_START + HELP | 35 | feats_time = '' |
| 42 | for freq, feature in things: | 36 | feats_driver = '' |
| 37 | for 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" |
| 54 | data += SEPARATOR_END + after | 50 | feats_driver += f"## {freq_human} Tick Rate\n" |
| 51 | feats_driver += f"{feature} = []\n" | ||
| 55 | 52 | ||
| 53 | with open('Cargo.toml', 'r') as f: | ||
| 54 | data = f.read() | ||
| 55 | before, data = data.split(SEPARATOR_START, maxsplit=1) | ||
| 56 | _, after = data.split(SEPARATOR_END, maxsplit=1) | ||
| 56 | with open('Cargo.toml', 'w') as f: | 57 | with open('Cargo.toml', 'w') as f: |
| 57 | f.write(data) | 58 | f.write(before + SEPARATOR_START + HELP + feats_driver + SEPARATOR_END + after) |
| 59 | |||
| 60 | with open('../embassy-time/Cargo.toml', 'r') as f: | ||
| 61 | data = f.read() | ||
| 62 | before, data = data.split(SEPARATOR_START, maxsplit=1) | ||
| 63 | _, after = data.split(SEPARATOR_END, maxsplit=1) | ||
| 64 | with 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 | |||
| 72 | mod tick; | ||
| 73 | |||
| 74 | /// Ticks per second of the global timebase. | ||
| 75 | /// | ||
| 76 | /// This value is specified by the [`tick-*` Cargo features](crate#tick-rate) | ||
| 77 | pub 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)] |
| 67 | pub struct AlarmHandle { | 81 | pub 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. | ||
| 20 | links = "embassy-time" | ||
| 21 | |||
| 22 | [package.metadata.embassy_docs] | 16 | [package.metadata.embassy_docs] |
| 23 | src_base = "https://github.com/embassy-rs/embassy/blob/embassy-time-v$VERSION/embassy-time/src/" | 17 | src_base = "https://github.com/embassy-rs/embassy/blob/embassy-time-v$VERSION/embassy-time/src/" |
| 24 | src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-time/src/" | 18 | src_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 |
| 84 | tick-hz-1 = [] | 78 | tick-hz-1 = ["embassy-time-driver/tick-hz-1"] |
| 85 | ## 2Hz Tick Rate | 79 | ## 2Hz Tick Rate |
| 86 | tick-hz-2 = [] | 80 | tick-hz-2 = ["embassy-time-driver/tick-hz-2"] |
| 87 | ## 4Hz Tick Rate | 81 | ## 4Hz Tick Rate |
| 88 | tick-hz-4 = [] | 82 | tick-hz-4 = ["embassy-time-driver/tick-hz-4"] |
| 89 | ## 8Hz Tick Rate | 83 | ## 8Hz Tick Rate |
| 90 | tick-hz-8 = [] | 84 | tick-hz-8 = ["embassy-time-driver/tick-hz-8"] |
| 91 | ## 10Hz Tick Rate | 85 | ## 10Hz Tick Rate |
| 92 | tick-hz-10 = [] | 86 | tick-hz-10 = ["embassy-time-driver/tick-hz-10"] |
| 93 | ## 16Hz Tick Rate | 87 | ## 16Hz Tick Rate |
| 94 | tick-hz-16 = [] | 88 | tick-hz-16 = ["embassy-time-driver/tick-hz-16"] |
| 95 | ## 32Hz Tick Rate | 89 | ## 32Hz Tick Rate |
| 96 | tick-hz-32 = [] | 90 | tick-hz-32 = ["embassy-time-driver/tick-hz-32"] |
| 97 | ## 64Hz Tick Rate | 91 | ## 64Hz Tick Rate |
| 98 | tick-hz-64 = [] | 92 | tick-hz-64 = ["embassy-time-driver/tick-hz-64"] |
| 99 | ## 100Hz Tick Rate | 93 | ## 100Hz Tick Rate |
| 100 | tick-hz-100 = [] | 94 | tick-hz-100 = ["embassy-time-driver/tick-hz-100"] |
| 101 | ## 128Hz Tick Rate | 95 | ## 128Hz Tick Rate |
| 102 | tick-hz-128 = [] | 96 | tick-hz-128 = ["embassy-time-driver/tick-hz-128"] |
| 103 | ## 256Hz Tick Rate | 97 | ## 256Hz Tick Rate |
| 104 | tick-hz-256 = [] | 98 | tick-hz-256 = ["embassy-time-driver/tick-hz-256"] |
| 105 | ## 512Hz Tick Rate | 99 | ## 512Hz Tick Rate |
| 106 | tick-hz-512 = [] | 100 | tick-hz-512 = ["embassy-time-driver/tick-hz-512"] |
| 107 | ## 1.0kHz Tick Rate | 101 | ## 1.0kHz Tick Rate |
| 108 | tick-hz-1_000 = [] | 102 | tick-hz-1_000 = ["embassy-time-driver/tick-hz-1_000"] |
| 109 | ## 1.024kHz Tick Rate | 103 | ## 1.024kHz Tick Rate |
| 110 | tick-hz-1_024 = [] | 104 | tick-hz-1_024 = ["embassy-time-driver/tick-hz-1_024"] |
| 111 | ## 2.0kHz Tick Rate | 105 | ## 2.0kHz Tick Rate |
| 112 | tick-hz-2_000 = [] | 106 | tick-hz-2_000 = ["embassy-time-driver/tick-hz-2_000"] |
| 113 | ## 2.048kHz Tick Rate | 107 | ## 2.048kHz Tick Rate |
| 114 | tick-hz-2_048 = [] | 108 | tick-hz-2_048 = ["embassy-time-driver/tick-hz-2_048"] |
| 115 | ## 4.0kHz Tick Rate | 109 | ## 4.0kHz Tick Rate |
| 116 | tick-hz-4_000 = [] | 110 | tick-hz-4_000 = ["embassy-time-driver/tick-hz-4_000"] |
| 117 | ## 4.096kHz Tick Rate | 111 | ## 4.096kHz Tick Rate |
| 118 | tick-hz-4_096 = [] | 112 | tick-hz-4_096 = ["embassy-time-driver/tick-hz-4_096"] |
| 119 | ## 8.0kHz Tick Rate | 113 | ## 8.0kHz Tick Rate |
| 120 | tick-hz-8_000 = [] | 114 | tick-hz-8_000 = ["embassy-time-driver/tick-hz-8_000"] |
| 121 | ## 8.192kHz Tick Rate | 115 | ## 8.192kHz Tick Rate |
| 122 | tick-hz-8_192 = [] | 116 | tick-hz-8_192 = ["embassy-time-driver/tick-hz-8_192"] |
| 123 | ## 10.0kHz Tick Rate | 117 | ## 10.0kHz Tick Rate |
| 124 | tick-hz-10_000 = [] | 118 | tick-hz-10_000 = ["embassy-time-driver/tick-hz-10_000"] |
| 125 | ## 16.0kHz Tick Rate | 119 | ## 16.0kHz Tick Rate |
| 126 | tick-hz-16_000 = [] | 120 | tick-hz-16_000 = ["embassy-time-driver/tick-hz-16_000"] |
| 127 | ## 16.384kHz Tick Rate | 121 | ## 16.384kHz Tick Rate |
| 128 | tick-hz-16_384 = [] | 122 | tick-hz-16_384 = ["embassy-time-driver/tick-hz-16_384"] |
| 129 | ## 20.0kHz Tick Rate | 123 | ## 20.0kHz Tick Rate |
| 130 | tick-hz-20_000 = [] | 124 | tick-hz-20_000 = ["embassy-time-driver/tick-hz-20_000"] |
| 131 | ## 32.0kHz Tick Rate | 125 | ## 32.0kHz Tick Rate |
| 132 | tick-hz-32_000 = [] | 126 | tick-hz-32_000 = ["embassy-time-driver/tick-hz-32_000"] |
| 133 | ## 32.768kHz Tick Rate | 127 | ## 32.768kHz Tick Rate |
| 134 | tick-hz-32_768 = [] | 128 | tick-hz-32_768 = ["embassy-time-driver/tick-hz-32_768"] |
| 135 | ## 40.0kHz Tick Rate | 129 | ## 40.0kHz Tick Rate |
| 136 | tick-hz-40_000 = [] | 130 | tick-hz-40_000 = ["embassy-time-driver/tick-hz-40_000"] |
| 137 | ## 64.0kHz Tick Rate | 131 | ## 64.0kHz Tick Rate |
| 138 | tick-hz-64_000 = [] | 132 | tick-hz-64_000 = ["embassy-time-driver/tick-hz-64_000"] |
| 139 | ## 65.536kHz Tick Rate | 133 | ## 65.536kHz Tick Rate |
| 140 | tick-hz-65_536 = [] | 134 | tick-hz-65_536 = ["embassy-time-driver/tick-hz-65_536"] |
| 141 | ## 80.0kHz Tick Rate | 135 | ## 80.0kHz Tick Rate |
| 142 | tick-hz-80_000 = [] | 136 | tick-hz-80_000 = ["embassy-time-driver/tick-hz-80_000"] |
| 143 | ## 100.0kHz Tick Rate | 137 | ## 100.0kHz Tick Rate |
| 144 | tick-hz-100_000 = [] | 138 | tick-hz-100_000 = ["embassy-time-driver/tick-hz-100_000"] |
| 145 | ## 128.0kHz Tick Rate | 139 | ## 128.0kHz Tick Rate |
| 146 | tick-hz-128_000 = [] | 140 | tick-hz-128_000 = ["embassy-time-driver/tick-hz-128_000"] |
| 147 | ## 131.072kHz Tick Rate | 141 | ## 131.072kHz Tick Rate |
| 148 | tick-hz-131_072 = [] | 142 | tick-hz-131_072 = ["embassy-time-driver/tick-hz-131_072"] |
| 149 | ## 160.0kHz Tick Rate | 143 | ## 160.0kHz Tick Rate |
| 150 | tick-hz-160_000 = [] | 144 | tick-hz-160_000 = ["embassy-time-driver/tick-hz-160_000"] |
| 151 | ## 256.0kHz Tick Rate | 145 | ## 256.0kHz Tick Rate |
| 152 | tick-hz-256_000 = [] | 146 | tick-hz-256_000 = ["embassy-time-driver/tick-hz-256_000"] |
| 153 | ## 262.144kHz Tick Rate | 147 | ## 262.144kHz Tick Rate |
| 154 | tick-hz-262_144 = [] | 148 | tick-hz-262_144 = ["embassy-time-driver/tick-hz-262_144"] |
| 155 | ## 320.0kHz Tick Rate | 149 | ## 320.0kHz Tick Rate |
| 156 | tick-hz-320_000 = [] | 150 | tick-hz-320_000 = ["embassy-time-driver/tick-hz-320_000"] |
| 157 | ## 512.0kHz Tick Rate | 151 | ## 512.0kHz Tick Rate |
| 158 | tick-hz-512_000 = [] | 152 | tick-hz-512_000 = ["embassy-time-driver/tick-hz-512_000"] |
| 159 | ## 524.288kHz Tick Rate | 153 | ## 524.288kHz Tick Rate |
| 160 | tick-hz-524_288 = [] | 154 | tick-hz-524_288 = ["embassy-time-driver/tick-hz-524_288"] |
| 161 | ## 640.0kHz Tick Rate | 155 | ## 640.0kHz Tick Rate |
| 162 | tick-hz-640_000 = [] | 156 | tick-hz-640_000 = ["embassy-time-driver/tick-hz-640_000"] |
| 163 | ## 1.0MHz Tick Rate | 157 | ## 1.0MHz Tick Rate |
| 164 | tick-hz-1_000_000 = [] | 158 | tick-hz-1_000_000 = ["embassy-time-driver/tick-hz-1_000_000"] |
| 165 | ## 1.024MHz Tick Rate | 159 | ## 1.024MHz Tick Rate |
| 166 | tick-hz-1_024_000 = [] | 160 | tick-hz-1_024_000 = ["embassy-time-driver/tick-hz-1_024_000"] |
| 167 | ## 1.048576MHz Tick Rate | 161 | ## 1.048576MHz Tick Rate |
| 168 | tick-hz-1_048_576 = [] | 162 | tick-hz-1_048_576 = ["embassy-time-driver/tick-hz-1_048_576"] |
| 169 | ## 1.28MHz Tick Rate | 163 | ## 1.28MHz Tick Rate |
| 170 | tick-hz-1_280_000 = [] | 164 | tick-hz-1_280_000 = ["embassy-time-driver/tick-hz-1_280_000"] |
| 171 | ## 2.0MHz Tick Rate | 165 | ## 2.0MHz Tick Rate |
| 172 | tick-hz-2_000_000 = [] | 166 | tick-hz-2_000_000 = ["embassy-time-driver/tick-hz-2_000_000"] |
| 173 | ## 2.048MHz Tick Rate | 167 | ## 2.048MHz Tick Rate |
| 174 | tick-hz-2_048_000 = [] | 168 | tick-hz-2_048_000 = ["embassy-time-driver/tick-hz-2_048_000"] |
| 175 | ## 2.097152MHz Tick Rate | 169 | ## 2.097152MHz Tick Rate |
| 176 | tick-hz-2_097_152 = [] | 170 | tick-hz-2_097_152 = ["embassy-time-driver/tick-hz-2_097_152"] |
| 177 | ## 2.56MHz Tick Rate | 171 | ## 2.56MHz Tick Rate |
| 178 | tick-hz-2_560_000 = [] | 172 | tick-hz-2_560_000 = ["embassy-time-driver/tick-hz-2_560_000"] |
| 179 | ## 3.0MHz Tick Rate | 173 | ## 3.0MHz Tick Rate |
| 180 | tick-hz-3_000_000 = [] | 174 | tick-hz-3_000_000 = ["embassy-time-driver/tick-hz-3_000_000"] |
| 181 | ## 4.0MHz Tick Rate | 175 | ## 4.0MHz Tick Rate |
| 182 | tick-hz-4_000_000 = [] | 176 | tick-hz-4_000_000 = ["embassy-time-driver/tick-hz-4_000_000"] |
| 183 | ## 4.096MHz Tick Rate | 177 | ## 4.096MHz Tick Rate |
| 184 | tick-hz-4_096_000 = [] | 178 | tick-hz-4_096_000 = ["embassy-time-driver/tick-hz-4_096_000"] |
| 185 | ## 4.194304MHz Tick Rate | 179 | ## 4.194304MHz Tick Rate |
| 186 | tick-hz-4_194_304 = [] | 180 | tick-hz-4_194_304 = ["embassy-time-driver/tick-hz-4_194_304"] |
| 187 | ## 5.12MHz Tick Rate | 181 | ## 5.12MHz Tick Rate |
| 188 | tick-hz-5_120_000 = [] | 182 | tick-hz-5_120_000 = ["embassy-time-driver/tick-hz-5_120_000"] |
| 189 | ## 6.0MHz Tick Rate | 183 | ## 6.0MHz Tick Rate |
| 190 | tick-hz-6_000_000 = [] | 184 | tick-hz-6_000_000 = ["embassy-time-driver/tick-hz-6_000_000"] |
| 191 | ## 8.0MHz Tick Rate | 185 | ## 8.0MHz Tick Rate |
| 192 | tick-hz-8_000_000 = [] | 186 | tick-hz-8_000_000 = ["embassy-time-driver/tick-hz-8_000_000"] |
| 193 | ## 8.192MHz Tick Rate | 187 | ## 8.192MHz Tick Rate |
| 194 | tick-hz-8_192_000 = [] | 188 | tick-hz-8_192_000 = ["embassy-time-driver/tick-hz-8_192_000"] |
| 195 | ## 8.388608MHz Tick Rate | 189 | ## 8.388608MHz Tick Rate |
| 196 | tick-hz-8_388_608 = [] | 190 | tick-hz-8_388_608 = ["embassy-time-driver/tick-hz-8_388_608"] |
| 197 | ## 9.0MHz Tick Rate | 191 | ## 9.0MHz Tick Rate |
| 198 | tick-hz-9_000_000 = [] | 192 | tick-hz-9_000_000 = ["embassy-time-driver/tick-hz-9_000_000"] |
| 199 | ## 10.0MHz Tick Rate | 193 | ## 10.0MHz Tick Rate |
| 200 | tick-hz-10_000_000 = [] | 194 | tick-hz-10_000_000 = ["embassy-time-driver/tick-hz-10_000_000"] |
| 201 | ## 10.24MHz Tick Rate | 195 | ## 10.24MHz Tick Rate |
| 202 | tick-hz-10_240_000 = [] | 196 | tick-hz-10_240_000 = ["embassy-time-driver/tick-hz-10_240_000"] |
| 203 | ## 12.0MHz Tick Rate | 197 | ## 12.0MHz Tick Rate |
| 204 | tick-hz-12_000_000 = [] | 198 | tick-hz-12_000_000 = ["embassy-time-driver/tick-hz-12_000_000"] |
| 205 | ## 16.0MHz Tick Rate | 199 | ## 16.0MHz Tick Rate |
| 206 | tick-hz-16_000_000 = [] | 200 | tick-hz-16_000_000 = ["embassy-time-driver/tick-hz-16_000_000"] |
| 207 | ## 16.384MHz Tick Rate | 201 | ## 16.384MHz Tick Rate |
| 208 | tick-hz-16_384_000 = [] | 202 | tick-hz-16_384_000 = ["embassy-time-driver/tick-hz-16_384_000"] |
| 209 | ## 16.777216MHz Tick Rate | 203 | ## 16.777216MHz Tick Rate |
| 210 | tick-hz-16_777_216 = [] | 204 | tick-hz-16_777_216 = ["embassy-time-driver/tick-hz-16_777_216"] |
| 211 | ## 18.0MHz Tick Rate | 205 | ## 18.0MHz Tick Rate |
| 212 | tick-hz-18_000_000 = [] | 206 | tick-hz-18_000_000 = ["embassy-time-driver/tick-hz-18_000_000"] |
| 213 | ## 20.0MHz Tick Rate | 207 | ## 20.0MHz Tick Rate |
| 214 | tick-hz-20_000_000 = [] | 208 | tick-hz-20_000_000 = ["embassy-time-driver/tick-hz-20_000_000"] |
| 215 | ## 20.48MHz Tick Rate | 209 | ## 20.48MHz Tick Rate |
| 216 | tick-hz-20_480_000 = [] | 210 | tick-hz-20_480_000 = ["embassy-time-driver/tick-hz-20_480_000"] |
| 217 | ## 24.0MHz Tick Rate | 211 | ## 24.0MHz Tick Rate |
| 218 | tick-hz-24_000_000 = [] | 212 | tick-hz-24_000_000 = ["embassy-time-driver/tick-hz-24_000_000"] |
| 219 | ## 30.0MHz Tick Rate | 213 | ## 30.0MHz Tick Rate |
| 220 | tick-hz-30_000_000 = [] | 214 | tick-hz-30_000_000 = ["embassy-time-driver/tick-hz-30_000_000"] |
| 221 | ## 32.0MHz Tick Rate | 215 | ## 32.0MHz Tick Rate |
| 222 | tick-hz-32_000_000 = [] | 216 | tick-hz-32_000_000 = ["embassy-time-driver/tick-hz-32_000_000"] |
| 223 | ## 32.768MHz Tick Rate | 217 | ## 32.768MHz Tick Rate |
| 224 | tick-hz-32_768_000 = [] | 218 | tick-hz-32_768_000 = ["embassy-time-driver/tick-hz-32_768_000"] |
| 225 | ## 36.0MHz Tick Rate | 219 | ## 36.0MHz Tick Rate |
| 226 | tick-hz-36_000_000 = [] | 220 | tick-hz-36_000_000 = ["embassy-time-driver/tick-hz-36_000_000"] |
| 227 | ## 40.0MHz Tick Rate | 221 | ## 40.0MHz Tick Rate |
| 228 | tick-hz-40_000_000 = [] | 222 | tick-hz-40_000_000 = ["embassy-time-driver/tick-hz-40_000_000"] |
| 229 | ## 40.96MHz Tick Rate | 223 | ## 40.96MHz Tick Rate |
| 230 | tick-hz-40_960_000 = [] | 224 | tick-hz-40_960_000 = ["embassy-time-driver/tick-hz-40_960_000"] |
| 231 | ## 48.0MHz Tick Rate | 225 | ## 48.0MHz Tick Rate |
| 232 | tick-hz-48_000_000 = [] | 226 | tick-hz-48_000_000 = ["embassy-time-driver/tick-hz-48_000_000"] |
| 233 | ## 50.0MHz Tick Rate | 227 | ## 50.0MHz Tick Rate |
| 234 | tick-hz-50_000_000 = [] | 228 | tick-hz-50_000_000 = ["embassy-time-driver/tick-hz-50_000_000"] |
| 235 | ## 60.0MHz Tick Rate | 229 | ## 60.0MHz Tick Rate |
| 236 | tick-hz-60_000_000 = [] | 230 | tick-hz-60_000_000 = ["embassy-time-driver/tick-hz-60_000_000"] |
| 237 | ## 64.0MHz Tick Rate | 231 | ## 64.0MHz Tick Rate |
| 238 | tick-hz-64_000_000 = [] | 232 | tick-hz-64_000_000 = ["embassy-time-driver/tick-hz-64_000_000"] |
| 239 | ## 65.536MHz Tick Rate | 233 | ## 65.536MHz Tick Rate |
| 240 | tick-hz-65_536_000 = [] | 234 | tick-hz-65_536_000 = ["embassy-time-driver/tick-hz-65_536_000"] |
| 241 | ## 70.0MHz Tick Rate | 235 | ## 70.0MHz Tick Rate |
| 242 | tick-hz-70_000_000 = [] | 236 | tick-hz-70_000_000 = ["embassy-time-driver/tick-hz-70_000_000"] |
| 243 | ## 72.0MHz Tick Rate | 237 | ## 72.0MHz Tick Rate |
| 244 | tick-hz-72_000_000 = [] | 238 | tick-hz-72_000_000 = ["embassy-time-driver/tick-hz-72_000_000"] |
| 245 | ## 80.0MHz Tick Rate | 239 | ## 80.0MHz Tick Rate |
| 246 | tick-hz-80_000_000 = [] | 240 | tick-hz-80_000_000 = ["embassy-time-driver/tick-hz-80_000_000"] |
| 247 | ## 81.92MHz Tick Rate | 241 | ## 81.92MHz Tick Rate |
| 248 | tick-hz-81_920_000 = [] | 242 | tick-hz-81_920_000 = ["embassy-time-driver/tick-hz-81_920_000"] |
| 249 | ## 90.0MHz Tick Rate | 243 | ## 90.0MHz Tick Rate |
| 250 | tick-hz-90_000_000 = [] | 244 | tick-hz-90_000_000 = ["embassy-time-driver/tick-hz-90_000_000"] |
| 251 | ## 96.0MHz Tick Rate | 245 | ## 96.0MHz Tick Rate |
| 252 | tick-hz-96_000_000 = [] | 246 | tick-hz-96_000_000 = ["embassy-time-driver/tick-hz-96_000_000"] |
| 253 | ## 100.0MHz Tick Rate | 247 | ## 100.0MHz Tick Rate |
| 254 | tick-hz-100_000_000 = [] | 248 | tick-hz-100_000_000 = ["embassy-time-driver/tick-hz-100_000_000"] |
| 255 | ## 110.0MHz Tick Rate | 249 | ## 110.0MHz Tick Rate |
| 256 | tick-hz-110_000_000 = [] | 250 | tick-hz-110_000_000 = ["embassy-time-driver/tick-hz-110_000_000"] |
| 257 | ## 120.0MHz Tick Rate | 251 | ## 120.0MHz Tick Rate |
| 258 | tick-hz-120_000_000 = [] | 252 | tick-hz-120_000_000 = ["embassy-time-driver/tick-hz-120_000_000"] |
| 259 | ## 128.0MHz Tick Rate | 253 | ## 128.0MHz Tick Rate |
| 260 | tick-hz-128_000_000 = [] | 254 | tick-hz-128_000_000 = ["embassy-time-driver/tick-hz-128_000_000"] |
| 261 | ## 130.0MHz Tick Rate | 255 | ## 130.0MHz Tick Rate |
| 262 | tick-hz-130_000_000 = [] | 256 | tick-hz-130_000_000 = ["embassy-time-driver/tick-hz-130_000_000"] |
| 263 | ## 131.072MHz Tick Rate | 257 | ## 131.072MHz Tick Rate |
| 264 | tick-hz-131_072_000 = [] | 258 | tick-hz-131_072_000 = ["embassy-time-driver/tick-hz-131_072_000"] |
| 265 | ## 140.0MHz Tick Rate | 259 | ## 140.0MHz Tick Rate |
| 266 | tick-hz-140_000_000 = [] | 260 | tick-hz-140_000_000 = ["embassy-time-driver/tick-hz-140_000_000"] |
| 267 | ## 144.0MHz Tick Rate | 261 | ## 144.0MHz Tick Rate |
| 268 | tick-hz-144_000_000 = [] | 262 | tick-hz-144_000_000 = ["embassy-time-driver/tick-hz-144_000_000"] |
| 269 | ## 150.0MHz Tick Rate | 263 | ## 150.0MHz Tick Rate |
| 270 | tick-hz-150_000_000 = [] | 264 | tick-hz-150_000_000 = ["embassy-time-driver/tick-hz-150_000_000"] |
| 271 | ## 160.0MHz Tick Rate | 265 | ## 160.0MHz Tick Rate |
| 272 | tick-hz-160_000_000 = [] | 266 | tick-hz-160_000_000 = ["embassy-time-driver/tick-hz-160_000_000"] |
| 273 | ## 163.84MHz Tick Rate | 267 | ## 163.84MHz Tick Rate |
| 274 | tick-hz-163_840_000 = [] | 268 | tick-hz-163_840_000 = ["embassy-time-driver/tick-hz-163_840_000"] |
| 275 | ## 170.0MHz Tick Rate | 269 | ## 170.0MHz Tick Rate |
| 276 | tick-hz-170_000_000 = [] | 270 | tick-hz-170_000_000 = ["embassy-time-driver/tick-hz-170_000_000"] |
| 277 | ## 180.0MHz Tick Rate | 271 | ## 180.0MHz Tick Rate |
| 278 | tick-hz-180_000_000 = [] | 272 | tick-hz-180_000_000 = ["embassy-time-driver/tick-hz-180_000_000"] |
| 279 | ## 190.0MHz Tick Rate | 273 | ## 190.0MHz Tick Rate |
| 280 | tick-hz-190_000_000 = [] | 274 | tick-hz-190_000_000 = ["embassy-time-driver/tick-hz-190_000_000"] |
| 281 | ## 192.0MHz Tick Rate | 275 | ## 192.0MHz Tick Rate |
| 282 | tick-hz-192_000_000 = [] | 276 | tick-hz-192_000_000 = ["embassy-time-driver/tick-hz-192_000_000"] |
| 283 | ## 200.0MHz Tick Rate | 277 | ## 200.0MHz Tick Rate |
| 284 | tick-hz-200_000_000 = [] | 278 | tick-hz-200_000_000 = ["embassy-time-driver/tick-hz-200_000_000"] |
| 285 | ## 210.0MHz Tick Rate | 279 | ## 210.0MHz Tick Rate |
| 286 | tick-hz-210_000_000 = [] | 280 | tick-hz-210_000_000 = ["embassy-time-driver/tick-hz-210_000_000"] |
| 287 | ## 220.0MHz Tick Rate | 281 | ## 220.0MHz Tick Rate |
| 288 | tick-hz-220_000_000 = [] | 282 | tick-hz-220_000_000 = ["embassy-time-driver/tick-hz-220_000_000"] |
| 289 | ## 230.0MHz Tick Rate | 283 | ## 230.0MHz Tick Rate |
| 290 | tick-hz-230_000_000 = [] | 284 | tick-hz-230_000_000 = ["embassy-time-driver/tick-hz-230_000_000"] |
| 291 | ## 240.0MHz Tick Rate | 285 | ## 240.0MHz Tick Rate |
| 292 | tick-hz-240_000_000 = [] | 286 | tick-hz-240_000_000 = ["embassy-time-driver/tick-hz-240_000_000"] |
| 293 | ## 250.0MHz Tick Rate | 287 | ## 250.0MHz Tick Rate |
| 294 | tick-hz-250_000_000 = [] | 288 | tick-hz-250_000_000 = ["embassy-time-driver/tick-hz-250_000_000"] |
| 295 | ## 256.0MHz Tick Rate | 289 | ## 256.0MHz Tick Rate |
| 296 | tick-hz-256_000_000 = [] | 290 | tick-hz-256_000_000 = ["embassy-time-driver/tick-hz-256_000_000"] |
| 297 | ## 260.0MHz Tick Rate | 291 | ## 260.0MHz Tick Rate |
| 298 | tick-hz-260_000_000 = [] | 292 | tick-hz-260_000_000 = ["embassy-time-driver/tick-hz-260_000_000"] |
| 299 | ## 262.144MHz Tick Rate | 293 | ## 262.144MHz Tick Rate |
| 300 | tick-hz-262_144_000 = [] | 294 | tick-hz-262_144_000 = ["embassy-time-driver/tick-hz-262_144_000"] |
| 301 | ## 270.0MHz Tick Rate | 295 | ## 270.0MHz Tick Rate |
| 302 | tick-hz-270_000_000 = [] | 296 | tick-hz-270_000_000 = ["embassy-time-driver/tick-hz-270_000_000"] |
| 303 | ## 280.0MHz Tick Rate | 297 | ## 280.0MHz Tick Rate |
| 304 | tick-hz-280_000_000 = [] | 298 | tick-hz-280_000_000 = ["embassy-time-driver/tick-hz-280_000_000"] |
| 305 | ## 288.0MHz Tick Rate | 299 | ## 288.0MHz Tick Rate |
| 306 | tick-hz-288_000_000 = [] | 300 | tick-hz-288_000_000 = ["embassy-time-driver/tick-hz-288_000_000"] |
| 307 | ## 290.0MHz Tick Rate | 301 | ## 290.0MHz Tick Rate |
| 308 | tick-hz-290_000_000 = [] | 302 | tick-hz-290_000_000 = ["embassy-time-driver/tick-hz-290_000_000"] |
| 309 | ## 300.0MHz Tick Rate | 303 | ## 300.0MHz Tick Rate |
| 310 | tick-hz-300_000_000 = [] | 304 | tick-hz-300_000_000 = ["embassy-time-driver/tick-hz-300_000_000"] |
| 311 | ## 320.0MHz Tick Rate | 305 | ## 320.0MHz Tick Rate |
| 312 | tick-hz-320_000_000 = [] | 306 | tick-hz-320_000_000 = ["embassy-time-driver/tick-hz-320_000_000"] |
| 313 | ## 327.68MHz Tick Rate | 307 | ## 327.68MHz Tick Rate |
| 314 | tick-hz-327_680_000 = [] | 308 | tick-hz-327_680_000 = ["embassy-time-driver/tick-hz-327_680_000"] |
| 315 | ## 340.0MHz Tick Rate | 309 | ## 340.0MHz Tick Rate |
| 316 | tick-hz-340_000_000 = [] | 310 | tick-hz-340_000_000 = ["embassy-time-driver/tick-hz-340_000_000"] |
| 317 | ## 360.0MHz Tick Rate | 311 | ## 360.0MHz Tick Rate |
| 318 | tick-hz-360_000_000 = [] | 312 | tick-hz-360_000_000 = ["embassy-time-driver/tick-hz-360_000_000"] |
| 319 | ## 380.0MHz Tick Rate | 313 | ## 380.0MHz Tick Rate |
| 320 | tick-hz-380_000_000 = [] | 314 | tick-hz-380_000_000 = ["embassy-time-driver/tick-hz-380_000_000"] |
| 321 | ## 384.0MHz Tick Rate | 315 | ## 384.0MHz Tick Rate |
| 322 | tick-hz-384_000_000 = [] | 316 | tick-hz-384_000_000 = ["embassy-time-driver/tick-hz-384_000_000"] |
| 323 | ## 400.0MHz Tick Rate | 317 | ## 400.0MHz Tick Rate |
| 324 | tick-hz-400_000_000 = [] | 318 | tick-hz-400_000_000 = ["embassy-time-driver/tick-hz-400_000_000"] |
| 325 | ## 420.0MHz Tick Rate | 319 | ## 420.0MHz Tick Rate |
| 326 | tick-hz-420_000_000 = [] | 320 | tick-hz-420_000_000 = ["embassy-time-driver/tick-hz-420_000_000"] |
| 327 | ## 440.0MHz Tick Rate | 321 | ## 440.0MHz Tick Rate |
| 328 | tick-hz-440_000_000 = [] | 322 | tick-hz-440_000_000 = ["embassy-time-driver/tick-hz-440_000_000"] |
| 329 | ## 460.0MHz Tick Rate | 323 | ## 460.0MHz Tick Rate |
| 330 | tick-hz-460_000_000 = [] | 324 | tick-hz-460_000_000 = ["embassy-time-driver/tick-hz-460_000_000"] |
| 331 | ## 480.0MHz Tick Rate | 325 | ## 480.0MHz Tick Rate |
| 332 | tick-hz-480_000_000 = [] | 326 | tick-hz-480_000_000 = ["embassy-time-driver/tick-hz-480_000_000"] |
| 333 | ## 500.0MHz Tick Rate | 327 | ## 500.0MHz Tick Rate |
| 334 | tick-hz-500_000_000 = [] | 328 | tick-hz-500_000_000 = ["embassy-time-driver/tick-hz-500_000_000"] |
| 335 | ## 512.0MHz Tick Rate | 329 | ## 512.0MHz Tick Rate |
| 336 | tick-hz-512_000_000 = [] | 330 | tick-hz-512_000_000 = ["embassy-time-driver/tick-hz-512_000_000"] |
| 337 | ## 520.0MHz Tick Rate | 331 | ## 520.0MHz Tick Rate |
| 338 | tick-hz-520_000_000 = [] | 332 | tick-hz-520_000_000 = ["embassy-time-driver/tick-hz-520_000_000"] |
| 339 | ## 524.288MHz Tick Rate | 333 | ## 524.288MHz Tick Rate |
| 340 | tick-hz-524_288_000 = [] | 334 | tick-hz-524_288_000 = ["embassy-time-driver/tick-hz-524_288_000"] |
| 341 | ## 540.0MHz Tick Rate | 335 | ## 540.0MHz Tick Rate |
| 342 | tick-hz-540_000_000 = [] | 336 | tick-hz-540_000_000 = ["embassy-time-driver/tick-hz-540_000_000"] |
| 343 | ## 560.0MHz Tick Rate | 337 | ## 560.0MHz Tick Rate |
| 344 | tick-hz-560_000_000 = [] | 338 | tick-hz-560_000_000 = ["embassy-time-driver/tick-hz-560_000_000"] |
| 345 | ## 576.0MHz Tick Rate | 339 | ## 576.0MHz Tick Rate |
| 346 | tick-hz-576_000_000 = [] | 340 | tick-hz-576_000_000 = ["embassy-time-driver/tick-hz-576_000_000"] |
| 347 | ## 580.0MHz Tick Rate | 341 | ## 580.0MHz Tick Rate |
| 348 | tick-hz-580_000_000 = [] | 342 | tick-hz-580_000_000 = ["embassy-time-driver/tick-hz-580_000_000"] |
| 349 | ## 600.0MHz Tick Rate | 343 | ## 600.0MHz Tick Rate |
| 350 | tick-hz-600_000_000 = [] | 344 | tick-hz-600_000_000 = ["embassy-time-driver/tick-hz-600_000_000"] |
| 351 | ## 620.0MHz Tick Rate | 345 | ## 620.0MHz Tick Rate |
| 352 | tick-hz-620_000_000 = [] | 346 | tick-hz-620_000_000 = ["embassy-time-driver/tick-hz-620_000_000"] |
| 353 | ## 640.0MHz Tick Rate | 347 | ## 640.0MHz Tick Rate |
| 354 | tick-hz-640_000_000 = [] | 348 | tick-hz-640_000_000 = ["embassy-time-driver/tick-hz-640_000_000"] |
| 355 | ## 655.36MHz Tick Rate | 349 | ## 655.36MHz Tick Rate |
| 356 | tick-hz-655_360_000 = [] | 350 | tick-hz-655_360_000 = ["embassy-time-driver/tick-hz-655_360_000"] |
| 357 | ## 660.0MHz Tick Rate | 351 | ## 660.0MHz Tick Rate |
| 358 | tick-hz-660_000_000 = [] | 352 | tick-hz-660_000_000 = ["embassy-time-driver/tick-hz-660_000_000"] |
| 359 | ## 680.0MHz Tick Rate | 353 | ## 680.0MHz Tick Rate |
| 360 | tick-hz-680_000_000 = [] | 354 | tick-hz-680_000_000 = ["embassy-time-driver/tick-hz-680_000_000"] |
| 361 | ## 700.0MHz Tick Rate | 355 | ## 700.0MHz Tick Rate |
| 362 | tick-hz-700_000_000 = [] | 356 | tick-hz-700_000_000 = ["embassy-time-driver/tick-hz-700_000_000"] |
| 363 | ## 720.0MHz Tick Rate | 357 | ## 720.0MHz Tick Rate |
| 364 | tick-hz-720_000_000 = [] | 358 | tick-hz-720_000_000 = ["embassy-time-driver/tick-hz-720_000_000"] |
| 365 | ## 740.0MHz Tick Rate | 359 | ## 740.0MHz Tick Rate |
| 366 | tick-hz-740_000_000 = [] | 360 | tick-hz-740_000_000 = ["embassy-time-driver/tick-hz-740_000_000"] |
| 367 | ## 760.0MHz Tick Rate | 361 | ## 760.0MHz Tick Rate |
| 368 | tick-hz-760_000_000 = [] | 362 | tick-hz-760_000_000 = ["embassy-time-driver/tick-hz-760_000_000"] |
| 369 | ## 768.0MHz Tick Rate | 363 | ## 768.0MHz Tick Rate |
| 370 | tick-hz-768_000_000 = [] | 364 | tick-hz-768_000_000 = ["embassy-time-driver/tick-hz-768_000_000"] |
| 371 | ## 780.0MHz Tick Rate | 365 | ## 780.0MHz Tick Rate |
| 372 | tick-hz-780_000_000 = [] | 366 | tick-hz-780_000_000 = ["embassy-time-driver/tick-hz-780_000_000"] |
| 373 | ## 800.0MHz Tick Rate | 367 | ## 800.0MHz Tick Rate |
| 374 | tick-hz-800_000_000 = [] | 368 | tick-hz-800_000_000 = ["embassy-time-driver/tick-hz-800_000_000"] |
| 375 | ## 820.0MHz Tick Rate | 369 | ## 820.0MHz Tick Rate |
| 376 | tick-hz-820_000_000 = [] | 370 | tick-hz-820_000_000 = ["embassy-time-driver/tick-hz-820_000_000"] |
| 377 | ## 840.0MHz Tick Rate | 371 | ## 840.0MHz Tick Rate |
| 378 | tick-hz-840_000_000 = [] | 372 | tick-hz-840_000_000 = ["embassy-time-driver/tick-hz-840_000_000"] |
| 379 | ## 860.0MHz Tick Rate | 373 | ## 860.0MHz Tick Rate |
| 380 | tick-hz-860_000_000 = [] | 374 | tick-hz-860_000_000 = ["embassy-time-driver/tick-hz-860_000_000"] |
| 381 | ## 880.0MHz Tick Rate | 375 | ## 880.0MHz Tick Rate |
| 382 | tick-hz-880_000_000 = [] | 376 | tick-hz-880_000_000 = ["embassy-time-driver/tick-hz-880_000_000"] |
| 383 | ## 900.0MHz Tick Rate | 377 | ## 900.0MHz Tick Rate |
| 384 | tick-hz-900_000_000 = [] | 378 | tick-hz-900_000_000 = ["embassy-time-driver/tick-hz-900_000_000"] |
| 385 | ## 920.0MHz Tick Rate | 379 | ## 920.0MHz Tick Rate |
| 386 | tick-hz-920_000_000 = [] | 380 | tick-hz-920_000_000 = ["embassy-time-driver/tick-hz-920_000_000"] |
| 387 | ## 940.0MHz Tick Rate | 381 | ## 940.0MHz Tick Rate |
| 388 | tick-hz-940_000_000 = [] | 382 | tick-hz-940_000_000 = ["embassy-time-driver/tick-hz-940_000_000"] |
| 389 | ## 960.0MHz Tick Rate | 383 | ## 960.0MHz Tick Rate |
| 390 | tick-hz-960_000_000 = [] | 384 | tick-hz-960_000_000 = ["embassy-time-driver/tick-hz-960_000_000"] |
| 391 | ## 980.0MHz Tick Rate | 385 | ## 980.0MHz Tick Rate |
| 392 | tick-hz-980_000_000 = [] | 386 | tick-hz-980_000_000 = ["embassy-time-driver/tick-hz-980_000_000"] |
| 393 | ## 1.0GHz Tick Rate | 387 | ## 1.0GHz Tick Rate |
| 394 | tick-hz-1_000_000_000 = [] | 388 | tick-hz-1_000_000_000 = ["embassy-time-driver/tick-hz-1_000_000_000"] |
| 395 | ## 1.31072GHz Tick Rate | 389 | ## 1.31072GHz Tick Rate |
| 396 | tick-hz-1_310_720_000 = [] | 390 | tick-hz-1_310_720_000 = ["embassy-time-driver/tick-hz-1_310_720_000"] |
| 397 | ## 2.62144GHz Tick Rate | 391 | ## 2.62144GHz Tick Rate |
| 398 | tick-hz-2_621_440_000 = [] | 392 | tick-hz-2_621_440_000 = ["embassy-time-driver/tick-hz-2_621_440_000"] |
| 399 | ## 5.24288GHz Tick Rate | 393 | ## 5.24288GHz Tick Rate |
| 400 | tick-hz-5_242_880_000 = [] | 394 | tick-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] |
| 400 | embassy-time-driver = { version = "0.1.0", path = "../embassy-time-driver" } | ||
| 401 | |||
| 406 | defmt = { version = "0.3", optional = true } | 402 | defmt = { version = "0.3", optional = true } |
| 407 | log = { version = "0.4.14", optional = true } | 403 | log = { 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 | |||
| 12 | representing time spans of up to ~584558 years, which is big enough for all practical | 12 | representing time spans of up to ~584558 years, which is big enough for all practical |
| 13 | purposes and allows not having to worry about overflows. | 13 | purposes and allows not having to worry about overflows. |
| 14 | 14 | ||
| 15 | ## Time driver | 15 | ## Global time driver |
| 16 | 16 | ||
| 17 | The `time` module is backed by a global "time driver" specified at build time. | 17 | The `time` module is backed by a global "time driver" specified at build time. |
| 18 | Only one driver can be active in a program. | 18 | Only 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 | |||
| 21 | possible for libraries to use `embassy_time` in a driver-agnostic way without | 21 | possible for libraries to use `embassy_time` in a driver-agnostic way without |
| 22 | requiring generic parameters. | 22 | requiring generic parameters. |
| 23 | 23 | ||
| 24 | For more details, check the [`driver`] module. | 24 | For 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 | /// ``` |
| 29 | pub struct MockDriver(CsMutex<RefCell<InnerMockDriver>>); | 29 | pub struct MockDriver(CsMutex<RefCell<InnerMockDriver>>); |
| 30 | 30 | ||
| 31 | crate::time_driver_impl!(static DRIVER: MockDriver = MockDriver::new()); | 31 | crate::driver::time_driver_impl!(static DRIVER: MockDriver = MockDriver::new()); |
| 32 | 32 | ||
| 33 | impl MockDriver { | 33 | impl 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 | ||
| 47 | const ALARM_NEW: AlarmState = AlarmState::new(); | 47 | const ALARM_NEW: AlarmState = AlarmState::new(); |
| 48 | crate::time_driver_impl!(static DRIVER: TimeDriver = TimeDriver { | 48 | crate::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 | ||
| 44 | const ALARM_NEW: AlarmState = AlarmState::new(); | 44 | const ALARM_NEW: AlarmState = AlarmState::new(); |
| 45 | crate::time_driver_impl!(static DRIVER: TimeDriver = TimeDriver { | 45 | crate::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. |
| 11 | pub(crate) mod fmt; | 11 | pub(crate) mod fmt; |
| 12 | 12 | ||
| 13 | pub use embassy_time_driver as driver; | ||
| 14 | |||
| 13 | mod delay; | 15 | mod delay; |
| 14 | pub mod driver; | ||
| 15 | mod duration; | 16 | mod duration; |
| 16 | mod instant; | 17 | mod instant; |
| 17 | pub mod queue; | 18 | pub mod queue; |
| 18 | mod tick; | ||
| 19 | mod timer; | 19 | mod timer; |
| 20 | 20 | ||
| 21 | #[cfg(feature = "mock-driver")] | 21 | #[cfg(feature = "mock-driver")] |
| @@ -32,15 +32,11 @@ mod driver_wasm; | |||
| 32 | mod queue_generic; | 32 | mod queue_generic; |
| 33 | 33 | ||
| 34 | pub use delay::{block_for, Delay}; | 34 | pub use delay::{block_for, Delay}; |
| 35 | pub use driver::TICK_HZ; | ||
| 35 | pub use duration::Duration; | 36 | pub use duration::Duration; |
| 36 | pub use instant::Instant; | 37 | pub use instant::Instant; |
| 37 | pub use timer::{with_timeout, Ticker, TimeoutError, Timer}; | 38 | pub 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) | ||
| 42 | pub const TICK_HZ: u64 = tick::TICK_HZ; | ||
| 43 | |||
| 44 | const fn gcd(a: u64, b: u64) -> u64 { | 40 | const fn gcd(a: u64, b: u64) -> u64 { |
| 45 | if b == 0 { | 41 | if b == 0 { |
| 46 | a | 42 | a |
