Update stm32-data and rename RTC to Clock
This commit is contained in:
parent
90b25e70d7
commit
66f232574a
@ -5,16 +5,16 @@ use core::convert::TryInto;
|
|||||||
use core::sync::atomic::{compiler_fence, AtomicU32, Ordering};
|
use core::sync::atomic::{compiler_fence, AtomicU32, Ordering};
|
||||||
|
|
||||||
use embassy::interrupt::InterruptExt;
|
use embassy::interrupt::InterruptExt;
|
||||||
use embassy::time::{Clock, TICKS_PER_SECOND};
|
use embassy::time::{Clock as EmbassyClock, TICKS_PER_SECOND};
|
||||||
|
|
||||||
use crate::interrupt::{CriticalSection, Interrupt, Mutex};
|
use crate::interrupt::{CriticalSection, Interrupt, Mutex};
|
||||||
use crate::pac::timer::TimGp16;
|
use crate::pac::timer::TimGp16;
|
||||||
use crate::time::Hertz;
|
use crate::time::Hertz;
|
||||||
|
|
||||||
// RTC timekeeping works with something we call "periods", which are time intervals
|
// Clock timekeeping works with something we call "periods", which are time intervals
|
||||||
// of 2^15 ticks. The RTC counter value is 16 bits, so one "overflow cycle" is 2 periods.
|
// of 2^15 ticks. The Clock counter value is 16 bits, so one "overflow cycle" is 2 periods.
|
||||||
//
|
//
|
||||||
// A `period` count is maintained in parallel to the RTC hardware `counter`, like this:
|
// A `period` count is maintained in parallel to the Timer hardware `counter`, like this:
|
||||||
// - `period` and `counter` start at 0
|
// - `period` and `counter` start at 0
|
||||||
// - `period` is incremented on overflow (at counter value 0)
|
// - `period` is incremented on overflow (at counter value 0)
|
||||||
// - `period` is incremented "midway" between overflows (at counter value 0x8000)
|
// - `period` is incremented "midway" between overflows (at counter value 0x8000)
|
||||||
@ -47,17 +47,15 @@ impl AlarmState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: This is sometimes wasteful, try to find a better way
|
|
||||||
const ALARM_COUNT: usize = 3;
|
const ALARM_COUNT: usize = 3;
|
||||||
|
|
||||||
/// RTC timer that can be used by the executor and to set alarms.
|
/// Clock timer that can be used by the executor and to set alarms.
|
||||||
///
|
///
|
||||||
/// It can work with Timers 2, 3, 4, 5, 9 and 12. Timers 9 and 12 only have one alarm available,
|
/// It can work with Timers 2, 3, 4, 5. This timer works internally with a unit of 2^15 ticks, which
|
||||||
/// while the others have three each.
|
/// means that if a call to [`embassy::time::Clock::now`] is blocked for that amount of ticks the
|
||||||
/// This timer works internally with a unit of 2^15 ticks, which means that if a call to
|
/// returned value will be wrong (an old value). The current default tick rate is 32768 ticks per
|
||||||
/// [`embassy::time::Clock::now`] is blocked for that amount of ticks the returned value will be
|
/// second.
|
||||||
/// wrong (an old value). The current default tick rate is 32768 ticks per second.
|
pub struct Clock<T: Instance> {
|
||||||
pub struct RTC<T: Instance> {
|
|
||||||
_inner: T,
|
_inner: T,
|
||||||
irq: T::Interrupt,
|
irq: T::Interrupt,
|
||||||
/// Number of 2^23 periods elapsed since boot.
|
/// Number of 2^23 periods elapsed since boot.
|
||||||
@ -66,7 +64,7 @@ pub struct RTC<T: Instance> {
|
|||||||
alarms: Mutex<[AlarmState; ALARM_COUNT]>,
|
alarms: Mutex<[AlarmState; ALARM_COUNT]>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Instance> RTC<T> {
|
impl<T: Instance> Clock<T> {
|
||||||
pub fn new(peripheral: T, irq: T::Interrupt) -> Self {
|
pub fn new(peripheral: T, irq: T::Interrupt) -> Self {
|
||||||
Self {
|
Self {
|
||||||
_inner: peripheral,
|
_inner: peripheral,
|
||||||
@ -212,7 +210,7 @@ impl<T: Instance> RTC<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Instance> embassy::time::Clock for RTC<T> {
|
impl<T: Instance> EmbassyClock for Clock<T> {
|
||||||
fn now(&self) -> u64 {
|
fn now(&self) -> u64 {
|
||||||
let inner = T::inner();
|
let inner = T::inner();
|
||||||
|
|
||||||
@ -225,7 +223,7 @@ impl<T: Instance> embassy::time::Clock for RTC<T> {
|
|||||||
|
|
||||||
pub struct Alarm<T: Instance> {
|
pub struct Alarm<T: Instance> {
|
||||||
n: usize,
|
n: usize,
|
||||||
rtc: &'static RTC<T>,
|
rtc: &'static Clock<T>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Instance> embassy::time::Alarm for Alarm<T> {
|
impl<T: Instance> embassy::time::Alarm for Alarm<T> {
|
||||||
@ -345,15 +343,15 @@ pub trait Instance: sealed::Instance + Sized + 'static {}
|
|||||||
|
|
||||||
macro_rules! impl_timer {
|
macro_rules! impl_timer {
|
||||||
($inst:ident) => {
|
($inst:ident) => {
|
||||||
impl crate::rtc::sealed::Instance for peripherals::$inst {
|
impl crate::clock::sealed::Instance for peripherals::$inst {
|
||||||
type Interrupt = interrupt::$inst;
|
type Interrupt = interrupt::$inst;
|
||||||
|
|
||||||
fn inner() -> crate::rtc::TimerInner {
|
fn inner() -> crate::clock::TimerInner {
|
||||||
const INNER: crate::rtc::TimerInner = crate::rtc::TimerInner($inst);
|
const INNER: crate::clock::TimerInner = crate::clock::TimerInner($inst);
|
||||||
INNER
|
INNER
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl crate::rtc::Instance for peripherals::$inst {}
|
impl crate::clock::Instance for peripherals::$inst {}
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -9,6 +9,8 @@
|
|||||||
// This must go FIRST so that all the other modules see its macros.
|
// This must go FIRST so that all the other modules see its macros.
|
||||||
pub mod fmt;
|
pub mod fmt;
|
||||||
|
|
||||||
|
#[cfg(feature = "_timer")]
|
||||||
|
pub mod clock;
|
||||||
#[cfg(feature = "_dma")]
|
#[cfg(feature = "_dma")]
|
||||||
pub mod dma;
|
pub mod dma;
|
||||||
pub mod exti;
|
pub mod exti;
|
||||||
@ -17,8 +19,6 @@ pub mod pwr;
|
|||||||
pub mod rcc;
|
pub mod rcc;
|
||||||
#[cfg(feature = "_rng")]
|
#[cfg(feature = "_rng")]
|
||||||
pub mod rng;
|
pub mod rng;
|
||||||
#[cfg(feature = "_timer")]
|
|
||||||
pub mod rtc;
|
|
||||||
#[cfg(feature = "_sdmmc")]
|
#[cfg(feature = "_sdmmc")]
|
||||||
pub mod sdmmc;
|
pub mod sdmmc;
|
||||||
#[cfg(feature = "_spi")]
|
#[cfg(feature = "_spi")]
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 3f85766a0f97889788059e71d62d13950d6d7105
|
Subproject commit c5db875ec2ce8568cfac018ecbdf288fc4b63ba0
|
Loading…
Reference in New Issue
Block a user