Adding support for input capture prefilter configuration
This commit is contained in:
parent
31781a9d0e
commit
2e358dea26
|
@ -44,12 +44,12 @@ impl InputStamper {
|
||||||
) -> Self {
|
) -> Self {
|
||||||
// Utilize the TIM5 CH4 as an input capture channel - use TI4 (the DI0 input trigger) as the
|
// Utilize the TIM5 CH4 as an input capture channel - use TI4 (the DI0 input trigger) as the
|
||||||
// capture source.
|
// capture source.
|
||||||
let input_capture =
|
let mut input_capture =
|
||||||
timer_channel.into_input_capture(timers::tim5::CaptureSource4::TI4);
|
timer_channel.into_input_capture(timers::tim5::CaptureSource4::TI4);
|
||||||
|
|
||||||
// FIXME: hack in de-glitching filter
|
// Do not prescale the input capture signal - require 8 consecutive samples to record an
|
||||||
let regs = unsafe { &*hal::stm32::TIM5::ptr() };
|
// incoming event - this prevents spurious glitches from triggering captures.
|
||||||
regs.ccmr2_input().modify(|_, w| w.ic4f().bits(0b0011));
|
input_capture.configure_filter(timers::InputFilter::Div1N8);
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
capture_channel: input_capture,
|
capture_channel: input_capture,
|
||||||
|
|
|
@ -48,6 +48,13 @@ pub enum SlaveMode {
|
||||||
Trigger = 0b0110,
|
Trigger = 0b0110,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Optional input capture preconditioning filter configurations.
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub enum InputFilter {
|
||||||
|
Div1N1 = 0b0000,
|
||||||
|
Div1N8 = 0b0011,
|
||||||
|
}
|
||||||
|
|
||||||
macro_rules! timer_channels {
|
macro_rules! timer_channels {
|
||||||
($name:ident, $TY:ident, $size:ty) => {
|
($name:ident, $TY:ident, $size:ty) => {
|
||||||
paste::paste! {
|
paste::paste! {
|
||||||
|
@ -334,6 +341,16 @@ macro_rules! timer_channels {
|
||||||
let regs = unsafe { &*<$TY>::ptr() };
|
let regs = unsafe { &*<$TY>::ptr() };
|
||||||
regs.sr.read().[< cc $index of >]().bit_is_set()
|
regs.sr.read().[< cc $index of >]().bit_is_set()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Configure the input capture input pre-filter.
|
||||||
|
///
|
||||||
|
/// # Args
|
||||||
|
/// * `filter` - The desired input filter stage configuration. Defaults to disabled.
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn configure_filter(&mut self, filter: super::InputFilter) {
|
||||||
|
let regs = unsafe { &*<$TY>::ptr() };
|
||||||
|
regs.[< $ccmrx _input >]().modify(|_, w| w.[< ic $index f >]().bits(filter as u8));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note(unsafe): This manually implements DMA support for input-capture channels. This
|
// Note(unsafe): This manually implements DMA support for input-capture channels. This
|
||||||
|
|
Loading…
Reference in New Issue