@@ -614,7 +614,7 @@ void spi_transfer(const spi_t *self, size_t len, const uint8_t *src, uint8_t *de
614614
615615 if (dest == NULL ) {
616616 // send only
617- if (len == 1 || query_irq () == IRQ_STATE_DISABLED ) {
617+ if (len == 1 || query_irq () == IRQ_STATE_DISABLED || ! DMA_BUFFER ( src ) ) {
618618 status = HAL_SPI_Transmit (self -> spi , (uint8_t * )src , len , timeout );
619619 } else {
620620 DMA_HandleTypeDef tx_dma ;
@@ -640,7 +640,7 @@ void spi_transfer(const spi_t *self, size_t len, const uint8_t *src, uint8_t *de
640640 }
641641 } else if (src == NULL ) {
642642 // receive only
643- if (len == 1 || query_irq () == IRQ_STATE_DISABLED ) {
643+ if (len == 1 || query_irq () == IRQ_STATE_DISABLED || ! DMA_BUFFER ( dest ) ) {
644644 status = HAL_SPI_Receive (self -> spi , dest , len , timeout );
645645 } else {
646646 DMA_HandleTypeDef tx_dma , rx_dma ;
@@ -676,7 +676,7 @@ void spi_transfer(const spi_t *self, size_t len, const uint8_t *src, uint8_t *de
676676 }
677677 } else {
678678 // send and receive
679- if (len == 1 || query_irq () == IRQ_STATE_DISABLED ) {
679+ if (len == 1 || query_irq () == IRQ_STATE_DISABLED || ! DMA_BUFFER ( src ) || ! DMA_BUFFER ( dest ) ) {
680680 status = HAL_SPI_TransmitReceive (self -> spi , (uint8_t * )src , dest , len , timeout );
681681 } else {
682682 DMA_HandleTypeDef tx_dma , rx_dma ;
0 commit comments