diff --git a/lib/uart.c b/lib/uart.c index 5049510..6baac9a 100644 --- a/lib/uart.c +++ b/lib/uart.c @@ -42,16 +42,11 @@ #define UART_BAUDRATE 921600 /**< serial baudrate, in bits per second (with 8N1 8 bits, no parity bit, 1 stop bit settings) */ -/* input and output ring buffer, indexes, and available memory */ -static volatile uint8_t rx_buffer[UART_BUFFER] = {0}; /**< ring buffer for received data */ -static volatile uint8_t rx_i = 0; /**< current position of read received data */ -static volatile uint8_t rx_used = 0; /**< how much data has been received and not red */ -static volatile uint8_t tx_buffer[UART_BUFFER] = {0}; /**< ring buffer for data to transmit */ +/* 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_i = 0; /**< current position of transmitted data */ static volatile uint8_t tx_used = 0; /**< how much data needs to be transmitted */ -volatile bool uart_received = false; - void uart_setup(void) { /* enable UART I/O peripheral */ @@ -77,9 +72,6 @@ void uart_setup(void) /* reset buffer states */ tx_i = 0; tx_used = 0; - rx_i = 0; - rx_used = 0; - uart_received = false; } void uart_putchar_blocking(char c) @@ -96,20 +88,6 @@ void uart_flush(void) usart_wait_send_ready(USART(UART_ID)); // wait until transmit register is empty (transmission might not be complete) } -char uart_getchar(void) -{ - while (!rx_used) { // idle until data is available - __WFI(); // sleep until interrupt - } - usart_disable_rx_interrupt(USART(UART_ID)); // disable receive interrupt to prevent index corruption - volatile char to_return = rx_buffer[rx_i]; // get the next available character - rx_i = (rx_i+1)%LENGTH(rx_buffer); // update used buffer - rx_used--; // update used buffer - uart_received = (rx_used!=0); // update available data - usart_enable_rx_interrupt(USART(UART_ID)); // enable receive interrupt - return to_return; -} - void uart_putchar_nonblocking(char c) { while (tx_used>=LENGTH(tx_buffer)) { // idle until buffer has some space @@ -130,19 +108,12 @@ 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(rx_buffer); // update location on buffer + tx_i = (tx_i+1)%LENGTH(tx_buffer); // update location on buffer tx_used--; // update used size } } while (usart_get_flag(USART(UART_ID), USART_SR_RXNE)) { // data has been received (repeat while receiving) char c = usart_recv(USART(UART_ID)); // save character and free UART buffer - // only save data if there is space in the buffer - if (rx_used>=LENGTH(rx_buffer)) { // if buffer is full - rx_i = (rx_i+1)%LENGTH(rx_buffer); // drop oldest data - rx_used--; // update used buffer information - } - rx_buffer[(rx_i+rx_used)%LENGTH(rx_buffer)] = c; // put character in buffer - rx_used++; // update used buffer - uart_received = true; // update available data + user_input_store(c); // store data } } diff --git a/lib/uart.h b/lib/uart.h index 4c10ab8..e6aa93e 100644 --- a/lib/uart.h +++ b/lib/uart.h @@ -20,11 +20,6 @@ */ #pragma once -/** transmit and receive buffer sizes */ -#define UART_BUFFER 128 -/** how many bytes available in the received buffer since last read */ -extern volatile bool uart_received; - /** setup UART peripheral */ void uart_setup(void); /** send character over UART (blocking) @@ -35,11 +30,6 @@ void uart_putchar_blocking(char c); * @note block until all data has been transmitted */ void uart_flush(void); -/** get character received over UART (blocking) - * @return character received over UART - * @note blocks until character is received over UART when received buffer is empty - */ -char uart_getchar(void); /** send character over UART (non-blocking) * @param[in] c character to send * @note blocks if transmit buffer is full, else puts in buffer and returns