Skip to content

Commit

Permalink
delay at least
Browse files Browse the repository at this point in the history
  • Loading branch information
burrbull committed Nov 29, 2023
1 parent dc2e070 commit 66928e1
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 23 deletions.
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@ and this project adheres to [Semantic Versioning](http://semver.org/).

## [Unreleased]

- Added an example to show how to do DMA with UART (Rx only) [#698]
- Added an example to show how to do DMA with UART (Rx only) [#698]
- bump embedded-hal to `1.0-rc2`

### Fixed

- Wait at least given time in `embedded-hal` `delay`

## [v0.18.0] - 2023-11-19

### Changed
Expand Down
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ void = { default-features = false, version = "1.0.2" }
embedded-hal = { features = ["unproven"], version = "0.2.7" }
embedded-hal-nb = "1.0.0-rc.1"
display-interface = { version = "0.4.1", optional = true }
fugit = "0.3.6"
fugit = "0.3.7"
fugit-timer = "0.1.3"
rtic-monotonic = { version = "1.0", optional = true }
systick-monotonic = { version = "1.0", optional = true }
Expand All @@ -55,7 +55,7 @@ version = "0.3.14"
default-features = false

[dependencies.embedded-hal-one]
version = "=1.0.0-rc.1"
version = "=1.0.0-rc.2"
package = "embedded-hal"

[dependencies.stm32_i2s_v12x]
Expand Down
9 changes: 8 additions & 1 deletion src/dwt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,14 @@ impl<T: Into<u64>> embedded_hal::blocking::delay::DelayMs<T> for Delay {
}
}

impl embedded_hal_one::delay::DelayUs for Delay {
impl embedded_hal_one::delay::DelayNs for Delay {
fn delay_ns(&mut self, ns: u32) {
// Convert us to ticks
let start = DWT::cycle_count();
let ticks = (ns as u64 * self.clock.raw() as u64) / 1_000_000_000;
Delay::delay_ticks(start, ticks);
}

fn delay_us(&mut self, us: u32) {
// Convert us to ticks
let start = DWT::cycle_count();
Expand Down
24 changes: 15 additions & 9 deletions src/timer/hal_02.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use embedded_hal::{
blocking::delay::{DelayMs, DelayUs},
timer::{Cancel, CountDown, Periodic},
};
use fugit::{ExtU32, HertzU32 as Hertz, TimerDurationU32};
use fugit::{ExtU32Ceil, HertzU32 as Hertz, TimerDurationU32};
use void::Void;

use super::{
Expand All @@ -16,36 +16,42 @@ use super::{
};

impl DelayUs<u32> for SysDelay {
#[inline]
fn delay_us(&mut self, us: u32) {
self.delay(us.micros())
self.delay(us.micros_at_least())
}
}

impl DelayMs<u32> for SysDelay {
#[inline]
fn delay_ms(&mut self, ms: u32) {
self.delay_us(ms * 1_000);
self.delay(ms.millis_at_least());
}
}

impl DelayUs<u16> for SysDelay {
#[inline]
fn delay_us(&mut self, us: u16) {
self.delay_us(us as u32)
}
}

impl DelayMs<u16> for SysDelay {
#[inline]
fn delay_ms(&mut self, ms: u16) {
self.delay_ms(ms as u32);
}
}

impl DelayUs<u8> for SysDelay {
#[inline]
fn delay_us(&mut self, us: u8) {
self.delay_us(us as u32)
}
}

impl DelayMs<u8> for SysDelay {
#[inline]
fn delay_ms(&mut self, ms: u8) {
self.delay_ms(ms as u32);
}
Expand Down Expand Up @@ -198,40 +204,40 @@ where
impl<TIM: Instance, const FREQ: u32> DelayUs<u32> for Delay<TIM, FREQ> {
/// Sleep for `us` microseconds
fn delay_us(&mut self, us: u32) {
self.delay(us.micros())
self.delay(us.micros_at_least())
}
}

impl<TIM: Instance, const FREQ: u32> DelayMs<u32> for Delay<TIM, FREQ> {
/// Sleep for `ms` milliseconds
fn delay_ms(&mut self, ms: u32) {
self.delay(ms.millis())
self.delay(ms.millis_at_least())
}
}

impl<TIM: Instance, const FREQ: u32> DelayUs<u16> for Delay<TIM, FREQ> {
/// Sleep for `us` microseconds
fn delay_us(&mut self, us: u16) {
self.delay((us as u32).micros())
self.delay((us as u32).micros_at_least())
}
}
impl<TIM: Instance, const FREQ: u32> DelayMs<u16> for Delay<TIM, FREQ> {
/// Sleep for `ms` milliseconds
fn delay_ms(&mut self, ms: u16) {
self.delay((ms as u32).millis())
self.delay((ms as u32).millis_at_least())
}
}

impl<TIM: Instance, const FREQ: u32> DelayUs<u8> for Delay<TIM, FREQ> {
/// Sleep for `us` microseconds
fn delay_us(&mut self, us: u8) {
self.delay((us as u32).micros())
self.delay((us as u32).micros_at_least())
}
}
impl<TIM: Instance, const FREQ: u32> DelayMs<u8> for Delay<TIM, FREQ> {
/// Sleep for `ms` milliseconds
fn delay_ms(&mut self, ms: u8) {
self.delay((ms as u32).millis())
self.delay((ms as u32).millis_at_least())
}
}

Expand Down
24 changes: 14 additions & 10 deletions src/timer/hal_1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,32 @@
//! a 16-bit prescaler.

use core::convert::Infallible;
use embedded_hal_one::delay::DelayUs;
use embedded_hal_one::delay::DelayNs;

use super::{Delay, Instance, PwmChannel, SysDelay, WithPwm};
use fugit::ExtU32;
use fugit::ExtU32Ceil;

impl DelayUs for SysDelay {
fn delay_us(&mut self, us: u32) {
self.delay(us.micros());
impl DelayNs for SysDelay {
fn delay_ns(&mut self, ns: u32) {
self.delay(ns.nanos_at_least());
}

fn delay_ms(&mut self, ms: u32) {
self.delay_us(ms * 1_000);
self.delay(ms.millis_at_least());
}
}

impl<TIM: Instance, const FREQ: u32> DelayUs for Delay<TIM, FREQ> {
impl<TIM: Instance, const FREQ: u32> DelayNs for Delay<TIM, FREQ> {
fn delay_ns(&mut self, ns: u32) {
self.delay(ns.micros_at_least());
}

fn delay_us(&mut self, us: u32) {
self.delay(us.micros());
self.delay(us.micros_at_least());
}

fn delay_ms(&mut self, ms: u32) {
self.delay(ms.millis());
self.delay(ms.millis_at_least());
}
}

Expand All @@ -36,7 +40,7 @@ impl<TIM: Instance + WithPwm, const C: u8> embedded_hal_one::pwm::ErrorType for
impl<TIM: Instance + WithPwm, const C: u8> embedded_hal_one::pwm::SetDutyCycle
for PwmChannel<TIM, C>
{
fn get_max_duty_cycle(&self) -> u16 {
fn max_duty_cycle(&self) -> u16 {
self.get_max_duty()
}
fn set_duty_cycle(&mut self, duty: u16) -> Result<(), Self::Error> {
Expand Down

0 comments on commit 66928e1

Please sign in to comment.