Files
riscv64-kernel/src/uart.rs
2026-02-25 14:08:27 +01:00

28 lines
939 B
Rust

//! UART low-level driver.
//!
//! Minimal polling driver used by the kernel for early console output.
const UART_BASE: *mut u8 = 0x10000000 as *mut _;
/// Write a single character to the UART using a simple polling loop.
///
/// This is a very small, platform-specific driver used for early boot
/// console output; it busy-waits until the UART indicates it can accept
/// a new byte.
pub fn write_char_uart(c: char) {
while unsafe { (core::ptr::read_volatile(UART_BASE.byte_add(0x5)) >> 5) & 1 == 0 } {}
unsafe { core::ptr::write_volatile(UART_BASE, c as u8) };
}
/// Write a UTF-8 string to the UART.
///
/// Automatically injects a carriage-return after newline to support terminals
/// that expect CRLF pairs.
pub fn write_uart<T: AsRef<str>>(print: T) {
for a in print.as_ref().chars() {
// Add \r if needed
write_char_uart(a);
if a == '\n' {
write_char_uart('\r');
}
}
}