ch58x-hal 0.0.2

HAL for the CH583/CH582/CH581 RISC-V BLE microcotrollers from WCH
Documentation
#![no_std]
#![no_main]

use core::arch::{asm, global_asm};
use core::fmt::Write;
use core::writeln;

use ch58x_hal as hal;
use embedded_hal_1::delay::DelayNs;
use hal::delay::CycleDelay;
use hal::gpio::{AnyPin, Input, Level, Output, OutputDrive, Pull};
use hal::interrupt::Interrupt;
use hal::isp::EEPROM_BLOCK_SIZE;
use hal::rtc::{DateTime, Rtc};
use hal::sysctl::Config;
use hal::uart::UartTx;
use hal::{pac, peripherals, println, Peripherals};

#[qingke_rt::entry]
fn main() -> ! {
    // LED PA8
    // hal::sysctl::Config::pll_60mhz().freeze();
    ///hal::sysctl::Config::pll_60mhz().use_lse().freeze();
    let mut config = hal::Config::default();
    config.clock.use_pll_60mhz().enable_lse();
    config.enable_dcdc = true;
    config.low_power = true;
    config.clock.enable_lse();

    //let p = Peripherals::take();
    let p = hal::init(config);
    let mut delay = CycleDelay;

    // let mut led = Output::new(p.PA8, Level::Low, OutputDrive::_5mA);
    let mut led = Output::new(p.PB18, Level::Low, OutputDrive::_5mA);

    let mut download_button = Input::new(p.PB22, Pull::Up);
    let mut reset_button = Input::new(p.PB23, Pull::Up);

    let mut uart = UartTx::new(p.UART1, p.PA9, Default::default()).unwrap();
    writeln!(uart, "\n\n\nHello World!").unwrap();
    writeln!(uart, "Clocks: {}", hal::sysctl::clocks().hclk).unwrap();
    writeln!(uart, "ChipID: {:02x}", hal::signature::get_chip_id());
    unsafe {
        hal::set_default_serial(uart);
    }

    let mut rtc = hal::rtc::Rtc;

    loop {
        unsafe {
            led.toggle();

            // writeln!(uart, "day {:?}", rtc.counter_day()).unwrap();
            // writeln!(uart, "2s {:?}", rtc.counter_2s()).unwrap();

            //  writeln!(uart, "tick! {}", SysTick::now()).unwrap();
            //delay.delay_ms(1000);
            delay.delay_ms(1000);

            println!("time {}", rtc.now());
        }
    }
}

#[panic_handler]
fn panic(info: &core::panic::PanicInfo) -> ! {
    use core::fmt::Write;

    let pa9 = unsafe { peripherals::PA9::steal() };
    let uart1 = unsafe { peripherals::UART1::steal() };
    let mut serial = UartTx::new(uart1, pa9, Default::default()).unwrap();

    let _ = writeln!(&mut serial, "\n\n\n{}", info);

    loop {}
}