driver: uart: stm32: Clear buffer length only in UART TC event
The buffer_length != 0 is used to check if there is transfer ongoing inside the uart_stm32_async_tx function. uart_stm32_dma_tx_cb clears it to 0 when TX DMA is finished, but before the USART send all the data from shift register. buffer_length is also cleared in callback async_evt_tx_done, which is called when USART finished sending all the bytes. If the uart_stm32_async_tx would be called after uart_stm32_async_tx, but before async_evt_tx_done there could be race condition on buffer_length. Signed-off-by: Adam BERLINGER <adam.berlinger@st.com>
This commit is contained in:
parent
56446ffbe8
commit
ccf07d45b5
1 changed files with 0 additions and 2 deletions
|
@ -1532,8 +1532,6 @@ void uart_stm32_dma_tx_cb(const struct device *dma_dev, void *user_data,
|
||||||
stat.pending_length;
|
stat.pending_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
data->dma_tx.buffer_length = 0;
|
|
||||||
|
|
||||||
irq_unlock(key);
|
irq_unlock(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue