diff --git a/build.rs b/build.rs index a4bcbfa..942aad7 100644 --- a/build.rs +++ b/build.rs @@ -10,14 +10,9 @@ fn main() { fs::write(out_dir.join("libCH58xBLE.a"), include_bytes!("vendor/LIBCH58xBLE.a")).unwrap(); } - // Put the linker script somewhere the linker can find it. - // fs::write(out_dir.join("link.x"), include_bytes!("link.x")).unwrap(); - fs::write(out_dir.join("memory.x"), include_bytes!("memory.x")).unwrap(); println!("cargo:rustc-link-search={}", out_dir.display()); - //println!("cargo:rustc-link-search={}", out_dir.display()); - println!("cargo:rerun-if-changed=memory.x"); println!("cargo:rerun-if-changed=build.rs"); } diff --git a/examples/blinky.rs b/examples/blinky.rs index 7b6b4a7..ac95ac9 100644 --- a/examples/blinky.rs +++ b/examples/blinky.rs @@ -14,8 +14,6 @@ fn main() -> ! { let mut delay = CycleDelay; - let mut rtc = hal::rtc::Rtc; - // LED PA8 // let mut led = Output::new(p.PA8, Level::Low, OutputDrive::_5mA); let mut led = Output::new(p.PB18, Level::Low, OutputDrive::_5mA); diff --git a/src/interrupt.rs b/src/interrupt.rs index 1a95ec2..4b7da37 100644 --- a/src/interrupt.rs +++ b/src/interrupt.rs @@ -1,10 +1,7 @@ use core::sync::atomic::{compiler_fence, Ordering}; -use core::{mem, ptr}; pub use qingke::interrupt::Priority; -use qingke_rt::CoreInterrupt as CoreInterruptEnum; -use crate::pac; use crate::pac::interrupt::Interrupt as InterruptEnum; use crate::pac::__EXTERNAL_INTERRUPTS as _; diff --git a/src/rt.rs b/src/rt.rs deleted file mode 100644 index 4a1de94..0000000 --- a/src/rt.rs +++ /dev/null @@ -1,277 +0,0 @@ -//! rt for CH58x - -use core::arch::global_asm; - -#[export_name = "error: riscv-rt appears more than once in the dependency graph"] -#[doc(hidden)] -pub static __ONCE__: () = (); - -#[doc(hidden)] -pub union Vector { - handler: unsafe extern "C" fn(), - reserved: usize, -} - -#[doc(hidden)] -#[no_mangle] -#[allow(unused_variables, non_snake_case)] -pub fn DefaultInterruptHandler() { - loop { - // Prevent this from turning into a UDF instruction - // see rust-lang/rust#28728 for details - continue; - } -} - -#[derive(Copy, Clone, Debug, PartialEq, Eq)] -#[repr(u16)] -#[allow(non_camel_case_types)] -pub enum Interrupt { - NonMaskableInt = 2, - HardFault = 3, - EcallM = 5, - EcallU = 8, - BreakPoint = 9, - SysTick = 12, - Software = 14, - ///16 - TMR0_IRQHandler - TMR0 = 16, - ///17 - GPIOA_IRQHandler - GPIOA = 17, - ///18 - GPIOB_IRQHandler - GPIOB = 18, - ///19 - SPI0_IRQHandler - SPI0 = 19, - ///21 - LLE_IRQHandler - BLEL = 20, - ///20 - BB_IRQHandler - BLEB = 21, - ///22 - USB_IRQHandler - USB = 22, - ///24 - TMR1_IRQHandler - TMR1 = 24, - ///25 - TMR2_IRQHandler - TMR2 = 25, - ///26 - UART0_IRQHandler - UART0 = 26, - ///27 - UART1_IRQHandler - UART1 = 27, - ///28 - RTC_IRQHandler - RTC = 28, - ///29 - ADC_IRQHandler - ADC = 29, - ///30 - I2C_IRQHandler - I2C = 30, - ///31 - PPWMX_SPI1_IRQHandler - PWMX = 31, - ///32 - TMR3_IRQHandler - TMR3 = 32, - ///33 - UART2_IRQHandler - UART2 = 33, - ///34 - UART3_IRQHandler - UART3 = 34, - ///35 - WDOG_BAT_IRQHandler - WDOG_BAT = 35, -} - -// Overwrites PAC's interrupt handlers -extern "C" { - fn NonMaskableInt(); - - fn HardFault(); - - fn EcallM(); - - fn EcallU(); - - fn BreakPoint(); - - fn SysTick(); - - fn Software(); - - // External interrupts - fn TMR0(); - fn GPIOA(); - fn GPIOB(); - fn SPI0(); - fn BLEB(); - fn BLEL(); - fn USB(); - fn TMR1(); - fn TMR2(); - fn UART0(); - fn UART1(); - fn RTC(); - fn ADC(); - fn I2C(); - fn PWMX(); - fn TMR3(); - fn UART2(); - fn UART3(); - fn WDOG_BAT(); -} - -#[doc(hidden)] -#[link_section = ".vector_table.interrupts"] -#[no_mangle] -pub static __INTERRUPTS: [Vector; 36] = [ - Vector { reserved: 0 }, - Vector { reserved: 0 }, // reset? - // 2: Non-Maskable Interrupt. - Vector { - handler: NonMaskableInt, - }, - // 3: Hard Fault Interrupt. - Vector { handler: HardFault }, - // UNDOCUMENTED: magic value from official SDK, used for tracking user option modification - Vector { reserved: 0xF5F9BDA9 }, - // 5: ECALL-M - Vector { handler: EcallM }, - Vector { reserved: 0 }, - Vector { reserved: 0 }, - // 8: ECALL-U - Vector { handler: EcallU }, - // 9: Breakpoint - Vector { handler: BreakPoint }, - // 10-11 - Vector { reserved: 0 }, - Vector { reserved: 0 }, - // 12 - Vector { handler: SysTick }, - Vector { reserved: 0 }, - Vector { handler: Software }, - Vector { reserved: 0 }, - // External interrupts - // 15 - Vector { handler: TMR0 }, - Vector { handler: GPIOA }, - Vector { handler: GPIOB }, - Vector { handler: SPI0 }, - Vector { handler: BLEB }, - Vector { handler: BLEL }, - Vector { handler: USB }, - Vector { reserved: 0 }, - Vector { handler: TMR1 }, - Vector { handler: TMR2 }, - Vector { handler: UART0 }, - Vector { handler: UART1 }, - Vector { handler: RTC }, - Vector { handler: ADC }, - Vector { handler: I2C }, - Vector { handler: PWMX }, - Vector { handler: TMR3 }, - Vector { handler: UART2 }, - Vector { handler: UART3 }, - Vector { handler: WDOG_BAT }, -]; - -macro_rules! cfg_global_asm { - {@inner, [$($x:tt)*], } => { - global_asm!{$($x)*} - }; - (@inner, [$($x:tt)*], #[cfg($meta:meta)] $asm:literal, $($rest:tt)*) => { - #[cfg($meta)] - cfg_global_asm!{@inner, [$($x)* $asm,], $($rest)*} - #[cfg(not($meta))] - cfg_global_asm!{@inner, [$($x)*], $($rest)*} - }; - {@inner, [$($x:tt)*], $asm:literal, $($rest:tt)*} => { - cfg_global_asm!{@inner, [$($x)* $asm,], $($rest)*} - }; - {$($asms:tt)*} => { - cfg_global_asm!{@inner, [], $($asms)*} - }; -} - -cfg_global_asm! { - " - .section .init,\"ax\" - .global _start - .align 1 -// .option norvc -_start: - j handle_reset - ", - " - .section .handle_reset,\"ax\",@progbits - .weak handle_reset - .align 1 -handle_reset: - .option push - .option norelax - la gp, __global_pointer$ - .option pop - la sp, _stack_top - ", - // load highcode from flash to ram - " - la a0, _highcode_lma - la a1, _highcode_vma_start - la a2, _highcode_vma_end - bgeu a1, a2, 2f -1: - lw t0, (a0) - sw t0, (a1) - addi a0, a0, 4 - addi a1, a1, 4 - bltu a1, a2, 1b - ", - // load data from flash to ram - " -2: - la a0, _data_lma - la a1, _data_vma - la a2, _edata - bgeu a1, a2, 2f -1: - lw t0, (a0) - sw t0, (a1) - addi a0, a0, 4 - addi a1, a1, 4 - bltu a1, a2, 1b -2: - ", - // clear bss section - " - la a0, _sbss - la a1, _ebss - bgeu a0, a1, 2f -1: - sw zero, (a0) - addi a0, a0, 4 - bltu a0, a1, 1b -2: - ", - // corecfgr: 流水线控制位 & 动态预测控制位 - // corecfgr: Pipeline control bit & Dynamic prediction control - " - li t0, 0x1f - csrw 0xbc0, t0", - // 打开嵌套中断、硬件压栈功能 - // intsyscr: Open nested interrupts and hardware stack functions - // 0x3 both nested interrupts and hardware stack - // 0x1 only hardware stack - " - li t0, 0x3 - csrw 0x804, t0", - // Restore state - // - use 0x88 to set mpp=0, return to user mode - // - use 0x1888 to set mpp=3, return to machine mode - " - li t0, 0x88 - csrs mstatus, t0 - la t0, __vector_base - ", - // 配置向量表模式为绝对地址模式 - " - ori t0, t0, 3 - csrw mtvec, t0 - ", - " - la t0, main - csrw mepc, t0 - - mret - ", -}