From e9b88c49b34951519c54a793b4fd49fb34a873ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Sun, 17 Jun 2018 12:09:50 +0200 Subject: [PATCH] BV UART: wait for transfer to complete before switching it off --- lib/busvoodoo_uart_generic.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/busvoodoo_uart_generic.c b/lib/busvoodoo_uart_generic.c index 4fbc353..d288583 100644 --- a/lib/busvoodoo_uart_generic.c +++ b/lib/busvoodoo_uart_generic.c @@ -280,7 +280,7 @@ void busvoodoo_uart_generic_exit(void) gpio_set_mode(busvoodoo_uart_generic_specific->rx_port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, busvoodoo_uart_generic_specific->rx_pin); // set pin back to floating input if (busvoodoo_uart_generic_specific->hwflowctl) { gpio_set_mode(busvoodoo_uart_generic_specific->rts_port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, busvoodoo_uart_generic_specific->rts_pin); // set pin back to floating input - gpio_set_mode(busvoodoo_uart_generic_specific->cts_pin, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, busvoodoo_uart_generic_specific->cts_pin); // set pin back to floating input + gpio_set_mode(busvoodoo_uart_generic_specific->cts_port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, busvoodoo_uart_generic_specific->cts_pin); // set pin back to floating input } if (busvoodoo_uart_generic_specific->multidrive) { busvoodoo_embedded_pullup(false); // disable embedded pull-ups @@ -307,6 +307,7 @@ static void busvoodoo_uart_generic_write(uint8_t value) // display data send printf("write: '%c'/0x%02x\n", value, value); } + while ((0==((USART_SR(busvoodoo_uart_generic_specific->usart)) & USART_SR_TC) && !user_input_available)); // wait for transfer to be complete if (user_input_available) { // user interrupted flow user_input_get(); // discard user input } @@ -520,6 +521,7 @@ static void busvoodoo_uart_generic_command_transmit(void* argument) usart_enhanced_send(busvoodoo_uart_generic_specific->usart, ((char*)(argument))[i]); // transmit character } } + while ((0==((USART_SR(busvoodoo_uart_generic_specific->usart)) & USART_SR_TC) && !user_input_available)); // wait for transfer to be complete if (user_input_available) { // user interrupted flow user_input_get(); // discard user input } @@ -612,6 +614,7 @@ static void busvoodoo_uart_generic_command_transceive(void* argument) usart_enhanced_send(busvoodoo_uart_generic_specific->usart, c); // send user character busvoodoo_led_blue_pulse(BUSVOODOO_LED_PULSE); // enable blue LED to show transmission } + while ((0==((USART_SR(busvoodoo_uart_generic_specific->usart)) & USART_SR_TC) && !user_input_available)); // wait for transfer to be complete if (busvoodoo_uart_generic_specific->tx_post) { (*busvoodoo_uart_generic_specific->tx_post)(); }