remove qei trait

This commit is contained in:
xoviat
2021-04-02 13:52:31 -05:00
parent 388558263b
commit 6f0fb6cab1
5 changed files with 1 additions and 116 deletions

View File

@ -1,2 +1 @@
pub mod qei;
pub mod serial;

View File

@ -1,91 +0,0 @@
use crate::interrupt;
use core::future::Future;
use core::pin::Pin;
use embassy::traits::qei::WaitForRotate;
use embedded_hal::Direction;
use stm32f4xx_hal::pac::TIM2;
use stm32f4xx_hal::{qei, qei::Pins};
pub struct Qei<T: Instance, PINS> {
_qei: qei::Qei<T, PINS>,
int: T::Interrupt,
}
impl<PINS: Pins<TIM2>> Qei<TIM2, PINS> {
pub fn tim2(tim: TIM2, pins: PINS, interrupt: interrupt::TIM2) -> Self {
let qei = qei::Qei::tim2(tim, pins);
let tim = unsafe {
&mut *(stm32f4xx_hal::stm32::TIM2::ptr()
as *mut stm32f4xx_hal::stm32::tim2::RegisterBlock)
};
/*
enable qei interrupt
*/
tim.dier.write(|w| w.uie().set_bit());
Qei {
_qei: qei,
int: interrupt,
}
}
}
impl<PINS: Pins<TIM2> + 'static> WaitForRotate for Qei<TIM2, PINS> {
type RotateFuture<'a> = impl Future<Output = Direction> + 'a;
fn wait_for_rotate<'a>(
self: Pin<&'a mut Self>,
count_down: u16,
count_up: u16,
) -> Self::RotateFuture<'a> {
let s = unsafe { self.get_unchecked_mut() };
let tim = unsafe {
&mut *(stm32f4xx_hal::stm32::TIM2::ptr()
as *mut stm32f4xx_hal::stm32::tim2::RegisterBlock)
};
/*
the interrupt will be reached at zero or the max count
write the total range to the qei.
*/
tim.arr
.write(|w| unsafe { w.bits((count_down + count_up) as u32) });
/*
set timer to the correct value in the range
*/
tim.cnt.write(|w| unsafe { w.bits(count_down as u32) });
/*
clear interrupt flag
*/
tim.sr.write(|w| w.uif().clear_bit());
async move {
embassy::util::InterruptFuture::new(&mut s.int).await;
if tim.cnt.read().bits() == 0 {
Direction::Downcounting
} else if tim.cnt.read() == count_down + count_up {
Direction::Upcounting
} else {
panic!("unexpected value")
}
}
}
}
mod sealed {
pub trait Sealed {}
}
pub trait Instance: sealed::Sealed {
type Interrupt: interrupt::Interrupt;
}
impl sealed::Sealed for TIM2 {}
impl Instance for TIM2 {
type Interrupt = interrupt::TIM2;
}

View File

@ -109,7 +109,7 @@ pub mod rtc;
feature = "stm32f469",
feature = "stm32f479",
))]
pub use f4::{qei, serial};
pub use f4::serial;
#[cfg(any(
feature = "stm32f401",