uart: replace mod with masking

This commit is contained in:
King Kévin 2020-06-24 11:47:05 +02:00
parent f261cac536
commit 97d197237c
1 changed files with 3 additions and 3 deletions

View File

@ -30,7 +30,7 @@
#define UART_BAUDRATE 921600 /**< serial baud rate, in bits per second (with 8N1 8 bits, no parity bit, 1 stop bit settings) */
/* output ring buffer, indexes, and available memory */
static volatile uint8_t tx_buffer[64] = {0}; /**< ring buffer for data to transmit */
static volatile uint8_t tx_buffer[128] = {0}; /**< ring buffer for data to transmit (size must be a power of 2) */
static volatile uint16_t tx_i = 0; /**< current position of transmitted data */
static volatile uint16_t tx_used = 0; /**< how much data needs to be transmitted */
@ -83,7 +83,7 @@ void uart_putchar_nonblocking(char c)
// don't go to sleep since this might prevent an interrupt
}
usart_disable_tx_interrupt(USART(UART_ID)); // disable transmit interrupt to prevent index corruption
tx_buffer[(tx_i + tx_used) % LENGTH(tx_buffer)] = c; // put character in buffer
tx_buffer[(tx_i + tx_used) & (LENGTH(tx_buffer) - 1)] = c; // put character in buffer
tx_used++; // update used buffer
usart_enable_tx_interrupt(USART(UART_ID)); // enable transmit interrupt
}
@ -96,7 +96,7 @@ void USART_ISR(UART_ID)(void)
usart_disable_tx_interrupt(USART(UART_ID)); // disable transmit interrupt
} else {
usart_send(USART(UART_ID), tx_buffer[tx_i]); // put data in transmit register
tx_i = (tx_i + 1) % LENGTH(tx_buffer); // update location on buffer
tx_i = (tx_i + 1) & (LENGTH(tx_buffer) - 1); // update location on buffer
tx_used--; // update used size
}
}