stm32/i2c: disable peripheral when changing timings
This commit is contained in:
parent
17301c00e9
commit
03f73ce339
@ -855,7 +855,12 @@ impl<'d, M: Mode> SetConfig for I2c<'d, M> {
|
||||
type Config = Hertz;
|
||||
type ConfigError = ();
|
||||
fn set_config(&mut self, config: &Self::Config) -> Result<(), ()> {
|
||||
self.info.regs.cr1().modify(|reg| {
|
||||
reg.set_pe(false);
|
||||
});
|
||||
|
||||
let timings = Timings::new(self.kernel_clock, *config);
|
||||
|
||||
self.info.regs.timingr().write(|reg| {
|
||||
reg.set_presc(timings.prescale);
|
||||
reg.set_scll(timings.scll);
|
||||
@ -864,6 +869,10 @@ impl<'d, M: Mode> SetConfig for I2c<'d, M> {
|
||||
reg.set_scldel(timings.scldel);
|
||||
});
|
||||
|
||||
self.info.regs.cr1().modify(|reg| {
|
||||
reg.set_pe(true);
|
||||
});
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user