#![no_std] #![no_main] use core::arch::global_asm; use gd32vf103_pac::Peripherals; global_asm!(include_str!("boot.S")); #[no_mangle] fn main(_hartid: usize) -> ! { // let peripherals = Peripherals::take().unwrap(); let peripherals = unsafe { Peripherals::steal() }; let rcu = peripherals.RCU; // enable RCU_GPIOA rcu.apb2en.write(|w| { w.paen().set_bit() }); let gpio = peripherals.GPIOA; // led is gpioa pin 7 output push/pull 50mhz gpio.ctl0.write(|w| unsafe { // output mode, push-pull w.ctl7().bits(0b00); // 50 mhz output rate w.md7().bits(0b11); w }); let mut led_on = false; loop { if led_on { gpio.bc.write(|w| w.cr7().set_bit()); if gpio.octl.read().octl7().bit() { panic!("not set"); } } else { gpio.bop.write(|w| w.bop7().set_bit()); if !gpio.octl.read().octl7().bit() { panic!("set"); } } led_on = !led_on; let mut a = 0; for _ in 1..100_000 { a = gpio.octl.read().bits(); } } } #[panic_handler] fn panic(info: &core::panic::PanicInfo) -> ! { if let Some(loc) = info.location() { let _file = loc.file(); let _line = loc.line(); if let Some(_msg) = info.payload().downcast_ref::<&str>() { loop {} } loop {} } loop {} }