#[derive(derive_mmio::Mmio)]
#[repr(C)]
pub struct Uart {
data: u32,
#[mmio(Read, Write, Modify)]
control: u32,
#[mmio(PureRead)]
status: u32,
#[mmio(Read)]
errors: u32,
_reserved: u32,
}
fn main() {
let mut uart = Uart {
data: 0xA,
control: 0xC,
status: 0xF,
errors: 0x2,
_reserved: 0,
};
let mut mmio_uart = unsafe { Uart::new_mmio(core::ptr::addr_of_mut!(uart)) };
println!("sample UART is @ {:p}", core::ptr::addr_of_mut!(uart));
println!("data = {}", mmio_uart.read_data());
mmio_uart.write_data(0x0B);
println!("data = {}", mmio_uart.read_data());
println!("data register is at = {:p}", mmio_uart.pointer_to_data());
mmio_uart.modify_control(|f| {
println!("control was {f}, is now 32");
32
});
println!("control = {}", mmio_uart.read_control());
println!("control register is @ {:p}", mmio_uart.pointer_to_control());
println!("status = {}", mmio_uart.read_status());
println!("status register is @ {:p}", mmio_uart.pointer_to_status());
let mmio_uart = unsafe { Uart::new_mmio(core::ptr::addr_of_mut!(uart)) };
println!("status = {}", mmio_uart.read_status());
}
#[test]
fn test_main() {
main()
}