1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
//! Interface system tick timer. /// Interface for the system tick timer. /// /// A system tick timer provides a countdown timer to enforce process scheduling /// quantums. Implementations should have consistent timing while the CPU is /// active, but need not operate during sleep. /// /// On most chips, this will be implemented by the core (e.g. the ARM core), but /// some chips lack this optional peripheral, in which case it might be /// implemented by another timer or alarm controller. pub trait SysTick { /// Sets the timer as close as possible to the given interval in /// microseconds. /// /// Callers can assume at least a 24-bit wide clock. Specific timing is /// dependent on the driving clock. In practice, increments of 10ms are most /// accurate and values up to 400ms are valid. fn set_timer(&self, us: u32); /// Returns the time left in microseconds fn value(&self) -> u32; /// Returns true if the timer has expired fn overflowed(&self) -> bool; /// Resets the timer /// /// Resets the timer to 0 and disables it fn reset(&self); /// Enables the timer /// /// Enabling the timer will begin a count down from the value set with /// `set_timer`. /// /// * `with_interrupt` - if set, an expiring timer will fire an interrupt. fn enable(&self, with_interrupt: bool); } /// A dummy `SysTick` implementation in which the timer never expires. /// /// Using this implementation is functional, but will mean the scheduler cannot /// interrupt non-yielding processes. impl SysTick for () { fn reset(&self) {} fn set_timer(&self, _: u32) {} fn enable(&self, _: bool) {} fn overflowed(&self) -> bool { false } fn value(&self) -> u32 { !0 } }