telemetry driver: clear TC flag before re-enabling TC interrupt

This prevents the USART TC IRQ handler to trigger right after the DMA request has completed, and thus turning the output OFF before the last byte has been transmitted.

Resolves #801
This commit is contained in:
Raphael Coeffic
2021-09-27 11:05:27 +02:00
committed by Raphael Coeffic
parent 182bc2355e
commit 07d0a66368
3 changed files with 12 additions and 0 deletions
@@ -343,7 +343,11 @@ extern "C" void TELEMETRY_DMA_TX_IRQHandler(void)
DEBUG_INTERRUPT(INT_TELEM_DMA);
if (DMA_GetITStatus(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC)) {
DMA_ClearITPendingBit(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC);
// clear TC flag before enabling interrupt
TELEMETRY_USART->SR &= ~USART_SR_TC;
TELEMETRY_USART->CR1 |= USART_CR1_TCIE;
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT) {
outputTelemetryBuffer.reset();
}
@@ -166,7 +166,11 @@ extern "C" void TELEMETRY_DMA_TX_IRQHandler(void)
DEBUG_INTERRUPT(INT_TELEM_DMA);
if (DMA_GetITStatus(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC)) {
DMA_ClearITPendingBit(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC);
// clear TC flag before enabling interrupt
TELEMETRY_USART->SR &= ~USART_SR_TC;
TELEMETRY_USART->CR1 |= USART_CR1_TCIE;
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT) {
outputTelemetryBuffer.reset();
}
@@ -314,7 +314,11 @@ extern "C" void TELEMETRY_DMA_TX_IRQHandler(void)
DEBUG_INTERRUPT(INT_TELEM_DMA);
if (DMA_GetITStatus(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC)) {
DMA_ClearITPendingBit(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC);
// clear TC flag before enabling interrupt
TELEMETRY_USART->SR &= ~USART_SR_TC;
TELEMETRY_USART->CR1 |= USART_CR1_TCIE;
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT) {
outputTelemetryBuffer.reset();
}