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) */
|
#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 */
|
/* 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_i = 0; /**< current position of transmitted data */
|
||||||
static volatile uint16_t tx_used = 0; /**< how much data needs to be transmitted */
|
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
|
// 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
|
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
|
tx_used++; // update used buffer
|
||||||
usart_enable_tx_interrupt(USART(UART_ID)); // enable transmit interrupt
|
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
|
usart_disable_tx_interrupt(USART(UART_ID)); // disable transmit interrupt
|
||||||
} else {
|
} else {
|
||||||
usart_send(USART(UART_ID), tx_buffer[tx_i]); // put data in transmit register
|
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
|
tx_used--; // update used size
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue