Files
novaOS/src/main.rs

47 lines
850 B
Rust

#![no_main]
#![no_std]
#![feature(asm_experimental_arch)]
use core::panic::PanicInfo;
use gpio::{pull_down_gpio47, pull_up_gpio47};
mod gpio;
mod uart;
#[panic_handler]
fn panic(_panic: &PanicInfo) -> ! {
loop {
uart::print("Panic");
}
}
#[no_mangle]
#[unsafe(naked)]
pub extern "C" fn _start() -> ! {
core::arch::naked_asm!("mov sp, #0x80000", "bl main");
}
#[no_mangle]
fn main() {
uart::configure_uart();
// Delay so clock speed can stabilize
unsafe { delay(50000) }
uart::print("Hello World!\n");
loop {
pull_up_gpio47();
unsafe { delay(10_000_000) } // ~0.5s
pull_down_gpio47();
unsafe { delay(10_000_000) }
}
}
unsafe fn delay(count: u32) {
for _ in 0..count {
// Prevent compiler optimizing away the loop
core::arch::asm!("nop");
}
}