From d885807c1121ab86eaeeb83523ac4f6a6b9a1757 Mon Sep 17 00:00:00 2001 From: bsongis Date: Sat, 14 Mar 2015 11:48:54 +0100 Subject: [PATCH] [Taranis] SPORT Rx must be OFF when Tx is ON (otherwise it receives what it sends...) --- .../src/targets/taranis/telemetry_driver.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/radio/src/targets/taranis/telemetry_driver.cpp b/radio/src/targets/taranis/telemetry_driver.cpp index 820d04a1b..0d498e4a7 100644 --- a/radio/src/targets/taranis/telemetry_driver.cpp +++ b/radio/src/targets/taranis/telemetry_driver.cpp @@ -97,6 +97,7 @@ void sportSendBuffer(uint8_t *buffer, uint32_t count) sportTxBuffer.ptr = buffer ; sportTxBuffer.count = count ; GPIO_PIN_SPORT_ON->BSRRL = PIN_SPORT_ON ; // output enable + SPORT_USART->CR1 &= ~USART_CR1_RE ; // turn off receiver SPORT_USART->CR1 |= USART_CR1_TXEIE ; } @@ -114,23 +115,27 @@ extern "C" void SPORT_IRQHandler() if (sportTxBuffer.count) { SPORT_USART->DR = *sportTxBuffer.ptr++; if (--sportTxBuffer.count == 0) { - SPORT_USART->CR1 &= ~USART_CR1_TXEIE; // Stop Tx interrupt - SPORT_USART->CR1 |= USART_CR1_TCIE; // Enable complete interrupt + SPORT_USART->CR1 &= ~USART_CR1_TXEIE; // stop Tx interrupt + SPORT_USART->CR1 |= USART_CR1_TCIE; // enable complete interrupt } } } - if (SPORT_USART->SR & USART_SR_TC) { - SPORT_USART->CR1 &= ~USART_CR1_TCIE ; // Stop Complete interrupt + if ((status & USART_SR_TC) && (SPORT_USART->CR1 & USART_CR1_TCIE)) + SPORT_USART->CR1 &= ~USART_CR1_TCIE ; // stop Complete interrupt GPIO_PIN_SPORT_ON->BSRRH = PIN_SPORT_ON ; // output disable + SPORT_USART->CR1 |= USART_CR1_RE ; + while (status & (USART_FLAG_RXNE)) { + status = SPORT_USART->DR; + status = SPORT_USART->SR ; + } } while (status & (USART_FLAG_RXNE | USART_FLAG_ERRORS)) { data = SPORT_USART->DR; - - if (!(status & USART_FLAG_ERRORS)) + if (!(status & USART_FLAG_ERRORS)) { telemetryFifo.push(data); - + } status = SPORT_USART->SR; } }