Implements UART.reader()

wch-ch32v003
Felix "xq" Queißner 2 years ago
parent 7b69211d41
commit b0b90a7cf0

2
deps/microzig vendored

@ -1 +1 @@
Subproject commit 681b3b0d7a6b2fc5d0f8918c583c790c646a31f1 Subproject commit 15bc1fc06da3b6c622a21fa438e40be247d9dee1

@ -75,12 +75,18 @@ pub const UART = enum {
uart1, uart1,
const WriteError = error{}; const WriteError = error{};
const ReadError = error{};
pub const Writer = std.io.Writer(UART, WriteError, write); pub const Writer = std.io.Writer(UART, WriteError, write);
pub const Reader = std.io.Reader(UART, ReadError, read);
pub fn writer(uart: UART) Writer { pub fn writer(uart: UART) Writer {
return .{ .context = uart }; return .{ .context = uart };
} }
pub fn reader(uart: UART) Reader {
return .{ .context = uart };
}
fn getRegs(uart: UART) *volatile UartRegs { fn getRegs(uart: UART) *volatile UartRegs {
return &uarts[@enumToInt(uart)]; return &uarts[@enumToInt(uart)];
} }
@ -142,6 +148,15 @@ pub const UART = enum {
return payload.len; return payload.len;
} }
pub fn read(uart: UART, buffer: []u8) ReadError!usize {
const uart_regs = uart.getRegs();
for (buffer) |*byte| {
while (!uart.isReadable()) {}
byte.* = @truncate(u8, uart_regs.dr);
}
return buffer.len;
}
pub fn readWord(uart: UART) u8 { pub fn readWord(uart: UART) u8 {
const uart_regs = uart.getRegs(); const uart_regs = uart.getRegs();
while (!uart.isReadable()) {} while (!uart.isReadable()) {}

Loading…
Cancel
Save