@@ -53,19 +53,19 @@ unsafe impl<SPI: Instance, W: FrameSize> WriteBuffer for DmaTx<SPI, W> {
53
53
}
54
54
}
55
55
56
- pub struct RxDmaTransfer < SPI , W : FrameSize , CH , D > {
57
- spi : Spi < SPI , W > ,
56
+ pub struct RxDmaTransfer < ' a , SPI , W : FrameSize , CH , D > {
57
+ spi : & ' a mut Spi < SPI , W > ,
58
58
transfer : DmaTransfer < CH , DmaRx < SPI , W > , D , PeripheralToMemory > ,
59
59
}
60
60
61
- impl < SPI , W , CH , D > RxDmaTransfer < SPI , W , CH , D >
61
+ impl < ' a , SPI , W , CH , D > RxDmaTransfer < ' a , SPI , W , CH , D >
62
62
where
63
63
SPI : Instance ,
64
64
W : FrameSize + Word ,
65
65
CH : Channel ,
66
66
D : WriteBuffer < Word = W > ,
67
67
{
68
- pub fn new ( spi : Spi < SPI , W > , channel : CH , destination : D ) -> Self {
68
+ pub fn new ( spi : & ' a mut Spi < SPI , W > , channel : CH , destination : D ) -> Self {
69
69
let config = DmaConfig :: new ( ) . with_request ( SPI :: rx_dma_request ( ) ) ;
70
70
let source = DmaRx :: new ( ) ;
71
71
let transfer = DmaTransfer :: peripheral_to_memory (
@@ -86,19 +86,19 @@ where
86
86
}
87
87
}
88
88
89
- pub struct TxDmaTransfer < SPI , W : FrameSize , CH , S > {
90
- spi : Spi < SPI , W > ,
89
+ pub struct TxDmaTransfer < ' a , SPI , W : FrameSize , CH , S > {
90
+ spi : & ' a mut Spi < SPI , W > ,
91
91
transfer : DmaTransfer < CH , S , DmaTx < SPI , W > , MemoryToPeripheral > ,
92
92
}
93
93
94
- impl < SPI , W , CH , S > TxDmaTransfer < SPI , W , CH , S >
94
+ impl < ' a , SPI , W , CH , S > TxDmaTransfer < ' a , SPI , W , CH , S >
95
95
where
96
96
SPI : Instance ,
97
97
W : FrameSize + Word ,
98
98
CH : Channel ,
99
99
S : ReadBuffer < Word = W > ,
100
100
{
101
- pub fn new ( spi : Spi < SPI , W > , channel : CH , source : S ) -> Self {
101
+ pub fn new ( spi : & ' a mut Spi < SPI , W > , channel : CH , source : S ) -> Self {
102
102
let config = DmaConfig :: new ( ) . with_request ( SPI :: tx_dma_request ( ) ) ;
103
103
let destination = DmaTx :: new ( ) ;
104
104
let transfer = DmaTransfer :: memory_to_peripheral (
@@ -205,7 +205,13 @@ type DuplexInplaceDmaTransfer<'a, SPI, W, TX, RX> =
205
205
DuplexDmaTransfer < ' a , SPI , W , TX , RX , & ' static [ W ] , & ' static mut [ W ] > ;
206
206
207
207
impl < SPI : Instance , W : FrameSize + Word > Spi < SPI , W > {
208
- pub fn dma_transfer_inplace < TX : Channel , RX : Channel > (
208
+ pub fn write_dma < TX : Channel > ( & mut self , channel : TX , data : & ' static [ W ] ) -> Result < TxDmaTransfer < SPI , W , TX , & ' static [ W ] > , Error > {
209
+ let mut transfer = TxDmaTransfer :: new ( self , channel, data) ;
210
+ transfer. start ( ) ?;
211
+ Ok ( transfer)
212
+ }
213
+
214
+ pub fn transfer_inplace_dma < TX : Channel , RX : Channel > (
209
215
& mut self ,
210
216
buffer : & ' static mut [ W ] ,
211
217
tx_channel : TX ,
0 commit comments