From 0017735fb20aea550dcd687c9747771eb7a369aa Mon Sep 17 00:00:00 2001 From: Kovacsics Robert Date: Thu, 21 Dec 2023 00:38:48 +0000 Subject: [PATCH] Use lib/examples structure --- examples/minimal.rs | 104 +++++++++++++++++++++++++ src/main.rs => examples/pico_blinky.rs | 7 +- src/lib.rs | 3 + 3 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 examples/minimal.rs rename src/main.rs => examples/pico_blinky.rs (96%) create mode 100644 src/lib.rs diff --git a/examples/minimal.rs b/examples/minimal.rs new file mode 100644 index 0000000..fa15fe4 --- /dev/null +++ b/examples/minimal.rs @@ -0,0 +1,104 @@ +#![no_std] +#![no_main] + +use rp_pico as bsp; + +use bsp::entry; +use bsp::hal::pac::interrupt; +use bsp::hal::{clocks::init_clocks_and_plls, pac, usb::UsbBus, watchdog::Watchdog}; + +// USB Device support +use usb_device::class_prelude::UsbBusAllocator; +use usb_device::prelude::*; + +/// The USB Device Driver (shared with the interrupt). +static mut USB_DEVICE: Option> = None; + +/// The USB Bus Driver (shared with the interrupt). +static mut USB_BUS: Option> = None; + +use panic_probe as _; + +use rp_selfdebug::{dap_execute_command, dap_setup, CmsisDap}; + +/// The USB CMSIS-DAP Device Driver (shared with the interrupt). +static mut USB_DAP: Option> = None; + +#[entry] +fn main() -> ! { + let mut pac = pac::Peripherals::take().unwrap(); + let mut watchdog = Watchdog::new(pac.WATCHDOG); + let clocks = init_clocks_and_plls( + bsp::XOSC_CRYSTAL_FREQ, + pac.XOSC, + pac.CLOCKS, + pac.PLL_SYS, + pac.PLL_USB, + &mut pac.RESETS, + &mut watchdog, + ) + .ok() + .unwrap(); + + let usb_bus = UsbBusAllocator::new(UsbBus::new( + pac.USBCTRL_REGS, + pac.USBCTRL_DPRAM, + clocks.usb_clock, + true, + &mut pac.RESETS, + )); + unsafe { + USB_BUS = Some(usb_bus); + } + let bus_ref = unsafe { USB_BUS.as_ref().unwrap() }; + + let usb_dap = CmsisDap::new(bus_ref); + unsafe { + USB_DAP = Some(usb_dap); + } + + let usb_dev = UsbDeviceBuilder::new(bus_ref, UsbVidPid(0x04b4, 0xf138)) + .manufacturer("KoviRobi") + .product("CMSIS-DAP") + .serial_number("Test") + .device_class(2) + .composite_with_iads() + .max_packet_size_0(64) + .build(); + + unsafe { + USB_DEVICE = Some(usb_dev); + }; + + dap_setup(&pac.SYSCFG.dbgforce); + + // Enable the USB interrupt + unsafe { + pac::NVIC::unmask(bsp::hal::pac::Interrupt::USBCTRL_IRQ); + }; + + loop { + cortex_m::asm::wfe(); + } +} + +#[allow(non_snake_case)] +#[interrupt] +fn USBCTRL_IRQ() { + let usb_dev = unsafe { USB_DEVICE.as_mut().unwrap() }; + let dap = unsafe { USB_DAP.as_mut().unwrap() }; + + if usb_dev.poll(&mut [dap]) { + let mut buf = [0u8; 64]; + + match dap.read(&mut buf) { + Err(_e) => { /* Do nothing */ } + Ok(0) => { /* Do nothing */ } + Ok(_) => { + let mut out = [0; 64]; + let (_in_size, out_size) = dap_execute_command(&buf, &mut out); + let _ = dap.write(&out[..out_size as usize]); + } + } + } +} diff --git a/src/main.rs b/examples/pico_blinky.rs similarity index 96% rename from src/main.rs rename to examples/pico_blinky.rs index bd0e872..824b5bf 100644 --- a/src/main.rs +++ b/examples/pico_blinky.rs @@ -36,8 +36,7 @@ static mut USB_SERIAL: Option> = None; use panic_probe as _; -pub mod cmsis_dap; -use cmsis_dap::CmsisDap; +use rp_selfdebug::{dap_execute_command, dap_setup, CmsisDap}; /// The USB CMSIS-DAP Device Driver (shared with the interrupt). static mut USB_DAP: Option> = None; @@ -123,7 +122,7 @@ fn main() -> ! { USB_DEVICE = Some(usb_dev); }; - cmsis_dap::dap_setup(&pac.SYSCFG.dbgforce); + dap_setup(&pac.SYSCFG.dbgforce); // Enable the USB interrupt unsafe { @@ -200,7 +199,7 @@ fn USBCTRL_IRQ() { } Ok(_) => { let mut out = [0; 64]; - let (_in_size, out_size) = cmsis_dap::dap_execute_command(&buf, &mut out); + let (_in_size, out_size) = dap_execute_command(&buf, &mut out); let _ = dap.write(&out[..out_size as usize]); } } diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..2daa4a9 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,3 @@ +#![no_std] +mod cmsis_dap; +pub use cmsis_dap::*;