aboutsummaryrefslogtreecommitdiff
path: root/embassy-embedded-hal
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-embedded-hal')
-rw-r--r--embassy-embedded-hal/src/shared_bus/blocking/spi.rs21
1 files changed, 10 insertions, 11 deletions
diff --git a/embassy-embedded-hal/src/shared_bus/blocking/spi.rs b/embassy-embedded-hal/src/shared_bus/blocking/spi.rs
index cf9b55db9..c08bcbf62 100644
--- a/embassy-embedded-hal/src/shared_bus/blocking/spi.rs
+++ b/embassy-embedded-hal/src/shared_bus/blocking/spi.rs
@@ -37,22 +37,21 @@ where
37 type Bus = BUS; 37 type Bus = BUS;
38 38
39 fn transaction<R>(&mut self, f: impl FnOnce(&mut Self::Bus) -> Result<R, BUS::Error>) -> Result<R, Self::Error> { 39 fn transaction<R>(&mut self, f: impl FnOnce(&mut Self::Bus) -> Result<R, BUS::Error>) -> Result<R, Self::Error> {
40 self.cs.set_low().map_err(SpiBusDeviceError::Cs)?; 40 self.bus.lock(|bus| {
41
42 let (f_res, flush_res) = self.bus.lock(|bus| {
43 let mut bus = bus.borrow_mut(); 41 let mut bus = bus.borrow_mut();
42 self.cs.set_low().map_err(SpiBusDeviceError::Cs)?;
43
44 let f_res = f(&mut bus); 44 let f_res = f(&mut bus);
45
45 // On failure, it's important to still flush and deassert CS. 46 // On failure, it's important to still flush and deassert CS.
46 let flush_res = bus.flush(); 47 let flush_res = bus.flush();
47 (f_res, flush_res) 48 let cs_res = self.cs.set_high();
48 });
49
50 let cs_res = self.cs.set_high();
51 49
52 let f_res = f_res.map_err(SpiBusDeviceError::Spi)?; 50 let f_res = f_res.map_err(SpiBusDeviceError::Spi)?;
53 flush_res.map_err(SpiBusDeviceError::Spi)?; 51 flush_res.map_err(SpiBusDeviceError::Spi)?;
54 cs_res.map_err(SpiBusDeviceError::Cs)?; 52 cs_res.map_err(SpiBusDeviceError::Cs)?;
55 53
56 Ok(f_res) 54 Ok(f_res)
55 })
57 } 56 }
58} 57}