Something went wrong. Try again.
Something went wrong. Try again.
1.0 kB · 50 lines
Rust
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051use core::fmt::{self, Write};
const UART: usize = 0x1000_0000;const UART_STATUS: usize = UART + 0x5;const MASK: u8 = 1 << 5;
pub struct Uart;
impl Uart { pub fn write_byte(src: u8) { unsafe { let status = UART_STATUS as *mut u8; let reg = UART as *mut u8;
while core::ptr::read_volatile(status) & MASK == 0 {}
core::ptr::write_volatile(reg, src); } }
pub fn print(args: fmt::Arguments) { Uart.write_fmt(args).ok(); }}
impl Write for Uart { fn write_str(&mut self, s: &str) -> core::fmt::Result { for byte in s.as_bytes() { Self::write_byte(*byte); } Ok(()) }}
#[macro_export]macro_rules! uprint { ($($arg:tt)*) => {{ $crate::uart::Uart::print(core::format_args!($($arg)*)); }};}
#[macro_export]macro_rules! uprintln { () => { $crate::uprint!("\n") }; ($($arg:tt)*) => {{ uprint!("{}\n", core::format_args!($($arg)*)); }}}