new-sonar/firmware/src/main.rs

66 lines
1.3 KiB
Rust

#![no_std]
#![no_main]
extern crate panic_halt;
use core::{arch::asm, ptr::{write, read}};
use core::fmt::Write;
use embedded_hal::prelude::_embedded_hal_blocking_i2c_Write;
use riscv_rt::entry;
mod eth;
mod i2c;
mod uart;
// use `main` as the entry point of this application
// `main` is not allowed to return
#[entry]
fn main() -> ! {
//unsafe { eth::init(); }
//let blink_period = unsafe {
// if eth::is_wishbone_correct() {
// 10_000_000
// } else {
// 500_000
// }
//};
let blink_period = 10_000_000u32;
//let mut i2c = i2c::AmlibI2c::new(0x0200_0000);
//let data = [0u8, 2u8];
//i2c.write(0xAA, &data).unwrap();
let mut uart = uart::AmlibUart::new(0x0200_0040);
loop {
//eth::tranmsit();
uart.write_str("Hello world!\r\n");
write_led(0);
busy_wait(blink_period);
write_led(1);
busy_wait(blink_period);
}
}
fn busy_wait(num_nops: u32) {
for _ in 0..num_nops {
unsafe {
asm!("nop");
}
}
}
fn write_led(val: u32) {
unsafe { write_reg(0x01003000, val); }
}
unsafe fn write_reg<T>(addr: u32, value: T) {
write(addr as *mut T, value);
}
unsafe fn read_reg<T>(addr: u32) -> T {
return read(addr as *mut T);
}