1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-26 09:45:37 +03:00

Improved handling of odd-length data

This commit is contained in:
Martin Budden 2017-07-31 10:58:22 +01:00
parent 99d78cb201
commit d460e545d4

View file

@ -235,14 +235,13 @@ bool spiTransfer(SPI_TypeDef *instance, const uint8_t *txData, uint8_t *rxData,
{ {
// set 16-bit transfer // set 16-bit transfer
CLEAR_BIT(instance->CR2, SPI_RXFIFO_THRESHOLD); CLEAR_BIT(instance->CR2, SPI_RXFIFO_THRESHOLD);
while (len) { while (len > 1) {
uint16_t spiTimeout = 1000; int spiTimeout = 1000;
while (!LL_SPI_IsActiveFlag_TXE(instance)) { while (!LL_SPI_IsActiveFlag_TXE(instance)) {
if ((spiTimeout--) == 0) { if ((spiTimeout--) == 0) {
return spiTimeoutUserCallback(instance); return spiTimeoutUserCallback(instance);
} }
} }
if (len > 1) {
uint16_t w; uint16_t w;
if (txData) { if (txData) {
w = *((uint16_t *)txData); w = *((uint16_t *)txData);
@ -264,9 +263,16 @@ bool spiTransfer(SPI_TypeDef *instance, const uint8_t *txData, uint8_t *rxData,
rxData += 2; rxData += 2;
} }
len -= 2; len -= 2;
} else { }
// set 8-bit transfer // set 8-bit transfer
SET_BIT(instance->CR2, SPI_RXFIFO_THRESHOLD); SET_BIT(instance->CR2, SPI_RXFIFO_THRESHOLD);
if (len) {
int spiTimeout = 1000;
while (!LL_SPI_IsActiveFlag_TXE(instance)) {
if ((spiTimeout--) == 0) {
return spiTimeoutUserCallback(instance);
}
}
uint8_t b = txData ? *(txData++) : 0xFF; uint8_t b = txData ? *(txData++) : 0xFF;
LL_SPI_TransmitData8(instance, b); LL_SPI_TransmitData8(instance, b);
@ -282,7 +288,6 @@ bool spiTransfer(SPI_TypeDef *instance, const uint8_t *txData, uint8_t *rxData,
} }
--len; --len;
} }
}
return true; return true;
} }