diff --git a/kernel/src/debug.rs b/kernel/src/debug.rs index 6c63b6ee2..4a27e97a0 100644 --- a/kernel/src/debug.rs +++ b/kernel/src/debug.rs @@ -6,6 +6,8 @@ use core::fmt::{Error, Write}; #[cfg(baremetal)] use utralib::generated::*; +static mut INITIALIZED: bool = false; + #[macro_use] #[cfg(all( not(test), @@ -67,12 +69,17 @@ pub struct Uart { #[cfg(baremetal)] impl Uart { #[allow(dead_code)] - pub fn enable_rx(self) { + pub fn init(self) { + unsafe { INITIALIZED = true }; let mut uart_csr = CSR::new(0xffcf_0000 as *mut u32); uart_csr.rmwf(utra::uart::EV_ENABLE_RX, 1); } pub fn putc(&self, c: u8) { + if unsafe { INITIALIZED != true } { + return; + } + let mut uart_csr = CSR::new(0xffcf_0000 as *mut u32); // Wait until TXFULL is `0` while uart_csr.r(utra::uart::TXFULL) != 0 { diff --git a/kernel/src/main.rs b/kernel/src/main.rs index e97364cfc..2a9b61dd7 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -76,8 +76,8 @@ pub extern "C" fn init(arg_offset: *const u32, init_offset: *const u32, rpt_offs ) .expect("unable to map serial port") }); + debug::Uart{}.init(); println!("KMAIN: Supervisor mode started..."); - debug::Uart{}.enable_rx(); println!("Claiming IRQ {} via syscall...", utra::uart::UART_IRQ); xous_kernel::claim_interrupt(utra::uart::UART_IRQ, debug::irq, 0 as *mut usize) .expect("Couldn't claim debug interrupt");