1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-25 17:25:20 +03:00

Fix SPI LL Segment Repetition

This commit is contained in:
Martin Luessi 2022-04-16 08:39:50 -07:00
parent f5a56804b1
commit 7fb0c79ff4

View file

@ -644,6 +644,7 @@ void spiSequenceStart(const extDevice_t *dev)
spiInternalStartDMA(dev); spiInternalStartDMA(dev);
} else { } else {
busSegment_t *lastSegment = NULL; busSegment_t *lastSegment = NULL;
bool segmentComplete;
// Manually work through the segment list performing a transfer for each // Manually work through the segment list performing a transfer for each
while (bus->curSegment->len) { while (bus->curSegment->len) {
@ -663,15 +664,17 @@ void spiSequenceStart(const extDevice_t *dev)
IOHi(dev->busType_u.spi.csnPin); IOHi(dev->busType_u.spi.csnPin);
} }
segmentComplete = true;
if (bus->curSegment->callback) { if (bus->curSegment->callback) {
switch(bus->curSegment->callback(dev->callbackArg)) { switch(bus->curSegment->callback(dev->callbackArg)) {
case BUS_BUSY: case BUS_BUSY:
// Repeat the last DMA segment // Repeat the last DMA segment
bus->curSegment--; segmentComplete = false;
break; break;
case BUS_ABORT: case BUS_ABORT:
bus->curSegment = (busSegment_t *)BUS_SPI_FREE; bus->curSegment = (busSegment_t *)BUS_SPI_FREE;
segmentComplete = false;
return; return;
case BUS_READY: case BUS_READY:
@ -680,8 +683,10 @@ void spiSequenceStart(const extDevice_t *dev)
break; break;
} }
} }
lastSegment = (busSegment_t *)bus->curSegment; if (segmentComplete) {
bus->curSegment++; lastSegment = (busSegment_t *)bus->curSegment;
bus->curSegment++;
}
} }
if (lastSegment && !lastSegment->negateCS) { if (lastSegment && !lastSegment->negateCS) {