use esp_hal::{
gpio::Input,
pcnt::{Pcnt, channel, unit},
peripherals::PCNT,
};
pub struct PcntDriver {
pub pcnt_unit: unit::Unit<'static, 1>,
}
impl PcntDriver {
pub fn get_and_reset(&mut self) -> i16 {
let c = self.pcnt_unit.counter.get();
self.pcnt_unit.clear();
c
}
}
impl PcntDriver {
pub fn new(pcnt: PCNT<'static>, rpm_pin: Input<'static>) -> Self {
let pcnt = Pcnt::new(pcnt);
let u0 = pcnt.unit1;
u0.clear();
let ch0 = &u0.channel0;
ch0.set_edge_signal(rpm_pin);
ch0.set_input_mode(channel::EdgeMode::Increment, channel::EdgeMode::Increment);
u0.listen();
u0.resume();
Self { pcnt_unit: u0 }
}
}