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:
committed by
Raphael Coeffic
parent
182bc2355e
commit
07d0a66368
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user