Skip to content

Commit df3f3cf

Browse files
committed
stm32/spi: Ensure buffer is DMA-compatible before transfer.
1 parent a061e74 commit df3f3cf

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

ports/stm32/spi.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)