28 lines
939 B
Rust
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');
|
|
}
|
|
}
|
|
}
|