/**
* \brief Check if DMA is active and if not try to send data
*
* This function can be called either by application to start data transfer
* or from DMA TX interrupt after previous transfer just finished
*
* \return `1` if transfer just started, `0` if on-going or no data to transmit
*/
uint8_t
usart_start_tx_dma_transfer(void) {
uint32_t primask;
uint8_t started = 0;
The function usart_rx_check(void) returns 1 for started, or 0 for "transmission already in progress".
I'm really not sure I can see reason the result of started / not started would matter to the user.
Either you're already transmitting, in which case the DMA will get to your new ring buffer data soon. Or, congrats, you're sending your data now. Same effect either way your data will be sent.
I suppose the user could implement an abort and then priority send, but not really because you probably aren't certain if there is data in the ring buffer ahead of yours.
Am I missing something on this? Did this just exist for testing?
At https://github.com/MaJerle/stm32-usart-uart-dma-rx-tx/blob/main/projects/usart_rx_idle_line_irq_ringbuff_tx_H7/Src/main.c
The function
usart_rx_check(void)
returns 1 for started, or 0 for "transmission already in progress".I'm really not sure I can see reason the result of
started / not started
would matter to the user.Either you're already transmitting, in which case the DMA will get to your new ring buffer data soon. Or, congrats, you're sending your data now. Same effect either way your data will be sent.
I suppose the user could implement an abort and then priority send, but not really because you probably aren't certain if there is data in the ring buffer ahead of yours.
Am I missing something on this? Did this just exist for testing?