summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--ports/mimxrt/machine_spi.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/ports/mimxrt/machine_spi.c b/ports/mimxrt/machine_spi.c
index d6aff2a329..bafe94b970 100644
--- a/ports/mimxrt/machine_spi.c
+++ b/ports/mimxrt/machine_spi.c
@@ -240,17 +240,19 @@ STATIC void machine_spi_init(mp_obj_base_t *self_in, size_t n_args, const mp_obj
STATIC void machine_spi_transfer(mp_obj_base_t *self_in, size_t len, const uint8_t *src, uint8_t *dest) {
machine_spi_obj_t *self = (machine_spi_obj_t *)self_in;
- // Wait a short while for the previous transfer to finish, but not forever
- for (volatile int j = 0; (j < 5000) && ((self->spi_inst->SR & kLPSPI_ModuleBusyFlag) != 0); j++) {}
-
- lpspi_transfer_t masterXfer;
- masterXfer.txData = (uint8_t *)src;
- masterXfer.rxData = (uint8_t *)dest;
- masterXfer.dataSize = len;
- masterXfer.configFlags = (self->master_config->whichPcs << LPSPI_MASTER_PCS_SHIFT) | kLPSPI_MasterPcsContinuous | kLPSPI_MasterByteSwap;
-
- if (LPSPI_MasterTransferBlocking(self->spi_inst, &masterXfer) != kStatus_Success) {
- mp_raise_OSError(EIO);
+ if (len > 0) {
+ // Wait a short while for the previous transfer to finish, but not forever
+ for (volatile int j = 0; (j < 5000) && ((self->spi_inst->SR & kLPSPI_ModuleBusyFlag) != 0); j++) {}
+
+ lpspi_transfer_t masterXfer;
+ masterXfer.txData = (uint8_t *)src;
+ masterXfer.rxData = (uint8_t *)dest;
+ masterXfer.dataSize = len;
+ masterXfer.configFlags = (self->master_config->whichPcs << LPSPI_MASTER_PCS_SHIFT) | kLPSPI_MasterPcsContinuous | kLPSPI_MasterByteSwap;
+
+ if (LPSPI_MasterTransferBlocking(self->spi_inst, &masterXfer) != kStatus_Success) {
+ mp_raise_OSError(EIO);
+ }
}
}