diff options
-rw-r--r-- | ble/.cargo/config | 6 | ||||
-rw-r--r-- | ble/.gdbinit | 13 | ||||
-rw-r--r-- | ble/Cargo.lock | 31 | ||||
-rw-r--r-- | ble/Cargo.toml | 10 | ||||
-rw-r--r-- | ble/openocd.cfg | 2 | ||||
-rw-r--r-- | ble/src/main.rs | 40 |
6 files changed, 97 insertions, 5 deletions
diff --git a/ble/.cargo/config b/ble/.cargo/config new file mode 100644 index 0000000..c4ce5ef --- /dev/null +++ b/ble/.cargo/config @@ -0,0 +1,6 @@ +[build] +target = "thumbv7em-none-eabihf" + +[target.thumbv7em-none-eabihf] +rustflags = ["-C", "link-arg=-Tlink.x"] +runner = "gdb-multiarch" diff --git a/ble/.gdbinit b/ble/.gdbinit new file mode 100644 index 0000000..a32f910 --- /dev/null +++ b/ble/.gdbinit @@ -0,0 +1,13 @@ +# print demangled symbols by default +set print asm-demangle on + +# OpenOCD +#set remote hardware-breakpoint-limit 6 +#set remote hardware-watchpoint-limit 4 +#target extended-remote :3333 +target remote :3333 +#monitor flash breakpoints 1 +#monitor semihosting enable +#monitor semihosting IOClient 3 +monitor reset +load diff --git a/ble/Cargo.lock b/ble/Cargo.lock index 1ae5de2..42cc690 100644 --- a/ble/Cargo.lock +++ b/ble/Cargo.lock @@ -39,7 +39,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "ble" version = "0.1.0" dependencies = [ + "cortex-m 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cortex-m-rt 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", + "nb 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "nrf52840-hal 0.8.1", + "nrf52840-mdk-bsp 0.1.0", + "panic-semihosting 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "rubble 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "rubble-nrf52 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -85,6 +90,14 @@ dependencies = [ ] [[package]] +name = "cortex-m-semihosting" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cortex-m 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] name = "embedded-hal" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -143,6 +156,13 @@ dependencies = [ ] [[package]] +name = "nrf52840-mdk-bsp" +version = "0.1.0" +dependencies = [ + "nrf52840-hal 0.8.1", +] + +[[package]] name = "nrf52840-pac" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -154,6 +174,15 @@ dependencies = [ ] [[package]] +name = "panic-semihosting" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cortex-m 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cortex-m-semihosting 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] name = "proc-macro2" version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -295,11 +324,13 @@ dependencies = [ "checksum cortex-m 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f3c18719fdc57db65668bfc977db9a0fa1a41d718c5d9cd4f652c9d4b0e0956a" "checksum cortex-m-rt 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "17805910e3ecf029bdbfcc42b7384d9e3d9e5626153fa810002c1ef9839338ac" "checksum cortex-m-rt-macros 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d7ae692573e0acccb1579fef1abf5a5bf1d2f3f0149a22b16870ec9309aee25f" +"checksum cortex-m-semihosting 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "165f3f86f4d1031351a6c9dc8d5a3f8fae2050f9dd6ef925e3d675c232cc0e46" "checksum embedded-hal 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ee4908a155094da7723c2d60d617b820061e3b4efcc3d9e293d206a5a76c170b" "checksum fpa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f074479d683e5a8fd0bf1251d0a5d91b0d9178b867b44962191ed0eaaf8d4009" "checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" "checksum nb 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b1411551beb3c11dedfb0a90a0fa256b47d28b9ec2cdff34c25a2fa59e45dbdc" "checksum nrf52840-pac 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e375b19eec5ae6c75387ea2fff3d5a6f989d65a0af350fcfe854f31243bfdfe2" +"checksum panic-semihosting 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "97cfb37c1d3b5f0cc18bf14485018cccd13bdd24f7b5bfd456c1d8760afef824" "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" "checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" "checksum r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2a38df5b15c8d5c7e8654189744d8e396bddc18ad48041a500ce52d6948941f" diff --git a/ble/Cargo.toml b/ble/Cargo.toml index be54397..ad7b888 100644 --- a/ble/Cargo.toml +++ b/ble/Cargo.toml @@ -4,15 +4,19 @@ version = "0.1.0" authors = ["Brian Cully <bjc@kublai.com>"] edition = "2018" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] +nrf52840-mdk-bsp = { path = "../../nrf52-hal/boards/nrf52840-mdk" } nrf52840-hal = "0.8" rubble = "0.0" rubble-nrf52 = "0.0" +cortex-m = "~0.6" +cortex-m-rt = "~0.6" +panic-semihosting = "~0.5" +nb = "~0.1" [features] -default = ["rubble-nrf52/52840"] +default = ["rt", "rubble-nrf52/52840"] +rt = ["nrf52840-hal/rt"] [patch.crates-io] nrf52840-hal = { path = "../../nrf52-hal/nrf52840-hal" } diff --git a/ble/openocd.cfg b/ble/openocd.cfg new file mode 100644 index 0000000..1aa6f38 --- /dev/null +++ b/ble/openocd.cfg @@ -0,0 +1,2 @@ +source [find interface/cmsis-dap.cfg] +source [find target/nrf52.cfg] diff --git a/ble/src/main.rs b/ble/src/main.rs index e7a11a9..8b8c513 100644 --- a/ble/src/main.rs +++ b/ble/src/main.rs @@ -1,3 +1,39 @@ -fn main() { - println!("Hello, world!"); +//! BLE interface. +#![no_std] +#![no_main] + +use core::fmt::Write; +use cortex_m_rt::entry; +use nb::block; + +#[allow(unused_imports)] +extern crate panic_semihosting; + +use nrf52840_mdk_bsp::{ + hal::{ + prelude::*, + timer::{self, Timer}, + }, + Board, +}; + +#[entry] +fn main() -> ! { + let mut nrf52 = Board::take().unwrap(); + + let mut timer = Timer::new(nrf52.TIMER0); + + write!(nrf52.cdc, "Bootstrap complete.").ok(); + loop { + write!(nrf52.cdc, ".").ok(); + delay(&mut timer, 1_000_000); // 1s + } +} + +fn delay<T>(timer: &mut Timer<T>, cycles: u32) +where + T: timer::Instance, +{ + timer.start(cycles); + let _ = block!(timer.wait()); } |