@@ -877,7 +877,10 @@ static void spi_activate_dma(spi_t *obj, void* rxdata, const void* txdata, int t
877
877
}
878
878
879
879
/* Save amount of TX done by DMA */
880
+
880
881
obj -> tx_buff .pos += tx_length ;
882
+ /* Clear TX registers */
883
+ obj -> spi .spi -> CMD = USART_CMD_CLEARTX ;
881
884
882
885
LDMA_TransferCfg_t xferConf = LDMA_TRANSFER_CFG_PERIPHERAL (dma_periph );
883
886
LDMA_Descriptor_t desc = LDMA_DESCRIPTOR_SINGLE_M2P_BYTE (txdata , target_addr , tx_length );
@@ -923,11 +926,18 @@ static void spi_activate_dma(spi_t *obj, void* rxdata, const void* txdata, int t
923
926
break ;
924
927
}
925
928
929
+ /* Clear RX registers */
930
+ obj -> spi .spi -> CMD = USART_CMD_CLEARRX ;
931
+
926
932
LDMA_TransferCfg_t xferConf = LDMA_TRANSFER_CFG_PERIPHERAL (dma_periph );
927
- LDMA_Descriptor_t desc = LDMA_DESCRIPTOR_SINGLE_M2P_BYTE (source_addr , rxdata , rx_length );
933
+ LDMA_Descriptor_t desc = LDMA_DESCRIPTOR_SINGLE_P2M_BYTE (source_addr , rxdata , rx_length );
928
934
if (obj -> spi .bits >= 9 ){
935
+ #ifdef USE_UINT16_BUFFER
936
+ desc .xfer .size = ldmaCtrlSizeHalf ;
937
+ #else
929
938
desc .xfer .size = ldmaCtrlSizeHalf ;
930
939
desc .xfer .srcInc = ldmaCtrlSrcIncTwo ;
940
+ #endif
931
941
}
932
942
LDMA_StartTransfer (obj -> spi .dmaOptionsRX .dmaChannel , & xferConf , & desc , serial_dmaTransferComplete ,obj -> spi .dmaOptionsRX .dmaCallback .userPtr );
933
943
}
0 commit comments