diff options
| -rw-r--r-- | embassy-rp/src/spi.rs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/embassy-rp/src/spi.rs b/embassy-rp/src/spi.rs index 766f08616..c919672a7 100644 --- a/embassy-rp/src/spi.rs +++ b/embassy-rp/src/spi.rs | |||
| @@ -105,6 +105,19 @@ impl<'d, T: Instance> Spi<'d, T> { | |||
| 105 | } | 105 | } |
| 106 | } | 106 | } |
| 107 | 107 | ||
| 108 | pub fn transfer(&mut self, data: &mut [u8]) { | ||
| 109 | unsafe { | ||
| 110 | let p = self.inner.regs(); | ||
| 111 | for b in data { | ||
| 112 | while !p.sr().read().tnf() {} | ||
| 113 | p.dr().write(|w| w.set_data(*b as _)); | ||
| 114 | while !p.sr().read().rne() {} | ||
| 115 | *b = p.dr().read().data() as u8; | ||
| 116 | } | ||
| 117 | self.flush(); | ||
| 118 | } | ||
| 119 | } | ||
| 120 | |||
| 108 | pub fn flush(&mut self) { | 121 | pub fn flush(&mut self) { |
| 109 | unsafe { | 122 | unsafe { |
| 110 | let p = self.inner.regs(); | 123 | let p = self.inner.regs(); |
| @@ -122,6 +135,14 @@ impl<'d, T: Instance> eh::Write<u8> for Spi<'d, T> { | |||
| 122 | } | 135 | } |
| 123 | } | 136 | } |
| 124 | 137 | ||
| 138 | impl<'d, T: Instance> eh::Transfer<u8> for Spi<'d, T> { | ||
| 139 | type Error = core::convert::Infallible; | ||
| 140 | fn transfer<'w>(&mut self, words: &'w mut [u8]) -> Result<&'w [u8], Self::Error> { | ||
| 141 | self.transfer(words); | ||
| 142 | Ok(words) | ||
| 143 | } | ||
| 144 | } | ||
| 145 | |||
| 125 | mod sealed { | 146 | mod sealed { |
| 126 | use super::*; | 147 | use super::*; |
| 127 | 148 | ||
