mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
ports/stm32: Fix SPI HAL DMA/blocking transfers.
This commit is contained in:
parent
13b0ad50d4
commit
b27aed8138
@ -22,6 +22,7 @@ typedef enum {
|
||||
OMV_SPI_XFER_NONBLOCK = (1 << 2),
|
||||
OMV_SPI_XFER_CIRCULAR = (1 << 3),
|
||||
OMV_SPI_XFER_FAILED = (1 << 4),
|
||||
OMV_SPI_XFER_COMPLETE = (1 << 5),
|
||||
} omv_spi_xfer_flags_t;
|
||||
|
||||
typedef struct _omv_spi_config {
|
||||
@ -61,7 +62,7 @@ typedef struct _omv_spi {
|
||||
void *userdata;
|
||||
omv_spi_callback_t callback;
|
||||
uint32_t xfer_error;
|
||||
omv_spi_xfer_flags_t xfer_flags;
|
||||
volatile omv_spi_xfer_flags_t xfer_flags;
|
||||
#ifdef OMV_SPI_PORT_BITS
|
||||
// Additional port-specific fields like device base pointer,
|
||||
// dma handles, more I/Os etc... are included directly here,
|
||||
|
||||
@ -178,24 +178,34 @@ int omv_spi_transfer_start(omv_spi_t *spi, omv_spi_transfer_t *xfer)
|
||||
|
||||
if (spi->xfer_flags & OMV_SPI_XFER_BLOCKING) {
|
||||
if (xfer->txbuf && xfer->rxbuf) {
|
||||
if (HAL_SPI_TransmitReceive(spi->descr,
|
||||
xfer->rxbuf, xfer->rxbuf, xfer->size, xfer->timeout) != HAL_OK) {
|
||||
if (HAL_SPI_TransmitReceive(spi->descr, xfer->txbuf,
|
||||
xfer->rxbuf, xfer->size, xfer->timeout) != HAL_OK) {
|
||||
return -1;
|
||||
}
|
||||
} else if (xfer->txbuf) {
|
||||
if (HAL_SPI_Transmit(spi->descr,
|
||||
xfer->txbuf, xfer->size, xfer->timeout) != HAL_OK) {
|
||||
if (HAL_SPI_Transmit(spi->descr, xfer->txbuf, xfer->size, xfer->timeout) != HAL_OK) {
|
||||
return -1;
|
||||
}
|
||||
} else if (xfer->rxbuf) {
|
||||
if (HAL_SPI_Receive(spi->descr,
|
||||
xfer->rxbuf, xfer->size, xfer->timeout) != HAL_OK) {
|
||||
if (HAL_SPI_Receive(spi->descr, xfer->rxbuf, xfer->size, xfer->timeout) != HAL_OK) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
} else if (spi->xfer_flags & OMV_SPI_XFER_DMA) {
|
||||
//HAL_NVIC_EnableIRQ(ISC_SPI_DMA_IRQn);
|
||||
HAL_SPI_Receive_DMA(spi->descr, xfer->rxbuf, xfer->size);
|
||||
if (xfer->txbuf && xfer->rxbuf) {
|
||||
if (HAL_SPI_TransmitReceive_DMA(spi->descr, xfer->txbuf,
|
||||
xfer->rxbuf, xfer->size) != HAL_OK) {
|
||||
return -1;
|
||||
}
|
||||
} else if (xfer->txbuf) {
|
||||
if (HAL_SPI_Transmit_DMA(spi->descr, xfer->txbuf, xfer->size) != HAL_OK) {
|
||||
return -1;
|
||||
}
|
||||
} else if (xfer->rxbuf) {
|
||||
if (HAL_SPI_Receive_DMA(spi->descr, xfer->rxbuf, xfer->size) != HAL_OK) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user