#![no_std] #![no_main] use libboard_zynq::{print, println, self as zynq, clocks::Clocks, clocks::source::{ClockSource, ArmPll, IoPll}}; use libsupport_zynq as _; #[no_mangle] pub fn main_core0() { println!("\nzc706 main"); let clocks = zynq::clocks::Clocks::get(); println!("CPU Clocks: {}/{}/{}/{}", clocks.cpu_6x4x(), clocks.cpu_3x2x(), clocks.cpu_2x(), clocks.cpu_1x()); // Clock setup #[cfg(feature = "target_zc706")] const CPU_FREQ: u32 = 800_000_000; #[cfg(feature = "target_cora_z7_10")] const CPU_FREQ: u32 = 650_000_000; println!("Setup clock sources..."); ArmPll::setup(2 * CPU_FREQ); Clocks::set_cpu_freq(CPU_FREQ); IoPll::setup(700_000_000); libboard_zynq::stdio::drop_uart(); println!("PLLs set up"); let clocks = zynq::clocks::Clocks::get(); println!("CPU Clocks: {}/{}/{}/{}", clocks.cpu_6x4x(), clocks.cpu_3x2x(), clocks.cpu_2x(), clocks.cpu_1x()); // Flash: Linear Addressing Mode let mut flash = zynq::flash::Flash::new(200_000_000).linear_addressing_mode(); let flash_ram: &[u8] = unsafe { core::slice::from_raw_parts(flash.ptr(), flash.size()) }; for i in 0..=1 { print!("Flash {}:", i); for b in &flash_ram[(i * 16 * 1024 * 1024)..][..128] { print!(" {:02X}", *b); } println!(""); } let mut flash = flash.stop(); // Flash: Manual I/O Mode for i in 0..=1 { let mut flash_io = flash.manual_mode(i); print!("Flash {} ID:", i); for (i, b) in flash_io.rdid().enumerate() { print!(" {:02X}", b); if i % 0x10 == 0xf { println!(""); } else if i % 8 == 7 { print!(" "); } else if i % 4 == 3 { print!(" "); } } println!(""); print!("Flash {} I/O:", i); for o in 0..8 { const CHUNK: u32 = 8; for b in flash_io.read(CHUNK * o, CHUNK as usize) { print!(" {:02X}", b); } } println!(""); flash_io.dump("Read cr1", 0x35); flash_io.dump("Read Autoboot", 0x14); flash_io.dump("Read Bank", 0x16); flash_io.dump("DLP Bank", 0x16); flash_io.dump("Read ESig", 0xAB); flash_io.dump("OTP Read", 0x4B); flash_io.dump("DYB Read", 0xE0); flash_io.dump("PPB Read", 0xE2); flash_io.dump("ASP Read", 0x2B); flash_io.dump("Password Read", 0xE7); for o in 0..8 { const SIZE: u32 = 0x100; flash_io.write_enabled(|flash_io| { println!("Erase page {}", o); flash_io.erase(o * SIZE); }); flash_io.write_enabled(|flash_io| { println!("Program page {}", o); flash_io.program(o * SIZE, [0x55FD02AA; (SIZE >> 2) as usize].iter().cloned()); }); } print!("Flash {} I/O:", i); for o in 0..8 { const CHUNK: u32 = 32; for b in flash_io.read(CHUNK * o, CHUNK as usize) { print!(" {:02X}", b); } } println!(""); flash = flash_io.stop(); } } #[no_mangle] pub fn main_core1() { loop {} }