impl SetConfig for stm32 i2c and SPI

This commit is contained in:
Henrik Alsér
2022-07-09 02:28:05 +02:00
parent 85e67d94ad
commit 880b71a1e8
4 changed files with 47 additions and 0 deletions

View File

@ -1,5 +1,6 @@
use core::marker::PhantomData;
use embassy_embedded_hal::SetConfig;
use embassy_hal_common::unborrow;
use crate::gpio::sealed::AFType;
@ -381,3 +382,23 @@ impl Timings {
}
}
}
impl<'d, T: Instance> SetConfig for I2c<'d, T> {
type Config = Hertz;
fn set_config(&mut self, config: &Self::Config) {
let timings = Timings::new(T::frequency(), *config);
unsafe {
T::regs().cr2().modify(|reg| {
reg.set_freq(timings.freq);
});
T::regs().ccr().modify(|reg| {
reg.set_f_s(timings.mode.f_s());
reg.set_duty(timings.duty.duty());
reg.set_ccr(timings.ccr);
});
T::regs().trise().modify(|reg| {
reg.set_trise(timings.trise);
});
}
}
}