uart: replace mod with masking
This commit is contained in:
parent
f261cac536
commit
97d197237c
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue