gd32e230_uart_ring_buffer/Src/uart_ring_buffer.c

35 lines
905 B
C

#include "uart_ring_buffer.h"
static volatile uint8_t uart_rx_buffer[UART_RX_BUFFER_SIZE];
static volatile uint16_t uart_rx_write = 0;
static volatile uint16_t uart_rx_read = 0;
void uart_ring_buffer_init(void) {
uart_rx_write = 0;
uart_rx_read = 0;
}
uint16_t uart_rx_available(void) {
return (uart_rx_write + UART_RX_BUFFER_SIZE - uart_rx_read) % UART_RX_BUFFER_SIZE;
}
int uart_rx_get(void) {
if (uart_rx_read == uart_rx_write) return -1; // 空
uint8_t data = uart_rx_buffer[uart_rx_read];
uart_rx_read = (uart_rx_read + 1) % UART_RX_BUFFER_SIZE;
return data;
}
void uart_rx_put(uint8_t data) {
uint16_t next = (uart_rx_write + 1) % UART_RX_BUFFER_SIZE;
if (next != uart_rx_read) { // 缓冲区未满
uart_rx_buffer[uart_rx_write] = data;
uart_rx_write = next;
}
}
void uart_rx_clear(void) {
uart_rx_write = 0;
uart_rx_read = 0;
}