diff --git a/include/libopencm3/stm32/timer.h b/include/libopencm3/stm32/timer.h index a9d23299..3c8c8c2c 100644 --- a/include/libopencm3/stm32/timer.h +++ b/include/libopencm3/stm32/timer.h @@ -977,4 +977,10 @@ void timer_ic_set_polarity(u32 timer, enum tim_ic_id ic, enum tim_ic_pol pol); void timer_ic_enable(u32 timer, enum tim_ic_id ic); void timer_ic_disable(u32 timer, enum tim_ic_id ic); +void timer_slave_set_filter(u32 timer, enum tim_ic_filter flt); +void timer_slave_set_prescaler(u32 timer, enum tim_ic_psc psc); +void timer_slave_set_polarity(u32 timer, enum tim_ic_pol pol); +void timer_slave_set_mode(u32 timer, u8 mode); +void timer_slave_set_trigger(u32 timer, u8 trigger); + #endif diff --git a/lib/stm32/f1/timer.c b/lib/stm32/f1/timer.c index e1095f2f..cf5b4113 100644 --- a/lib/stm32/f1/timer.c +++ b/lib/stm32/f1/timer.c @@ -1007,3 +1007,35 @@ void timer_ic_disable(u32 timer, enum tim_ic_id ic) TIM_CCER(timer) &= ~(0x1 << (ic * 4)); } +void timer_slave_set_filter(u32 timer, enum tim_ic_filter flt) +{ + TIM_SMCR(timer) &= ~TIM_SMCR_ETF_MASK; + TIM_SMCR(timer) |= flt << 8; +} + +void timer_slave_set_prescaler(u32 timer, enum tim_ic_psc psc) +{ + TIM_SMCR(timer) &= ~TIM_SMCR_ETPS_MASK; + TIM_SMCR(timer) |= psc << 12; +} + +void timer_slave_set_polarity(u32 timer, enum tim_ic_pol pol) +{ + if (pol) + TIM_SMCR(timer) |= TIM_SMCR_ETP; + else + TIM_SMCR(timer) &= ~TIM_SMCR_ETP; +} + +void timer_slave_set_mode(u32 timer, u8 mode) +{ + TIM_SMCR(timer) &= ~TIM_SMCR_SMS_MASK; + TIM_SMCR(timer) |= mode; +} + +void timer_slave_set_trigger(u32 timer, u8 trigger) +{ + TIM_SMCR(timer) &= ~TIM_SMCR_TS_MASK; + TIM_SMCR(timer) |= trigger; +} +